- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
姓名:张达
学号:201130561069
外国语学院
设计性实验1 图像信号的抽取与插值
一、实验目的
熟悉图像处理常用函数和方法;
培养通过查阅文献解决问题的能力。
二、实验要求
给出一个二维灰度图像,
编程实现对该图像的任意比例的放大及缩小;
编程实现对该图像的任意角度旋转;
解决缩放及旋转时产生的锯齿等图像不平滑问题。
实验提示
利用上采样、下采样等方法对信号进行缩放变换;
观察对图像进行缩放或旋转时,图像是否会出现锯齿等不平滑现象?
分析产生锯齿现象的原因;
查阅文献了解解决锯齿现象的方法。(例如平滑滤波、双线性插值、双立方插值等处理)
三、实验细节
1、实现图像的放大
算法:
为了实现图像的放大,首先将原图按照x1=a*x,y1=b*x将原图的像素点(x,y)映射为新的画布上的(x1,y1)点,如上图左一到左二。然后,以行或列为一个处理单位,采用一种图像插值算法,在两红点之间的空白点插入一些值,使图像充满整个画布。具体顺序如上图所示,先按行插值,再按列插值。
本实验采用的插值算法要达到的目标是,使插入点的斜率与原图保持一致
具体插值方法如下(以宽度放大三倍为例):
取出一行像素点,使时域坐标变为原来的三倍。假设两相邻像素点坐标分别为a[n]和a[m],则在a[n+1]、a[n+2]、a[n+i]…a[m-1]处填入的灰度值为:
过程如下:
图①
原图像的一行像素点
图②
使时域坐标变为原来的三倍
图③
在两点间插值,使新插入的点与原先的两点以同一斜率变化。
2.实现图像的缩小:
若要实现缩小,则同样按照x1=ax,y1=by的坐标转换关系将原画布上的点映射到新画布上,那么新画布上的一点将成为原画布上多点的映射,此时,新画布的点只需取其中一个映射点即可。过程如下:
运行结果:
(以行列均放大三倍为例)
①放大前的图像:
②将图像的行列上的时域变为原来的三倍。
③行插值:
④列插值后(完成):
使用线性插值法
假如使用临近插值法,将得到如下图片,可见,在图中眼部的位置,临近插值法的锯齿更为明显,而使用本实验插值算法得到的图像边缘更为平滑。
使用临近插值法
图像缩小:
(以行列均缩小为1/2为例)
代码清单:
clear;clf;
pic=imread(image.jpg);
k=2; %?a3Y??3y?μêy
[l,w]=size(pic);
pic(l+1,1)=0;
pic(1,w+1)=0;
l1=2*l;
w1=2*w;
i=1:l;
x=ceil(i*l1/l);
ii=1:w;
y=ceil(ii*w1/w);
for i=1:l
for ii=1:w
a(ceil(i*l1/l),ceil(ii*w1/w))=pic(i,ii);
end;
end;
for i=1:l
for ii=1:w-1
n=(y(ii));
m=(y(ii+1));
for iii=1:m-n-1
a(x(i),n+iii)=(a(x(i),m)-a(x(i),n))*iii/(m-n)+a(x(i),n);
end;
end;
end;
for i=1:w1
for ii=1:l-1
n=(x(ii));
m=(x(ii+1));
for iii=1:m-n-1
a(n+iii,i)=(a(m,i)-a(n,i))*iii/(m-n)+a(n,i);
end;
end;
end;
imshow(a);
2.实现图片的旋转
算法:
根据坐标变换公式,可将旋转后坐标(x1,y1)映射到原坐标(x,y)
x=x1*cos(b)-y1*sin(b)
y=x1*sin(b)+y1*cos(b)
由于求出来的原坐标不为整数,故将其取整,若求得(x,y)坐标范围处于有效范围,即0x≤l,0y≤w,l为原图长度,w为原图宽度,则(x1,y1)的灰度取为(x,y)的灰度值。
原图(x,y) 旋转后(x1,y1)
如上图所示,从(x1,y1)出发回到原图寻找对应的(x,y)坐标,如果(x1,y1)对应的点(x,y)在原画布内,则该点的灰度值取为最临近的整数点的灰度值,如图中黑线所示;否则(x1,y1)取为空白点,如途中红线所示。
运行结果:
旋转后的图片
旋转后的图片产生了锯齿
程序清单:
clear;c
文档评论(0)