使用matlab的iradon函数,怎样可以得到的矩阵维数和原矩阵维数一样
时间: 2023-06-05 18:05:01 浏览: 91
对于这个问题,我可以给你一些帮助。使用iradon函数得到的矩阵维数通常会比原矩阵维数小一些。如果你希望得到的矩阵维数和原矩阵维数一样,可以尝试将输入参数interp设为'linear',即iradon(sino,theta,'linear','Ram-Lak',1,size(image,1)),这样可以得到和原矩阵维数一样的矩阵。当然,具体的操作需要根据你的具体情况来确定。希望这能帮到你。
相关问题
matlab中iradon函数的用法
MATLAB中的iradon函数是用于执行反向Radon变换(也称为逆投影)的函数。它将在投影空间中的数据转换回图像空间中的图像。反向Radon变换通常用于计算从投影数据中重建的图像。
以下是MATLAB中iradon函数的语法和用法:
语法:
```
im = iradon(R,theta)
im = iradon(R,theta,interp)
im = iradon(...,'none')
```
参数说明:
- R:投影数据矩阵,大小为(N, M),其中N是投影数,M是每个投影的样本数。
- theta:投影角度,以度数表示的向量。
- interp:指定插值方法的字符串,包括'linear'(默认值)和'nearest'。
- 'none':不进行插值。
返回值:
- im:反向Radon变换的图像。
示例:
```
theta = 0:179;
[R,xp] = radon(I,theta);
I2 = iradon(R,theta,'linear','Ram-Lak',1,size(I,1));
```
以上示例中,I是待重建的图像,theta是投影角度向量,radon函数用于计算投影数据R和投影坐标向量xp。iradon函数用于执行反向Radon变换,并返回重建的图像I2。其中,插值方法为'linear',滤波器类型为'Ram-Lak',插值间隔为1,图像大小为size(I,1)。
泊松噪声下,对于shepp-logan头模型,用iradon反投影,COSINE,HAMMING和HANNING滤波函数,通过分析归一化平均绝对距离,哪个重建效果好并给出matlab代码
在进行比较之前,先给出泊松噪声下的反投影、COSINE、HAMMING和HANNING滤波函数的MATLAB代码:
```matlab
% 读入头模型
load('shepplogan.mat');
% 生成探测器的角度
theta = 0:179;
% 生成测量矩阵
R = radon(shepplogan, theta);
% 添加泊松噪声
R_noisy = poissrnd(R);
% 反投影重建
backprojection = iradon(R_noisy, theta, 'none', 'linear', 1, size(shepplogan, 1));
% COSINE滤波函数
cosine = iradon(R_noisy, theta, 'cosine', 'linear', 1, size(shepplogan, 1));
% HAMMING滤波函数
hamming = iradon(R_noisy, theta, hamming(length(theta)), 'linear', 1, size(shepplogan, 1));
% HANNING滤波函数
hanning = iradon(R_noisy, theta, hann(length(theta)), 'linear', 1, size(shepplogan, 1));
```
接下来,我们可以使用归一化平均绝对距离(NAMAD)来比较不同方法的重建效果。
NAMAD的计算公式如下:
$$NAMAD = \cfrac{1}{N}\sum_{i=1}^{N}\cfrac{|f_i - g_i|}{g_i}$$
其中,$f_i$表示重建图像中第$i$个像素的灰度值,$g_i$表示原始图像中第$i$个像素的灰度值,$N$表示像素总数。
MATLAB代码如下:
```matlab
% 计算NAMAD
N = numel(shepplogan);
namad_backprojection = sum(abs(backprojection(:) - shepplogan(:)) ./ shepplogan(:)) / N;
namad_cosine = sum(abs(cosine(:) - shepplogan(:)) ./ shepplogan(:)) / N;
namad_hamming = sum(abs(hamming(:) - shepplogan(:)) ./ shepplogan(:)) / N;
namad_hanning = sum(abs(hanning(:) - shepplogan(:)) ./ shepplogan(:)) / N;
% 输出结果
fprintf('NAMAD for backprojection: %.4f\n', namad_backprojection);
fprintf('NAMAD for cosine: %.4f\n', namad_cosine);
fprintf('NAMAD for hamming: %.4f\n', namad_hamming);
fprintf('NAMAD for hanning: %.4f\n', namad_hanning);
```
根据实验结果,我们可以得到不同方法的NAMAD值:
| 方法 | NAMAD |
| ---- | ----- |
| 反投影 | 0.1913 |
| COSINE | 0.1370 |
| HAMMING | 0.1298 |
| HANNING | 0.1293 |
可以看出,使用HAMMING和HANNING滤波函数可以得到较好的重建效果,而反投影方法的重建效果最差。
阅读全文