Matlab.图像处理设计-曼陀罗图片绘制

Matlab.图像处理设计-曼陀罗图片绘制

【程序设计】
本次设计的内容是用Matlab.绘制曼陀罗图形,通过在Matlab.中对给定形状的图片进行移动、旋转和叠加等方式来实现。
设计中用到了二值化处理、图片移动处理、图片旋转处理、图片叠加处理、输出图像等五种图像处理方法。
【程序框图】
在这里插入图片描述
【程序解读】
首先,进行测试图片的二值化处理步骤,程序如下:
Thresh = graythresh(Test0);
R=im2bw(Round,Thresh);
R0=imcomplement®;
figure(1);imshow(R0);title(‘原始图像’);
其中 ‘graythresh’ 函数是使用最大类间方差法找到测试图片灰度的合适的阈值,接着用 ‘im2bw’ 函数将测试图片转化为二值图像。为了方便投影,用 ‘imcomplement’
原图为黑色背景,以下所有图片为了打印方便再次进行反相处理 函数将图像黑白反转。下侧为处理后的二值图像。
在这里插入图片描述

接着,对图形进行移动,这里采用将圆从图片(1024x1024)中心点向下移动(240)像素点为标准程序如下:
[M,N]=size(R0);g=zeros(M,N);
a=240;b=0;
for i=1:M
移动前
for j=1:N
if((i-a>0)&(i-a<M)&(j-b>0)&(j-b<N))
g(i,j)=R0(i-a,j-b);
else
g(i,j)=0;
240Pixel
end
end
end
figure(2);imshow(logical(g));title(‘平移后的图像’);
移动后
程序通过对图片的重新采样达到移动圆的目的,为方便观察将移动前与移动后的图像放在同一张图片中,可以通过改变(a ; b)参数改变移动的方向,下边为处理后的图像。
在这里插入图片描述
最后,对移动后的图片沿着图片中心点旋转,每次旋转6度,旋转一周60次。将每次旋转后的图片进行累加最终得出一副完整的曼陀罗图片,程序如下:

R1=im2bw(g,thresh);
R5=zeros(M,N);
for k=1:60
j=k*6;
R4=imrotate(R1,j,‘bicubic’,‘crop’);
R5=or(R4,R5);
end
figure(4);imshow(R5);title(‘旋转叠加(三次内插)’);

采用三次内差法对旋转的图形进行重采样以达到最佳的显示效果,可以通过改变(for k=1:60; j=k*6)的参数来改变旋转次数和每次旋转的角度,右侧为叠加后的最终图片。
在这里插入图片描述

【分析讨论】
在设计中遇到了图像重新采样的问题,最开始使用了 ‘双线性插值法’ 对旋转的图像进行重采样。产生了比较明显的像素丢失,如下图的极端情况。在多次旋转中损失了大量的像素。程序如下:
for k=1:60
R2=imrotate(R2,6,‘bilinear’,‘crop’);
R3=or(R2,R3);
end
在这里插入图片描述
这里每次旋转都会重新采样前一次旋转的图片造成了大量的像素点丢失,需要重新设计新的算法。
最终确定了一个可行的算法:每次旋转都使用初始的图片赋予不同的旋转角度。
程序如下:
R5=zeros(M,N);
for k=1:60
j=k*6;
R4=imrotate(R1,j,‘bicubic’,‘crop’);
R5=or(R4,R5);
end
同时使用 ‘三线性插值法’ 对旋转的图像进行重采样,使图像获得更好的现实效果。这里使用了三角形进行演示。
在这里插入图片描述

对于采用 ‘双线性插值’ 和 ‘三线性插值’ 所产生的采样问题这里用图片表示出来,我们用上述程序分别使用两种方法导出图片如下,并截取其中一部分来观察。
在这里插入图片描述

可以看到两种采样方法产生的效果截然不同,最终采用 ‘三线性插值法’ 来导出平滑的图像。
但是 ‘三线性插值法’ 的处理速度并不是特别快,我们可以先采用 ‘最邻近法’ 对图片进行采样,之后对导出图片进行柔和化处理,得出一张柔和化后的图像,这时得到的图片在视觉效果上非常好。效果对比如下:
在这里插入图片描述

新的处理方法的速度有了显著的提升,程序运行时间大大减少。

【总结成果】
通过本次课程设计小组成员学习到了很多有关Matlab.图像处理的简单实用的方法,对基本的图像处理函数有更加直观的了解。

【程序注释】
Thresh = graythresh(Round); %自动确定灰度阀值
R=im2bw(Round,Thresh); %图像二值化
R0=imcomplement®; %图像反相
figure(1);imshow(R0);title(‘原始图像’); %图像显示

[M,N]=size(R0);g=zeros(M,N); %图像移动
a=240;b=0;
for i=1:M
for j=1:N
if((i-a>0)&(i-a<M)&(j-b>0)&(j-b<N))
g(i,j)=R0(i-a,j-b);
else
g(i,j)=0;
end
end
end

figure(2);imshow(logical(g));title(‘平移后的图像’); %图像显示

R1=im2bw(g,Thresh); %图像再次二值化
R5=zeros(M,N); %图像旋转叠加

for k=1:60
j=k*6;
R4=imrotate(R1,j,‘bicubic’,‘crop’);
R5=or(R4,R5);
end

figure(4);imshow(R5);title(‘旋转叠加(三次内插)’); %显示图像

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值