链接: 本实验涉及程序及素材点这里.
编码
dicom格式图像是医学图像中最常见的影像格式,这种格式不利于我们对其进行处理和分析。因此,要将其转换成其他格式的图像储存,便于处理。
本实验要求:
- 读取DICOM图像
- 将其转换为BMP和JPEG格式
- 计算峰值信噪比
峰值信噪比(Peak signal-to-noise Ratio, PSNR)提供了一个衡量图像失真或是噪声水平的客观标准,常用于图像压缩等领域压缩前后图像劣化程度的客观评价。PSNR值越大,则越趋于无劣化,劣化程度较大时,PSNR值趋于0。
程序代码如下
close all;clear;
info=dicominfo('IM-0001-0368.dcm');
Image_dicom=dicomread(info); %读取DICOM图像
imshow(Image_dicom,[]); %显示原图
Ig=mat2gray(Image_dicom); %归一化灰度值
img=uint8(Ig*255); %重新设置图像
imwrite(img,'ct.bmp'); %输出BMP格式
imwrite(img,'ct.jpeg','quality',80); %输出JPEG格式
img_jpeg=imread('ct.jpeg');
[M,N]=size(img);
MSE=sum(sum((img-img_jpeg).^2))/(M*N);
f_max=double(max(max(img)));
PSNR=10*log10((f_max^2)/MSE); %计算JPEG峰值信噪比
fprintf('峰值信噪比PSNR=%f\n',PSNR);
原图为
输出为BMP和JPEG格式的图像
图像旋转
自行设计程序,不使用rotate函数,完成图像旋转
程序如下
close all;clear;
im = imread('wpeppers.jpg');
im=rgb2gray(im);
% 旋转矩阵
a = -pi/3;
R = [cos(a), sin(a); -sin(a), cos(a)];
[h,w]= size(im);
c = [h; w] / 2;
% 计算显示完整图像需要的画布大小
hh = floor(w*abs(sin(a))+h*abs(cos(a)))+1;
ww = floor(w*abs(cos(a))+h*abs(sin(a)))+1;
c2 = [hh; ww] / 2;
% 初始化目标画布
im2 = uint8(zeros(hh, ww));
for i = 1:hh
for j = 1:ww
p = [i; j];
pp = round(R*(p-c2)+c);
if (pp(1) >= 1 && pp(1) <= h && pp(2) >= 1 && pp(2) <= w)
im2(i, j) = im(pp(1), pp(2));
end
end
end
% 显示图像
figure;
subplot(121);imshow(im);
subplot(122);imshow(im2);
该程序中,原图为im,变换后的图像为im2.
需注意:
若原图每个点对应旋转后的一个点的话,则变换后的图像会出现无值的情况,即有黑点,此时需要用插值的方法补齐黑点。
本程序中,逆向思维,计算旋转后的每个点即im2中的每个点对应原图im中的点位,则每一个点都可以在原图中找到对应点位。就不会有空点位,也就不需要插值。
(此法较为特殊,慎用)
程序运行结果如下:
图像点对 配准
在医学图像中,一个部位会有各个角度,或不同方法拍摄的图像。这时,就需要通过图像配准的方法实现相应部位的重合。
本实验中:
- 使用交互式点对选取工具cpselect选取要匹配的点位
- 编程显示出选取的点位在图像上的标记
过程如下
首先选取要匹配的几个点位,
将其导出为mat格式,我将其命名为point,mat和point2.mat
将其导入图片进行匹配,于是又如下程序
clear;close all;
img_2 = imread('1.pgm');
img_1=imread('6.pgm');
[a,b]=size(img_1);
load Point;
load Point2;
P1=fixedPoints1;
P2=movingPoints1;
subplot(121)
imshow(img_1);hold on;
for x = 1: 6
plot(P1(x,1),P1(x,2),'b*');
end
subplot(122)
imshow(img_2);
hold on;
for x = 1: 6
plot(P2(x,1),P2(x,2),'r*');
end
结果如下
本实验中因未要求进行配准,故任务和程序都比较简单,不做赘述
后面我会出一篇博客,分享基于匹配点进行配准的操作和程序,感兴趣的同学可以关注一下。
本次实验的程序和用到的图片我会单独发一个文件,欢迎下载参考。
如果有帮到你,记得三连哦