matlab医学图像处理 图像编码,旋转和匹配

链接: 本实验涉及程序及素材点这里.

编码

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

结果如下
在这里插入图片描述
本实验中因未要求进行配准,故任务和程序都比较简单,不做赘述
后面我会出一篇博客,分享基于匹配点进行配准的操作和程序,感兴趣的同学可以关注一下。

本次实验的程序和用到的图片我会单独发一个文件,欢迎下载参考。

如果有帮到你,记得三连哦

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

feiGeorge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值