图像复原之由投影重建图像

2024-03-25 05:18

本文主要是介绍图像复原之由投影重建图像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图像复原之由投影重建图像

简述部分

引言

最初接触由投影重建图像这块内容的时候是在应用在车牌识别的特征提取,通过车牌在垂直投影下的特征足够其进行不同字符的识别。

这里写图片描述

上图仅仅利用了图像的垂直投影,下面显示了一个简单图像的特定角度下的投影

这里写图片描述

当收集到一副图像各个角度的投影后,并希望通过这些投影的图像重建原图像。通过上图的最后一张图片也就是直接重建的图像可见,直接重建会有非常明显的“晕环”现象。

雷登变换

雷登变换阐述了一幅图像与其在各个角度下投影的具体表示。
这里写图片描述

下面显示一副图像的雷登变换
这里写图片描述

图像在各个角度下的雷登变换的集合称为正弦图。
以第一行的图像为例。明显的,其像素点的值在90°的投影下是最多的,在0°或180°的投影下是最少的。对应于右侧的正弦图也能够体现出来。

试想这样一个问题,如果我们把各个角度下的投影经过一次反投影在求和是否会复原图像呢?答案是肯定的。
这里写图片描述

上图显示了由正弦图直接得到的反投影图像。如引言所述,可见其有非常明显的“晕环现象”。有人可能会想到,如果将每次投影的角度间隔选的小一点是否还会存在这样的问题呢?当然了,增大采样次数是一个消耗资源的方法。而我们这里还有更好的解决这个问题的办法,这个方法是建立在傅里叶切片定理上的。

傅里叶切片定理

这里写图片描述

傅里叶切片定理用一句话表示就是:一个投影的一维傅里叶变换就是得到该投影原图的二维傅里叶变换的一个切片,其切片角度就是投影的角度θ。

由此定理就可以通过投影的频域来消除晕环现象了,这种重建方法称为滤波反投影法。

总结由此方法得到反投影的步骤如下:

  1. 计算每个投影的一维傅里叶变换
  2. 用一个滤波函数|w|乘以每个傅里叶变换,就是加窗。
  3. 得到每个滤波后的一维反傅里叶变换。
  4. 将3得到的求和

这里写图片描述

这就是滤波反投影法(加汉明窗)复原的图像。可见,已经很好的消除了“晕环现象”。

扇形射线束滤波反投影的重建

试想,当我们用扇形射线束代替上述的平行射线束自然会有更加不错的效果。
这里写图片描述

这里写图片描述

扇形射线束是当前CT系统使用的方法,具有高分辨率,高SNR和更快的扫描时间。
下面用matlab的fanbeam实现基于扇形射线束的投影图像

这里写图片描述

  • 使用ifanbeam实现图像重建
    这里写图片描述

  • 左图是直接重建的效果,右图加汉明窗并且将传感器间隔缩小到原来1/10的效果。

示例源码

clc;
clear;
close all;
g1 = zeros(600, 600);
g1(100:500, 250:350) = 1;
g2 = phantom('Modified Shepp-Logan', 600);
subplot(2,2,1);imshow(g1);
subplot(2,2,3); imshow(g2);theta = 0:0.5:179.5;
%执行雷登变换
[R1, xp1] = radon(g1, theta);
[R2, xp2] = radon(g2, theta);
%显示投影图像(正弦图)
r1_show = flipud(R1');
r2_show = flipud(R2');
subplot(2,2,2);imshow(r1_show, [], 'XData', xp1([1 end]), 'YData', [179.5, 0]);
axis xy;
axis on;
xlabel('\rho');
ylabel('\theta');
subplot(2,2,4);imshow(r2_show, [], 'XData', xp2([1 end]), 'YData', [179.5, 0]);
axis xy;
axis on;
xlabel('\rho');
ylabel('\theta');%从正弦图得到反投影图
f1 = iradon(R1, theta, 'Hamming');
f2 = iradon(R2, theta, 'Hamming');
figure;
subplot(1,2,1);imshow(f1, []);
subplot(1,2,2);imshow(f2, []);
%}
%使用扇形射线束
D = 1.5*hypot(size(g1,1), size(g2,2))/2;b1_line=fanbeam(g1, D, 'FanSensorGeometry', 'line', 'FanSensorSpacing', 1, 'FanRotationIncrement', 0.5);
b1_line_s=flipud(b1_line');b2_line=fanbeam(g2, D, 'FanSensorGeometry', 'line', 'FanSensorSpacing', 1, 'FanRotationIncrement', 0.5);
b2_line_s=flipud(b2_line');b1_src=fanbeam(g1, D, 'FanSensorGeometry', 'arc', 'FanSensorSpacing', .08, 'FanRotationIncrement', 0.5);
b2_src=fanbeam(g2, D, 'FanSensorGeometry', 'arc', 'FanSensorSpacing', .08, 'FanRotationIncrement', 0.5);figure;
subplot(2,2,1);imshow(g1);
subplot(2,2,2); imshow(b1_line_s, [], 'XData', [0, 850], 'YData', [0, 360]);
axis xy;
axis on;
ylabel('扇形旋转角度');
xlabel('传感器个数');
subplot(2,2,3);imshow(g2);
subplot(2,2,4); imshow(b2_line_s, [], 'XData', [0, 850], 'YData', [0, 360]);
axis xy;
axis on;
ylabel('扇形旋转角度');
xlabel('传感器个数');%扇形反投影滤波重建
B1 = fanbeam(g2, D);
fB1=ifanbeam(B1, D);B2 = fanbeam(g2, D, 'FanSensorSpacing', .05, 'FanRotationIncrement', .5);
fB2=ifanbeam(B2, D, 'FanSensorSpacing', .05, 'FanRotationIncrement', .5, 'filter', 'Hamming');figure;
subplot(1,2,1);imshow(fB1, []);
subplot(1,2,2);imshow(fB2, []);

这篇关于图像复原之由投影重建图像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843931

相关文章

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境