图像处理作业(燕大)_第1页
图像处理作业(燕大)_第2页
图像处理作业(燕大)_第3页
图像处理作业(燕大)_第4页
图像处理作业(燕大)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 雪花啤酒厂准备上一套视觉检测系统以控制产品的质量。要求分辨率最小是2*2mm像素,选择CCD分辨率,确定镜头的焦距并确定物距(8分)。2.把燕大的校标(128*128)进行3*3放大处理,分别叙述用双线性插值和最近领域插值两种方法的算法步骤(10分)。3.用图像处理的方法确定下列啤酒瓶的缺口和破口(12分)。4.旋转设备润滑油中铁屑的大小和多少反映了其磨损状况,下图是某润滑油的铁谱照片,请用图像处理的方法识别其润滑状况(10分)。5. 请用图像处理的方法自动确定下列靶面射击的环数(其中白点为射击孔,20分)。6. 设计一个图像处理的算法分别对下图的红细胞和白细胞计数(假设浅色点为红细胞,深

2、色点为白细胞,20分)。7. 对附件中的三幅眼底图像,分别设计边缘增强的算法(即在结果图像的显示中,边缘特征突出了,不是边缘提取,20分)。1解:取图像元尺寸为,则杂质所成的像的尺寸最少为,设物距为1米,对5mm×5mm的杂质成像,可知此镜头的焦距为 对于相机分辨率,则要根据成像视野对应的实际范围而定。例如若视野范围为,则相机分辨率应不小于 像素2 解:(1)读入原图像,得到图像的高度和宽度;(2)根据放大倍数得到新图像的高度和宽度,并创建空白新图像;(3)得到像素点(x ,y)的值并写回新图像; 最邻近插值法:将原始像素简单复制到其邻域内,进行图像放大。 双线性插值法:利用需要处理

