|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
! p6 Y9 d6 `2 `7 E- W- y( x$ W
一、简介
) G/ r8 p; W) C7 e4 N1 t根据颜色的方法来进行定位水蜜桃、苹果等,我们知道苹果属于红色,我们只要设置好rgb三通道的色彩分量,即可将红色区域给置1,其他非红色区域给置0.留下苹果的颜色。再利用rectangle函数即可定位出原图的位置。该类课题可以拓展到很多其他的应用,如安全帽识别,路锥识别,彩色球识别,交通标志识别等等。) c- P2 v$ S. o" Y7 r7 l
# m- j! k5 r+ ]; P! V" Z0 S- W
0 f3 _1 g' V' @2 w+ {* h
( c# [3 [! D2 Z1 N2 s7 N h/ C二、源代码
9 n! q S0 F& K/ ^* U
5 O' Q$ Y$ N3 s1 T2 Q- %1读取原图,并处理成二值图像
- I=imread('水果分类实验图像.jpg');
- I2=rgb2gray(I);
- BW=im2bw(I2,0.9);
- total=bwarea(~BW)
- figure,subplot(1,3,1),imshow(I),title('原始图像');
- subplot(1,3,2),imshow(I2),title('灰度图像');
- subplot(1,3,3),imshow(BW),title('二值图像');
- %2进行边缘检测 得到了不连续的图形边界(采用sobel算子或区域增长)
- %3得到各个图形的连续边界
- SE=strel('rectangle',[40 30]); % 结构定义
- J2=imopen(BW,SE); % 开启运算
- figure,imshow(J2),title('对二值图像进行开运算后的结果图像');
- SE=strel('square',5); % 定义3×3腐蚀结构元素
- J=imerode(~J2,SE);
- BW2=(~J2)-J; % 检测边缘
- figure,imshow(BW2),title('3*3腐蚀运算后的图像边界轮廓');
- %填充了已有的检测的连续形状边界
- B = imfill(BW2,'holes');
- B = bwmorph(B,'remove');
- figure,imshow(B),title('提取出的边界图像');
- %3-2将不同的图形进行分别标记,num表示连接的图形对象的个数
- [Label,num] = bwlabel(B,8);
- %得到各个图像的边界像素的数组
- %4计算各个图形单元的周长 用连接像素点或数边界像素点个数的方法 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
- ' f9 l" R% t6 O# J8 `. T
* W5 z* ]. X8 P% N( p# E8 J+ N w
& c4 S) I* v8 P: b
|
|