数字图像处理期末考试题Word下载.docx
《数字图像处理期末考试题Word下载.docx》由会员分享,可在线阅读,更多相关《数字图像处理期末考试题Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
%读入图像
%图像属性
%Filename:
'
%FileModDate:
24-Aug-200816:
50:
30'
%FileSize:
20372
%Format:
jpg'
%FormatVersion:
'
%Width:
480
%Height:
640
%BitDepth:
8
%ColorType:
grayscale'
%FormatSignature:
%NumberOfSamples:
1
%CodingMethod:
Huffman'
%CodingProcess:
Sequential'
%Comment:
{}
[rows,cols]=size(I);
K1=str2double(inputdlg('
请输入行缩放倍数'
'
INPUTscalefactor'
1,{'
0.6'
}));
%行默认变为原来的0.6倍
K2=str2double(inputdlg('
请输入列缩放倍数'
0.4'
%列默认变为原来的0.4倍
width=K1*rows;
height=K2*cols;
im2=uint8(zeros(width,height));
%定义输出图像矩阵
widthScale=rows/width;
heightScale=cols/height;
forx=6:
width-6%为防止矩阵溢出而选择的参数6
fory=6:
height-6
oldX=x*widthScale;
%oldX,oldY为原坐标,x,y为新坐标
oldY=y*heightScale;
if(oldX/double(uint16(oldX))==1.0)&
(oldY/double(uint16(oldY))==1.0)
im2(x,y)=I(int16(oldX),int16(oldY));
else
a=double(round(oldX));
b=double(round(oldY));
%若不是整数四舍五入后把临近值赋过去
im2(x,y)=I(a,b);
end
end
imshow(I);
%输出原图像
figure;
imshow(im2);
%输出缩放后图像
3、设一幅大小为M×
N的灰度图像I中,现要将其逆时针旋转A度,得到图像J,请写出J的生成算法(可以使用近邻插值)。
%此题是用最近邻域法实现图像旋转
im1=imread('
b.jpg'
[m,n,p]=size(im1);
%将图像旋转30度
a=0.5;
%a=sin30=0.5
b=0.866;
%b=cos30=0.866
row=n*a+m*b;
col=n*b+m*a;
fori=1:
row%先把图象填充成全黑
forj=1:
col
im2(i,j,:
)=uint8(0);
end
m%把原图象像素点旋转后变为新图象点
n
xx=round(abs((i-m/2)*b-(j-n/2)*a+row/2));
yy=round(abs((i-m/2)*a+(j-n/2)*b+col/2));
fork=1:
3
im2(xx,yy,k)=im1(i,j,k);
temp1=uint8(0);
temp2=uint8(0);
temp3=uint8(0);
row%把画面上的空点按照最近邻插值法填充
temp1=uint8(0);
temp2=uint8(0);
temp3=uint8(0);
col%找到最右的图象边界点
if(im2(i,j,:
)==uint8(0))
else
kk=j;
kk
im2(i,j,1)=temp1;
im2(i,j,2)=temp2;
im2(i,j,3)=temp3;
temp1=im2(i,j,1);
temp2=im2(i,j,2);
temp3=im2(i,j,3);
imshow(im1);
imwrite(im1,'
5.jpg'
%保存原图像
imwrite(im2,'
6.jpg'
%保存旋转后图像
4、请写出生成(2N+1)×
(2N+1)大小的高斯模板H(方差为sigma)的方法。
5、请写出生成(2N+1)×
(2N+1)大小的高斯一阶导数模板HX(水平方向的梯度)、HY(垂直方向的梯度)(高斯的方差为sigma)的方法。
6、请写出使用大小为(2N+1)×
(2N+1)模板H对图像I进行滤波,生成图像J的方法。
7、请写出使用大小为3×
3的模板对图像I进行中值滤波,生成图像J的方法。
A=imread('
num22'
'
bmp'
subplot(1,2,1);
B=rgb2gray(A);
subimage(B);
处理前的图'
C=B;
xsize=size(B);
fork=2:
(xsize
(1)-1)
forj=2:
(xsize
(2)-1)
t=B(k-1:
k+1,j-1:
j+1);
C(k,j)=median(t(1:
9));
end
subplot(1,2,2);
subimage(C);
处理后的图'
8、请写出求Otsu阈值(即最大类间距准则)的计算方法。
试证明采用最大类间距准则计算出的阈值与采用最小类内距准则计算出的阈值相同。
9、设有一幅二值图像(元素取值为0或1),请生成该图像的标记图像。
(即第一个连通区域中的每一个白色像素的值都置为1,第二个连通区域中的每一个白色像素的值都置为2,依此类推。
区域编号可不考虑顺序)
clearall;
closeall;
img=imread('
liantong.bmp'
imgn=img>
128;
s=uint8(1-imgn);
%{
s=[00000000000000000;
0110011001100110;
%这个矩阵是维基百科中的矩阵
1111111100111100;
0011110001111000;
0111100011100110;
1110011000111000;
0110000011000110;
0000011110011110;
0000000000000000];
%}
imshow(mat2gray(s));
[mn]=size(s);
tmp=zeros(m,n);
%标记图像
label=1;
queue_head=1;
%队列头
queue_tail=1;
%队列尾
neighbour=[-1-1;
-10;
-11;
0-1;
01;
1-1;
10;
11];
%和当前像素坐标相加得到八个邻域坐标
fori=2:
m-1
n-1
ifs(i,j)==1&
&
tmp(i,j)==0
tmp(i,j)=label;
q{queue_tail}=[ij];
%用元组模拟队列,当前坐标入列
queue_tail=queue_tail+1;
whilequeue_head~=queue_tail
pix=q{queue_head};
8%8邻域搜索
pix1=pix+neighbour(k,:
ifpix1
(1)>
=2&
pix1
(1)<
=m-1&
pix1
(2)>
pix1
(2)<
=n-1
ifs(pix1
(1),pix1
(2))==1&
tmp(pix1
(1),pix1
(2))==0%如果当前像素邻域像素为1并且标记图像的这个邻域像素没有被标记,那么标记
tmp(pix1
(1),pix1
(2))=label;
q{queue_tail}=[pix1
(1)pix1
(2)];
queue_tail=queue_tail+1;
end
end
queue_head=queue_head+1;
clearq;
%清空队列,为新的标记做准备
label=label+1;
queue_head=1;
queue_tail=1;
10、设一幅二值图像中,只有一个白色区域,试给出求该区域外围轮廓线的方法(要求按顺时针的顺序给出各点的坐标,即行/列号)。
轮廓提取的算法很多,本题对于二值图像可以用一个简单的算法进行处理,首先遍历图像中的每一个像素点,查看该点像素值是否为白色像素点;
若是再查看该点周围8邻域像素点的灰度值之和为2040;
若是,则该点是内部点,输出图像相应位置置为黑色。
若不是,则输出该点的坐标信息。
11、设有一幅二值图像,采用3×
3的结构元(每个元素均为1)对其进行腐蚀操作,试写出得到结果图像的方法。
%A是处理的矩阵B是结构体,此题为3x3的元素均为1的结构体,用来对A进行扫描的
%实现的是简单的二值图像的处理灰度图像有待研究
%实现图像的腐蚀已完成未测试~
functionans=mimerode(A,B)
%初始化
[ha,wa]=size(A);
[hb,wb]=size(B);
origin=[0,0];
ans=zeros(ha,wa);
fori=1:
hb
forj=1:
wb
if(B(i,j)==1)
origin=[i,j];
break;
%对矩阵A进行边扩张以0补充
new_A=zeros(ha+hb*2,wa+wb*2);
ha
wa
new_A(i+hb,j+wb)=A(i,j);
%对矩阵A进行遍历
ifA(i,j)==0
continue;
%把B的origin点移到当前处理点
%寻找B的影响区域块
begin_i=i+hb-origin
(1);
begin_j=j+wb-origin
(2);
%对矩阵new_A中和重合的B中的元素对比
fori1=begin_i:
begin_i+hb-1
forj1=begin_j:
begin_j+wb-1
flag=true;
if(B(i1-begin_i+1,j1-begin_j+1)==1&
new_A(i1,j1)==0)
flag=false
ifflag
ans(i,j)=1;
ans(i,j)=0;
12、写出二维离散傅立叶变换、反变换的计算公式,给出基于频域滤波的基本步骤。
二维离散傅里叶变换公式:
假设以正方形网格采样得到的图像用f(x,y)来表示,其大小为N行M列,则f(x,y)的二维离散傅里叶变换可以表示为:
其反变换为:
基于频域滤波的基本步骤:
(1)用
乘以图像来进行中心变换
(2)由
(1)计算图像的DFT(离散傅里叶变换),即F(u,v)
(3)用滤波器函数H(u,v)乘以F(u,v)
(4)计算(3)中结果的反DFT
(5)得到(4)中结果的实部
(6)用
乘以(5)中的结果
13.请写出C均值(K-means)聚类分割的基本步骤。
14.请写出Canny算子检测边缘的详细步骤。
算法过程
1高斯函数
2偏导数:
使用微分算子求出偏导数
3非极大值抑制:
沿幅角方向检测模值的极大值点,即边缘点,遍历8个方向图像像素,把每个像素偏导值与相邻像素的模值比较,取其MAX值为边缘点,置像素灰度值为0.
3双阈值检测:
由于单阈值处理时,合适的阈值选择较困难,常常需要采用反复试验,因此采用双阈值检测算法。
对经过非极大值抑制后的图像作用两个阈值th1,th2,th1=0.4th2,两个阈值作用后得到两个图像1、2,较大阈值检测出的图像2去除了大部分噪声,但是也损失了有用的边缘信息。
较小阈值检测得到的图像1则保留着较多的边缘信息,以此为基础,补充图像2中的丢失的信息,连接图像边缘。
4链接边缘的具体步骤如下:
•对图像2进行扫描,当遇到一个非零灰度的像素p(x,y)时,跟踪以p(x,y)为开始点的轮廓线,直到轮廓线的终点q(x,y)。
•考察图像1中与图像2中q(x,y)点位置对应的点s(x,y)的8邻近区域。
如果在s(x,y)点的8邻近区域中有非零像素s(x,y)存在,则将其包括到图像2中,作为r(x,y)点。
从r(x,y)开始,重复第一步,直到我们在图像1和图像2中都无法继续为止。
•当完成对包含p(x,y)的轮廓线的连结之后,将这条轮廓线标记为已经访问。
回到第一步,寻找下一条轮廓线。
重复第一步、第二步、第三步,直到图像2中找不到新轮廓线为止。
•至此,完成canny算子的边缘检测。
15、试给出一种图像增强方法,使得图像中暗区域中的内容的对比度加大,以便更好的分辨暗区域中的内容。
16、试简述中值滤波的特性和适用场合。
中值滤波是一种非线性滤波,由于它在实际运算过程中并不需要图像的统计特性,所以比较方便。
中值滤波首先是被应用在一维信号处理技术中,后来被二维图像信号处理技术所应用。
在一定的条件下,可以克服线性滤波器所带来的图像细节模糊,而且对滤除脉冲干扰及图像扫描噪声最为有效。
中值滤波的目的是保护图像边缘的同时去除噪声。
17、试写出孔洞填充的算法。
对二值图像中所有被白色区域包围(封闭)的黑色像素即为孔洞。
18、设有两个白色区域,被一条细小的白线所连接,试设计一种算法,消除两个区域之间的细线,使两个区域分开。