第一范文网 - 专业文章范例文档资料分享平台

大作业数字图像处理

来源:用户分享 时间:2025/5/29 12:27:30 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

%计算各个图形单元的周长 用连接像素点或数边界像素点个数的方法 numPoints数组表示各个图形边界的像素个数(即用个数来表示周长) %num = max(max(Label)); for i = 1 : num Premeter(i) = 0; end

[row,col] = size(Label); for i = 1 : row for j = 1 : col if(Label(i,j) > 0)

Premeter(Label(i,j)) = Premeter(Label(i,j)) + 1; %计算标记后的各块图形边界中像素的个数的总数 end end end

%5计算各个图形单元的面积

FilledLabel = imfill(Label,'holes'); %填充打过标记的边界线中间围成的图形区域 figure,imshow(FilledLabel),title('打过标记后并已被填充的结果图像'); for i = 1 : num Area(i) = 0; end

[row,col] = size(FilledLabel); for i = 1 : row for j = 1 : col

if(FilledLabel(i,j) > 0)

Area(FilledLabel(i,j)) = Area(FilledLabel(i,j)) + 1; %通过统计像素点个数的方式来求各形状的面积 end end

end

%计算各个图形单元的圆度 for i = 1 : num

Ecllipseratio(i) = 4*pi*Area(i)/Premeter(i)^2; end %识别苹果

%构建苹果的分类器,在二维特征空间对各个图像进行类别区分 apple=0; for i=1:num

if((Ecllipseratio(i)<1.25)&&(Ecllipseratio(i)>1.0)) %分类器识别苹果的准则:判断各个图形中圆度居于1.0与1.25之间的的为苹果 apple=i; end end

%对分出来的类别分别构建相应的图像掩膜,并用对原图的亮度图像进行掩膜操作 appleHSV=HSV; for j = 1 : row for k = 1 : col

if(FilledLabel(j,k) ~=apple) appleHSV(j,k,3)=0; end end end

%变换生成最终的结果图像,图像中显示的结果即对应分类器中指定的类别

applematrix = hsv2rgb(appleHSV); %转换为RGB彩图,彩图中已经滤去了其余水果,只剩下苹果

figure,imshow(applematrix),title('水果类别:苹果');

接下来可以考虑计算苹果的直径。因为对于苹果来讲,不同的大小价格是不同的。 检测思路为:将图片灰度化、二值化后,利用regionprops函数计算二值化图像的最小外接矩形大小,外接矩形框长度和宽度中的最大值即为苹果最大横切面直径。此时的

数值为像素值,通过与照片的长、宽像素值进行比较,结合图片的实际长、宽值,即可求出果径的实际长度。 具体函数如下: rgb=imread('d:\\apple.png'); rgb1=im2double(rgb); r=rgb1(:,:,1); g=rgb1(:,:,2); b=rgb1(:,:,3); I=(r+g+b)/3;

tmp1=min(min(r,g),b); tmp2=r+g+b; tmp2(tmp2==0)=eps; S=1-3.*tmp1./tmp2; tmp1=0.5*((r-g)+(r-b)); tmp2=sqrt((r-g).^2+(r-b).*(g-b)); theta=acos(tmp1./(tmp2+eps)); H=theta;

H(b>g)=2*pi-H(b>g); H=H/(2*pi); H(S==0)=0; I = (r + g + b)/3;

% Combine all three results into an hsi image. hsi = cat(3, H, S, I); S=im2bw(S,0.2); imshow(S)

求取外接最小矩形框,并利用regionprops函数计算图像区域的属性信息,并读取矩形的长、宽数据,以长、宽中的最大值为果径的数值。这里的数值为像素值。 [l,m]=bwlabel(S,8);

status=regionprops(l,'BoundingBox');

x=status(2,1).BoundingBox; %读取矩形的长宽 X=max(x); %取最大值

取得果径的像素值后,与图片的长(宽)像素值相比。由于图片的像素、实际长宽等数值已预先设定并保持不变,因此根据果径像素与图片像素的比值可求出果径的实际数值。

接下来可以考虑检测水果表面的缺陷。果面的缺陷主要包括压伤、碰伤、虫蛀伤亦或是裂开等,但所有表面可见的伤痕都表现为正常果面色泽、质地不一致。因此可通过提取果面的图像特征,检测缺陷情况。

首先,读入图像后用rgb2gray函数对受检苹果进行灰度化,并用imadjust函数调整灰度图像的强度值。

I= imread(d:\\'apple3.jpg'); I2= rgb2gray(I);

J= imadjust(I2,[0.1 0.2],[]);

利用im2bw函数将调整后的灰度图像转换为二值图像,level值取1。为方便检测,对二值图像进行取反处理。

Y=im2bw(J,1);Y=~Y。

与计算果径的方法相同,求病斑区域的外接矩形框,并利用regionprops函数计算图像区域的属性信息。

[l,m]=bwlabel(Y,8);

status=regionprops(l,'BoundingBox'); imshow(Y); hold on; for i=1:m

rectangle('position',status(i).BoundingBox,'edgecolor','r'); end hold off;

由于病斑的不规则,且一个果面可能会有多个病斑,图像区域中会有多个外接矩形框,因此需要对每个矩形框的大小进行判定,选取面积最大的矩形框。

[x,y]=size(status); %读取图片信息 for i=1:x %共有x个矩形框 X(i)=max(status(i).BoundingBox); %取矩形框最大值 end

x2=status(i,1).BoundingBox; %读取矩形框的长、宽 x2(1) x2(2)

在这里,以最大矩形框的面积近似为病斑的面积。通过矩形框尺寸的像素值与照片长、宽像素值的比值,以及照片实际尺寸,进而确定病斑实际面积。

搜索更多关于: 大作业数字图像处理 的文档
大作业数字图像处理.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c5mvq068dt710e609m87w9sc9l3ppnv019xf_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top