图像信号的抽取与插值

萌到你眼炸
671次浏览
2021年01月03日 19:35
最佳经验
本文由作者推荐

经营管理学-偏偏喜欢你歌词

2021年1月3日发(作者:东丹甘)


姓名:张达
学号:2
外国语学院
设计性实验1 图像信号的抽取与插值



一、实验目的
1、 熟悉图像处理常用函数和方法;
2、 培养通过查阅文献解决问题的能力。


二、实验要求
给出一个二维灰度图像,
3、 编程实现对该图像的任意比例的放大及缩小;
4、 编程实现对该图像的任意角度旋转;
5、 解决缩放及旋转时产生的锯齿等图像不平滑问题。

实验提示
6、 利用上采样、下采样等方法对信号进行缩放变换;
7、 观察对图像进行缩放或旋转时,图像是否会出现锯齿等不平
滑现象?
8、 分析产生锯齿现象的原因;
9、 查阅文献了解解决锯齿现象的方法。(例如平滑滤波、双线
性插值、双立方插值等处理)


三、实验细节
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]处填入的灰度值为:
i
a[ni](a[m]-a[n])a[n]

m-n
过程如下:


图①
原图像的一行像素点


图②
使时域坐标变为原来的三倍


插入的点

图③
在两点间插值,使新插入的点与原先的两点以同一斜率变化。



2.实现图像的缩小:
若要实现缩小,则同样按照x1=ax,y1=by的坐标转换关系 将原画布上的点映射到新
画布上,那么新画布上的一点将成为原画布上多点的映射,此时,新画布的点只 需取其中一
个映射点即可。过程如下:






运行结果:

(以行列均放大三倍为例)
①放大前的图像:



②将图像的行列上的时域变为原来的三倍。

③行插值:




④列插值后(完成):
颗粒(锯齿)
不明显

使用线性插值法

假如使用临近插值法,将得到如下图片,可见,在图中 眼部的位置,临近插值法的锯齿
更为明显,而使用本实验插值算法得到的图像边缘更为平滑。
颗粒(锯齿)
明显

使用临近插值法

图像缩小:
(以行列均缩小为12为例)


缩小



代码清单:


clear;clf;

pic=imread('');

k=2; %¾â³ÝÏû³ýϵÊý

[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*l1l);

ii=1:w;

y=ceil(ii*w1w);

for i=1:l

for ii=1:w

a(ceil(i*l1l),ceil(ii*w1w))=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)坐标范围处于有效范围,即0≤l,0

原图(x,y)

旋转后(x1,y1)
如上图所示,从(x1,y1)出发回到原图寻找对应的(x,y)坐 标,如果(x1,y1)对应的点
(x,y)在原画布内,则该点的灰度值取为最临近的整数点的灰度值 ,如图中黑线所示;否则
(x1,y1)取为空白点,如途中红线所示。

运行结果:



旋转后的图片

旋转后的图片产生了锯齿



程序清单:
clear;clf;
pic=imread('');
[l,w]=size(pic);


b=30;
xx=[0,0,l,l];
yy=[0,w,w,0];
b=b*2*pi360;
x0=min(xx.*cos(b)-yy.*sin(b));
y0=min(xx.*sin(b)+yy.*cos(b));
x1=max(xx.*cos(b)-yy.*sin(b));
y1=max(xx.*sin(b)+yy.*cos(b));



for x=1:fix(x1-x0)+1
for y=1:fix(y1-y0)+1
a(x,y)=uint8(205);
end;
end;

[l1,w1]=size(a);

for x=1:l1
for y=1:w1
xt=floor(+x*cos(b)-y*sin(b)+l*sin(b)*sin(b));
yt=floor(+x*sin(b)+y*cos(b)-l*sin(b)*cos(b));
if (xt>0 && xt<=l && yt>0 && yt<=w)
a(x,y)=pic(xt,yt);
end;
end;
end;

imshow(a);

pdf的文件怎么打开-课文草原


出淤泥而不染-酒店婚宴流程


揶揄的意思-多媒体教学的优点


三维立体图片欣赏-工作简报怎么写


想太多简谱-疲惫的近义词是什么


上海一本大学排名-成龙国家


奶粉市场-不是闹着玩的2


值班表格式-莫言简介