您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 数字图像处理期末考试题
数字图像处理技术与应用练习题说明:不允许直接使用MATLAB(或者OPENCV等等软件)所带的图像图像函数,重点考察大家是否理解了各种处理算法,算法可用伪代码描述。算法应较详细。1、设一幅大小为M×N的灰度图像I中,灰度为g的像素数为h(g),0255g。请写出对图像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%为防止矩阵溢出而选择的参数6fory=6:height-6oldX=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));elsea=double(round(oldX));b=double(round(oldY));%若不是整数四舍五入后把临近值赋过去im2(x,y)=I(a,b);endendendimshow(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.5b=0.866;%b=cos30=0.866row=n*a+m*b;col=n*b+m*a;fori=1:row%先把图象填充成全黑forj=1:colim2(i,j,:)=uint8(0);endendfori=1:m%把原图象像素点旋转后变为新图象点forj=1:nxx=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:3im2(xx,yy,k)=im1(i,j,k);endendendtemp1=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))elsekk=j;endendforj=1:kkif(im2(i,j,:)==uint8(0))im2(i,j,1)=temp1;im2(i,j,2)=temp2;im2(i,j,3)=temp3;elsetemp1=im2(i,j,1);temp2=im2(i,j,2);temp3=im2(i,j,3);endendendimshow(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));endendsubplot(1,2,2);subimage(C);title('处理后的图');8、请写出求Otsu阈值(即最大类间距准则)的计算方法。试证明采用最大类间距准则计算出的阈值与采用最小类内距准则计算出的阈值相同。9、设有一幅二值图像(元素取值为0或1),请生成该图像的标记图像。(即第一个连通区域中的每一个白色像素的值都置为1,第二个连通区域中的每一个白色像素的值都置为2,依此类推。区域编号可不考虑顺序)clearall;closeall;clc;img=imread('liantong.bmp');imgn=img128;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-1forj=2:n-1ifs(i,j)==1&&tmp(i,j)==0tmp(i,j)=label;q{queue_tail}=[ij];%用元组模拟队列,当前坐标入列queue_tail=queue_tail+1;whilequeue_head~=queue_tailpix=q{queue_head};fork=1:8%8邻域搜索pix1=pix+neighbour(k,:);ifpix1(1)=2&&pix1(1)=m-1&&pix1(2)=2&&pix1(2)=n-1ifs(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;endendendqueue_head=queue_head+1;endclearq;%清空队列,为新的标记做准备label=label+1;queue_head=1;queue_tail=1;endendend10、设一幅二值图像中,只有一个白色区域,试给出求该区域外围轮廓线的方法(要求按顺时针的顺序给出各点的坐标,即行/列号)。轮廓提取的算法很多,本题对于二值图像可以用一个简单的算法进行处理,首先遍历图像中的每一个像素点,查看该点像素值是否为白色像素点;若是再查看该点周围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:hbforj=1:wbif(B(i,j)==1)origin=[i,j];break;endendend%对矩阵A进行边扩张以0补充new_A=zeros(ha+hb*2,wa+wb*2);fori=1:haforj=1:wanew_A(i+hb,j+wb)=A(i,j);endend%对矩阵A进行遍历fori=1:haforj=1:waifA(i,j)==0continue;end%把B的origin点移到当前处理点%寻找B的影响区域块begin_i=i+hb-origin(1);begin_j=j+wb-origin(2);%对矩阵new_A中和重合的B中的元素对比fori1=begin_i:begin_i+hb-1forj1=begin_j:begin_j+wb-1flag=true;if(B(i1-begin_i+1,j1-begin_j+1)==1&new_A(i1,j1)==0)flag=falsebreak;endendendifflagans(i,j)=1;elseans(i,j)=0;endendend12、写出二维离散傅立叶变换、反变换的计算公式,给出基于频域滤波的基本步骤。二维离散傅里叶变换公式:假设以正方形网格采样得到的图像用f(x,y)来表示,其大小为N行M列,则f(x,y)的二维离散傅里叶变换可以表示为:F(u,v)=∑∑fN-1y=0(x,y)e-j2π(𝑢𝑥𝑀+𝑣𝑦𝑁),𝑢=0,1,…𝑀−1,𝑣=0,1,…𝑁−1M-1x=0其反变换为:f(x,y)=1𝑀𝑁∑∑FN-1v=0(u,v)e-j2π(𝑢𝑥𝑀+𝑣𝑦𝑁),𝑥=0,1,…𝑀−1,𝑦=0,1,…𝑁−1M-1u=0基于频域滤波的基本步骤:(1)用(−1)𝑥+𝑦乘以图像来进行中心变换(2)由(1)计算图像的DFT(离散傅里叶变换),即F(u,v)(3)用滤波器函数H(u,v)乘以F(u,v)(4)计算(3)中结果的反DFT(5)得到(4)中结果的实部(6)用(−1)𝑥+𝑦乘以(5
本文标题:数字图像处理期末考试题
链接地址:https://www.777doc.com/doc-2425062 .html