3、的原图像像素点周围的个邻点的像素值在,两个方向上作线性内插,即待插点处的数值用离待插点最近的四个点的值加权求得。对于一个目的像素,设置坐标通过向后映射法得到浮点坐标。其中,是非负整数,,是取值区间的浮点数,随放大后像素行列坐标的不同而改变,则这个像素的值可由原图像中坐标为, ,所对应的周围四个像素的值决定,公式为:其中,表示源图像处的像素值。得到放大图像。采用matlab7.1进行图像处理,将原图像保存目录为为E:picture.jpg。(1)双线性插值:A=imread('E:picture.jpg');B=imresize(A,128*3 128*3,'biline

4、ar'); %采用双线性插值将原始图像放大三倍imshow(B); 运行结果:(2)最近领域插值:A=imread('E:picture.jpg');B=imresize(A,128*3 128*3,'nearest'); %采用最近领域插值将原始图像放大三倍imshow(B);运行结果:3解:首先对图像进行分析。只要图像中的圆形是不间断的完整的,就说明是合格的,如果圆形有间断,则说明是不合格的。(1)对图像进行滤波。(2)对图像进行阈值分割,进行二值化处理。(3)对图像所有点做出一个索引表,将表内数据全部赋值为1。(4)取图像左上角一点,然后对该点四周

5、的点进行判断,是否为黑色点,如有,则记录下该点位置,并在索引表中将该点的索引值改为0。(5)分析与上一点相邻近的为黑色的点的四周,用相同方法处理。(6)当所有点处理完毕之后,分析索引表中为1的点的数量,如果大于某个比例,则说明该圆形封闭良好,说明圆形没有间断,所以是合格的。4解:(1)对图像进行滤波。(2)对图像进行阈值分割,进行二值化处理。(3)对图像所有点做出一个索引表,将表内数据全部赋值为1。(4)取图像左上角一点,然后对该点四周的点进行判断,是否为黑色点,如有,则记录下该点位置,并在索引表中将该点的索引值改为0。(5)分析与上一点相邻近的为黑色的点的四周,用相同方法处理。(6)当所有点

6、处理完毕之后,分析索引表中为1的点的数量,根据1的点的数量与0的点的数量,计算其磨损度。原始图像picture4.jpg采用matlab7.1进行图像处理,将原图像保存目录为为E:picture4.jpg。采用阈值100,然后统计白色小块占整个图像百分比(假设不大于0.1润滑效果好)程序如下:A=imread('E:picture4.jpg');B=im2bw(A,100/255); %阈值100分割figure, subplot(1,2,1); imhist(B); title('二值图像直方图 ');subplot(1,2,2); imshow(B); ti

7、tle('阈值100分割图 '); %图像显示C=numel(B); %查找图像像素个数D=find(B=0); %查找图像中为1的像素个数E=numel(D);if(E/C<=0.1) %判断元素为1所占整个像素比值并进行显示 fprintf('润滑效果OKn');else fprintf('润滑效果NGn');end;运行结果:润滑效果NG5解:(1)首先对图像进行滤波操作。(2)首先取射击前情况图像一张。(3)取射击后情况图像一张。(4)将两张图像进行比较,取出发生变化的点,既是当前射击中击中的点。(5)根据阈值分析法,及滤波操作,得

8、出靶上的中心圆位置。(6)根据直径最长原理,两直径相交点为圆心的原理,计算出圆心位置。(7)现在设圆心点为O,击中点为P,按照射线OP方向,计算出O点距离中心圆环外围的距离L1。(8)计算出OP两点的距离L2。(9)当前的靶数即为:10-L2/L1假设环与靶心距离方程已知,F=10+(i-1)*30,环数为i,间距30。只需确定靶心与弹孔坐标,然后确定环数。采用matlab进行图像处理,将原图像保存目录为E:1.jpg。程序如下:A=imread('E:picture51.jpg');B=im2bw(A,240/255); %阈值240分割L,n=bwlabel(B); %查找

9、弹孔连通域r,c=find(L=1);x1=mean(r); %求平均值y1=mean(c);B1=im2bw(A,35/255); %阈值35二值分割D=medfilt2(B1, 41,41); %B1图像进行41×41模板中值滤波figure,subplot(1,2,1); imshow(B); title('弹孔阈值240分割图');subplot(1,2,2); imshow(D); title('靶心阈值35滤波41×41模板');L1,n1=bwlabel(D); %查找靶心连通域r1,c1=find(L1=1);x0=mean(

10、r1); %求平均值y0=mean(c1);figure,imshow(A);hold on;plot(y1,x1,'Marker','+','MarkerEdgeColor','b'); %弹孔用蓝色+表示plot(y0,x0,'Marker','+','MarkerEdgeColor','r'); %靶心用红色+表示title('靶心与弹孔中心点坐标示意图');figure,hold on;plot(y1,x1,'Marker',&

11、#39;+','MarkerEdgeColor','b'); plot(y0,x0,'Marker','+','MarkerEdgeColor','r'); title('靶心与弹孔中心点坐标图');E=sqrt(x0-x1)2+(y0-y1)2); %靶心与弹孔之间距离flag=0;for i=1:10 %计算环数 F=10+(i-1)*30;if(flag=0) if(E<=F) fprintf('%d环n', 11-i); %显示结果 flag=1

12、; break; end;else end;end;运行结果:6环(2) 假设环与靶心距离方程已知,F=60+(i-1)*40,环数为i,间距40。只需确定靶心与弹孔坐标,然后确定环数。采用matlab7.1进行图像处理,将原图像保存目录为为E: 2.jpg。程序如下:A=imread('E:picture52.jpg');B=im2bw(A,240/255); %阈值240分割L,n=bwlabel(B); %查找弹孔连通域r,c=find(L=1);x1=mean(r); %求平均值y1=mean(c);figure,B1=im2bw(A,100/255); %阈值100分

13、割D=medfilt2(B1, 45,45); %B1图像进行45×45模板中值滤波L1,n1=bwlabel(D); %查找靶心连通域r1,c1=find(L1=2); %由图像联通域分析确定靶心连通域为2x0=mean(r1); %求平均值y0=mean(c1);figure,imshow(A);hold on;plot(y1,x1,'Marker','+','MarkerEdgeColor','b'); %弹孔用蓝色+表示plot(y0,x0,'Marker','+','Ma

14、rkerEdgeColor','r'); %靶心用红色+表示title('靶心与弹孔中心点坐标示意图');figure,hold on;plot(y1,x1,'Marker','+','MarkerEdgeColor','b'); plot(y0,x0,'Marker','+','MarkerEdgeColor','r');title('靶心与弹孔中心点坐标图');E=sqrt(x0-x1)2+(y0-y1)2)

15、; %靶心与弹孔之间距离flag=0;for i=1:10%计算环数 F=60+(i-1)*40;if(flag=0) if(E<=F) fprintf('%d环n',11-i); %显示结果 flag=1; break; end;else end;end;运行结果:8环6 解: K均值聚类、分水岭算法计算图片中红白细胞个数K均值聚类 1、任取0,255中K个值作为第一次分类中心 2、把图像(gray)中的每一个点与K个中心值进行比较,按差值分成K组,求出新的K个中心点 3、重复上一步骤直到前后两次算出的中心点值相同 4、按最后得到的中心点把图像依据点到中心点的距离分成K

16、类。 程序 function cen,copy=Kmeans(I,k) % K均值聚类函数 mm=max(max(I); % mm为I的最大灰度值 copy=I; cen=(1:k)*mm/k; % 求出首次中心值 cen1=zeros(1,k); d=ones(1,k)./255; m,n=size(I); J=zeros(m,n); while(1) for i=1:m for j=1:n c=abs(I(i,j)-cen); % c为I中元素与各中心点的差值数组 cc=find(min(c)=c); % cc为距中心值最近的元素下标 J(i,j)=cc; end end % 求新的中心点

17、 for r=1:k h=0; J1,J2=find(J=r); p=length(J1); for s=1:p h=h+I(J1(s),J2(s); copy(J1(s),J2(s)=cen(r); % 按中心值把原图像灰度分为K类 end cen1(r)=h/p; end if (abs(cen1-cen)<=d) break; else cen=cen1; end end I=imread('blood.jpg'); % 读入处理图像 R=I(:,:,1); % 分离R分量 G=I(:,:,2); B=I(:,:,3); clc; % 清屏 close all; %

18、 关闭图像窗口 figure, % 开辟图像显示窗口 subplot(2,3,1),imshow(R),title('R分量'); subplot(2,3,2),imshow(G),title('G分量'); subplot(2,3,3),imshow(B),title('B分量'); K=rgb2hsv(I); % RGB图像转换成HSV图像 H=K(:,:,1); S=K(:,:,2); V=K(:,:,3); subplot(2,3,4),imshow(H),title('H分量'); subplot(2,3,5),imsh

19、ow(S),title('S分量'); subplot(2,3,6),imshow(V),title('V分量'); 白细胞计数 % 分割出只有白细胞的二值图像 cenwhite,copywhite=Kmeans(H,3); % K均值聚类函数调用 cenwhite; % 查看聚类后的中心值 figure, subplot(1,3,1),imshow(copywhite, ),title('H分量K均值聚类结果'); A=copywhite; m,n=size(A); % 把聚类后图像二值化 for i=1:m for j=1:n if A(i,

20、j)=cenwhite(2) A(i,j)=1; else A(i,j)=0; end end end subplot(1,3,2),imshow(A, ),title('白细胞二值化结果'); C1=imdilate(A,ones(5); % 对二值化图像腐蚀膨胀处理达到去噪效果 C2=imerode(C1,ones(11); C=imdilate(C2,ones(6); subplot(1,3,3),imshow(C, ),title('白细胞去噪结果'); E=bwdist(C); E=-E; E(C)=-Inf; L0=watershed(E); rgb

21、=label2rgb(L0,'jet'); subplot(1,2,2),imshow(rgb, ),title('法二白细胞分水岭结果'); NumWhite=max(max(L0)-1; NumWhite; % NumWhite为分水岭算法计数结果显示结果 红细胞计数 % 分割出只有红细胞的二值图像并对其做必需处理 I1(:,:,1)=double(I(:,:,1).*C; % 把二值图像还原为彩色图像 I1(:,:,2)=double(I(:,:,2).*C; I1(:,:,3)=double(I(:,:,3).*C; figure,subplot(1,2

22、,1),imshow(uint8(I1),title('白细胞'); J=double(I)-double(I1); % 原图减去白细胞图得红细胞彩图 subplot(1,2,2),imshow(uint8(J),title('红细胞'); J=rgb2hsv(J); % 红细胞图转换成HSV图 HH=J(:,:,1); SS=J(:,:,2); % 提取S分量 VV=J(:,:,3); subplot(1,3,1),imshow(HH),title('红细胞图H分量'); subplot(1,3,2),imshow(SS),title('

23、;红细胞图S分量'); subplot(1,3,3),imshow(VV),title('红细胞图V分量'); cenred,copyred=Kmeans(SS,2); % 对S分量图均值聚类 cenred; % 查看聚类后的中心值 figure,subplot(2,2,1),imshow(copyred, ),title('S分量K均值聚类结果'); H=copyred; m,n=size(H); % 把聚类后图像二值化 for i=1:m for j=1:n if H(i,j)=cenred(2) H(i,j)=1; else H(i,j)=0; e

24、nd end end subplot(2,2,2),imshow(H, ),title('红细胞二值化结果'); G=imfill(H,'holes'); % 红细胞图填充孔洞 subplot(2,2,3),imshow(G, ),title('红细胞填洞结果'); C1=imerode(G,ones(9); % 开运算去除噪声 G=imdilate(C1,ones(9); subplot(2,2,4),imshow(G, ),title('红细胞去噪结果'); D=bwdist(G); D=-D; D(G)=-Inf; L=wa

25、tershed(D); rgb=label2rgb(L,'jet'); subplot(1,2,2),imshow(rgb, ),title('红细胞分水岭算法结果'); numred2=max(max(L)-1; numred2; % 查看分水岭算法得到的红细胞个数numred2 % 为缩小误差把两种方法得出的红细胞个数的平均值作为红细胞的最终个数 % NumRed=floor(numred1+numred2)/2); % floor()为向上取整。相关函数有ceil()向上取整,round()四舍五入。 NumRed; % 查看最终得到的红细胞个数NumRe

26、d 程序运行结果 7 解:(1)原始图像 1112.bmp首先将真彩图像转化为灰度图像,采用滤镜锐化图像,使用canny算法提取图像边缘,求连通域去除较小的连通域,以减少边缘扩充后的毛刺现象,然后进行图像扩充,再次使用连通域方法,去除扩充后图像中较小连通域,合并边缘图像与原始图像以达到增强血管边缘的效果采用matlab7.1进行图像处理,将原图像保存目录为为E:1112.bmp。程序如下:clear all;clc;A=imread('E:1112.bmp');B=rgb2gray(A);%灰度值变换E=fspecial('motion',2,0); %消除失真晶格B=imfilter(B,E,'replicate'); %应用滤镜锐化图像E=fspecial('unsharp'); %对比度增强G=imfilter(B,E,'replicate'); C1=edge(G

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论