课程设计报告基于Matlab的图像放缩技术.docx
《课程设计报告基于Matlab的图像放缩技术.docx》由会员分享,可在线阅读,更多相关《课程设计报告基于Matlab的图像放缩技术.docx(12页珍藏版)》请在冰豆网上搜索。
课程设计报告基于Matlab的图像放缩技术
数字图像处理课程设计
基于Matlab的图像放缩技术
院系:
信息科学与技术学院
专业班级:
电子0801班
姓名:
学号:
2011年1月8日
1.设计目标
图像放缩处理存在较大失真,本设计要求输入一副图像,经放大或缩小后,使输出图像尽量减少失真度。
可采用插值算法(最近邻插值和双线性插值法),使图像内物体的边界得以保持,尽可能减少失真度。
通过本次设计加强对数字图像处理的理解。
2.设计原理:
2.1最近邻插值法
所谓的最近邻法,即输出图像像素的灰度值等于离它所映射到的位置最近的输入像素的灰度值。
现在假设放大或缩小后的图像的某一像素映射到原图像的像素坐标为(2.2,4.0),想要得到这个坐标对应的灰度,那么比较简单的方法是用四舍五入方法来得到距离该点最近的像素,即像素(2,4)的值来代替,当然这并不十分的精确,如果用这个方法进行图像放大,那么在比例较大的情况下就会出现明显的“马赛克”现象。
2.2双线性插值法
双线性插值法,即通过已知输入四点灰度内插输出点灰度,将临近的像素点的灰度值按一定比例混合而成,离哪个像素近,哪个像素的比例就大些。
具体原理如下:
令f(x,y)为两个变量的函数,其在单位正方形顶点的值已知,要通过插值得到正方形内任意点的灰度值,则可由双曲线方程
(2-1)
来定义的一个双曲抛物面与四个已知点拟合。
从a到d这四个系数需由已知的四个顶点的f(x,y)灰度值拟合。
首先,对上端的两个顶点进行线性插值,可得
(2-2)
同理,对底端的两个顶点进行线性插值,可得
(2-3)
最后,进行垂直方向的线性插值,可得
(2-4)
将式(2-2)、式(2-3)代入式(2-4),展开等式并合并同类项,可得
该式形式类似于式(2-1),因此是双线性的。
3.设计程序流程图:
4.设计程序
g0=imread('lena.bmp');%读取原图像g0
[mn]=size(g0);%求原图像大小[mn]
a=input('times:
');%输入放缩倍数a
m0=round(m*a);
n0=round(n*a);%求放缩后图像大小[m0n0]
g1=zeros(m0,n0);%开辟内存g1,存放放缩后的图象
type=input('1.最近邻2.双线性Youwant:
');%输入type的值,选择插值方法
iftype==1%type值为1,则用最近邻插值法
forx=5:
m0-5
fory=5:
n0-5%求x从5到m0-5,y从5到n0-5的像素的灰度值
u=x/a;
v=y/a;%点(x,y)映射到原图像,为点(u,v)
g1(x,y)=g0(round(u),round(v));%最近邻法求点(u,v)的灰度值,赋值给g1(x,y)
end
end%循环结束
elseiftype==2%type值为2,用双线性插值法
forx=5:
m0-5
fory=5:
n0-5%求x从5到m0-5,y从5到n0-5的像素的灰度值
u=x/a;
v=y/a;%点(x,y)映射到原图像,为点(u,v)
w=fix(u);
z=fix(v);%(u,v)取整为(w,z)
dw=u-w;
dv=v-z;%差值
g1(x,y)=[g0(w+1,z)-g0(w,z)]*dw+[g0(w,z+1)-g0(w,z)]*dv+[g0(w+1,z+1)+g0(w,z)-g0(w+1,z)-g0(w,z+1)]*dw*dv+g0(w,z);%双线性法求点(u,v)的灰度值,赋值给g1(x,y)
end
end%循环结束
else
disp('False!
')%type值输入错误,输出“False!
”
end
end
forx=1:
4
fory=1:
4%区域x从1到4,y从1到4
g1(x,y)=g0(1,1);%将这一区域的像素的灰度值设为原图像(1,1)的灰度值
end
end%赋值结束
forx=m0-4:
m0
fory=1:
4%区域x从m0-4到m0,y从1到4
g1(x,y)=g0(m,1);%将这一区域的像素的灰度值设为原图像(m,1)的灰度值
end
end%赋值结束
forx=1:
4
fory=n0-4:
n0%区域x从1到4,y从n0-4到n0
g1(x,y)=g0(1,n);%将这一区域的像素的灰度值设为原图像(1,n)的灰度值
end
end%赋值结束
forx=m0-4:
m0
fory=n0-4:
n0%区域x从m0-4到m0,y从n0-4到n0
g1(x,y)=g0(m,n);%将这一区域的像素的灰度值设为原图像(m,n)的灰度值
end
end%赋值结束
forx=1:
4
fory=5:
n0-5%区域x从1到4,y从5到n0-5
g1(x,y)=g1(5,y);%将这一区域的像素的灰度值设为放缩后图像(5,y)的灰度值
end
end%赋值结束
forx=m0-4:
m0
fory=5:
n0-5%区域x从m0-4到m0,y从5到n0-5
g1(x,y)=g1(m0-5,y);%将这一区域的像素的灰度值设为放缩后图像(m0-5,y)的灰度值
end
end%赋值结束
fory=1:
4
forx=5:
m0-5%区域x从5到m0-5,y从1到4
g1(x,y)=g1(x,5);%将这一区域的像素的灰度值设为放缩后图像(x,5)的灰度值
end
end%赋值结束
fory=n0-5:
n0
forx=5:
m0-5%区域x从5到m0-5,y从n0-5到n0
g1(x,y)=g1(x,n0-5);%将这一区域的像素的灰度值设为放缩后图像(x,n0-5)的灰度值
end
end%赋值结束
figure
(1)
imshow(g0)%显示原图像
title('原图像');%标题为“原图像”
figure
(2)
g1=uint8(g1);%转换类型
imshow(g1)%显示放缩后图像
title('缩放后的图像');%标题为“缩放后的图像”
5.图像效果分析:
运行界面
图5-1运行界面
原图像
图5-2原图像
(1)使用最近邻插值法放大2倍和缩小为0.8后的图像
图5-3缩小0.8后的图像
图5-4放大2倍后的图像
(2)使用双线性插值法放大1.8倍和缩小为0.6后的图像
图5-5缩小为0.6后的图像
图5-6放大1.8倍后的图像
总结:
放大的图像边缘的插值效果较好,缩小的图像边缘易看出人为的效果,因为边缘的像素点的灰度值是相同的,缩小后的图像相对放大的图像边缘所占比例更大,看起来更宽,条状、块状效应更明显。
且这两种插值方法不适合放大或缩小太大的倍数。
(3)若type值输入错误,则输出“False!
”,如下图所示
图5-7运行界面
6.实习结论
通过这次数字图像处理的课程设计,将一副图像使用插值的方法放大或缩小,加深了对于数字图像处理这门课程的认识,清楚的认识到这门课程的实际应用性。
进一步掌握了Matlab的使用,体会到这个软件作为许多应用方向工具的强大之处,对编程的逻辑思想有了更深的认识和体会。
7.参考文献:
1.刘直芳等.数字图象处理与分析.北京:
清华大学出版社,2006
2.张磊等.MATLAB实用教程.北京:
人民邮电出版社,2008
3.
4.
5.