医学图像处理 ——图像平移补充

上一期:医学图像处理 ——图像配准

今天我们针对之前几何变换中的平移部分做一些细节编程的补充。解决一下有的同学在编程中遇到的一些问题。

      按照我们24期所讲的使用affine2d和imwarp函数就可以配合仿射矩阵做出各种几何变换。一般的编写流程如下:

1. 导入图片。

2. 写出仿射矩阵T。

3. 调用affine2d对T进行处理。

4. 调用imwarp函数结合affine2d产生的结果对f进行处理。

5. 显示图像。

 

      这样的流程对于图像的旋转、伸缩是没有问题的。但在图像的平移里面就有很大的问题了。看下面一段代码:

I=imread('cameraman.tif');

T = [1 0 0; 0 1 0; 15 15 1];

tform = affine2d(T);

g = imwarp(I, tform);

figure

subplot(1,2,1),imshow(I)

title('原图像')

subplot(1,2,2),imshow(g)

title('平移变换');

       看起来毫无破绽,但结果如下。

        图像并没有产生平移的效果。这就很奇怪了。

       大家可以想想所谓的平移一般是怎么理解的?我们一般会先取定某个参照物下,在这个参照物与周围的环境形成的坐标空间里可以说某物体在某段时间内像某个方向平移了多少。所以这里也是一样,在没有确定的坐标系下,就算做了仿射变换也观察不到平移现象。

       因此为了解决此问题我们就可以将其放在世界坐标系下观察。具体的编码中就是在调用imwrap时加入世界坐标系。具体如下:

I=imread('cameraman.tif');

T = [1 0 0; 0 1 0; 80 80 1];

tform = affine2d(T);

cb_translated_ref =imref2d(size(f));

[cb_translated,cb_translated_ref] = imwarp(I,tform,'OutputView',cb_translated_ref);

figure

subplot(1,2,1),imshow(I)

title('原图像')

subplot(1,2,2),imshow(cb_translated,cb_translated_ref)

title('平移变换');

      这样有了坐标系后,对于平移现象就很直观了。

更多干货请关注公众微信号:医电小白的进阶之路

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值