数字图像处理期末考试题.docx
- 文档编号:2394413
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:12
- 大小:74.17KB
数字图像处理期末考试题.docx
《数字图像处理期末考试题.docx》由会员分享,可在线阅读,更多相关《数字图像处理期末考试题.docx(12页珍藏版)》请在冰豆网上搜索。
数字图像处理期末考试题
数字图像处理技术与应用练习题
说明:
不允许直接使用MATLAB(或者OPENCV等等软件)所带的图像图像函数,重点考察大家是否理解了各种处理算法,算法可用伪代码描述。
算法应较详细。
1、设一幅大小为M×N的灰度图像I中,灰度为g的像素数为h(g),。
请写出对图像I进行直方图均衡化,得到图像J的计算方法。
clc;
clear;
I=imread('a.jpg');
I=rgb2gray(I);%将图像转换为灰度图像
J=histeq(I);%对I进行直方图均衡化
subplot(121),imshow(I),title('原始图像');
subplot(122),imshow(J),title('直方图均衡化后的图像');
figure
(2);
subplot(121),imhist(I,64),title('原始的直方图');
subplot(122),
imhist(J,64),
title('均衡化后的直方图');
2、设一幅大小为M×N的灰度图像I中,现要变成(放大或缩小)为P×Q的图像J,请写出J的生成算法(可以使用近邻插值)。
I=imread('f.jpg');%读入图像
%图像属性
%Filename:
'f.jpg'
%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('请输入列缩放倍数','INPUTscalefactor',1,{'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
end
imshow(I);%输出原图像
figure;
imshow(im2);%输出缩放后图像
3、设一幅大小为M×N的灰度图像I中,现要将其逆时针旋转A度,得到图像J,请写出J的生成算法(可以使用近邻插值)。
clear;%此题是用最近邻域法实现图像旋转
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
end
fori=1:
m%把原图象像素点旋转后变为新图象点
forj=1:
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);
end
end
end
temp1=uint8(0);
temp2=uint8(0);
temp3=uint8(0);
fori=1:
row%把画面上的空点按照最近邻插值法填充
temp1=uint8(0);
temp2=uint8(0);
temp3=uint8(0);
forj=1:
col%找到最右的图象边界点
if(im2(i,j,:
)==uint8(0))
else
kk=j;
end
end
forj=1:
kk
if(im2(i,j,:
)==uint8(0))
im2(i,j,1)=temp1;
im2(i,j,2)=temp2;
im2(i,j,3)=temp3;
else
temp1=im2(i,j,1);
temp2=im2(i,j,2);
temp3=im2(i,j,3);
end
end
end
imshow(im1);
figure;
imwrite(im1,'5.jpg');%保存原图像
imshow(im2);
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的方法。
clear;
A=imread('num22','bmp');
subplot(1,2,1);
B=rgb2gray(A);
subimage(B);
title('处理前的图');
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
end
subplot(1,2,2);
subimage(C);
title('处理后的图');
8、请写出求Otsu阈值(即最大类间距准则)的计算方法。
试证明采用最大类间距准则计算出的阈值与采用最小类内距准则计算出的阈值相同。
9、设有一幅二值图像(元素取值为0或1),请生成该图像的标记图像。
(即第一个连通区域中的每一个白色像素的值都置为1,第二个连通区域中的每一个白色像素的值都置为2,依此类推。
区域编号可不考虑顺序)
clearall;
closeall;
clc;
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
forj=2:
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};
fork=1:
8%8邻域搜索
pix1=pix+neighbour(k,:
);
ifpix1
(1)>=2&&pix1
(1)<=m-1&&pix1
(2)>=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
end
queue_head=queue_head+1;
end
clearq;%清空队列,为新的标记做准备
label=label+1;
queue_head=1;
queue_tail=1;
end
end
end
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=[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 期末 考试题
![提示](https://static.bdocx.com/images/bang_tan.gif)