图像处理——HSV图像应用(matlab)

本文主要讲解如何利用HSV图像识别蘑菇上的异物,并去除异物图像处理——HSV图像应用(matlab)_第1张图片

一、基础图像处理

进行一系列处理,找到蘑菇位置截图,以免背景光照等因素对异物判断造成影响

%读取图像
img_name = 'picture\C\4_1_1_002.jpeg';
RGB = imread(img_name);
figure,imshow(RGB);
r=RGB(:,:,1);
figure,imshow(r);
threshold = graythresh(r);
bw = im2bw(r,threshold);
figure,imshow(bw);
%删除二值图像bw中面积小于150的对象,默认情况下使用8邻域。
bw = bwareaopen(bw,150);
%闭合(先膨胀后腐蚀),填充物体内细小空洞,连接邻近物体,平滑边界
se = strel('disk',10);
bw = imclose(bw,se);
% 填充二值图像中的由边界包围的空洞区域。
bw = imfill(bw,'holes');
figure,imshow(bw)
% 返回一个和bw大小相同的L矩阵,包含了标记了bw中每个连通区域的类别标签,这些标签的值为12、num(连通区域的个数),默认为8连通寻找
L = bwlabel(bw);
[y,x]=find(L==1);
x0=min(x(:));%找连通域列中最小值
x1=max(x(:));
y0=min(y(:));
y1=max(y(:));
hold on
rectangle('Position',[x0,y0,x1-x0,y1-y0],'edgeColor','g','LineWidth',1)%标出邻接矩阵
I = imcrop(RGB,[x0,y0,x1-x0,y1-y0]);

图像处理——HSV图像应用(matlab)_第2张图片

二、利用HSV图像进行异物查找与删除

rgb2hsv函数使得RGB图像转换为HSV图像,可以通过数据游标来查看HSV图像中数值,以便区别异物和正常蘑菇颜色
图像处理——HSV图像应用(matlab)_第3张图片

figure;
subplot(231);imshow(RGB);title('原始图像');
subplot(232);imshow(I);title('截图后的图像');
%第一次色彩空间变换
hsv = rgb2hsv(I);
subplot(233);imshow(hsv);title('HSV图像');
h=hsv(:,:,1);%h、s、v分别对应数据游标取值中的R、G、B
s=hsv(:,:,2);
v=hsv(:,:,3);
[x,y,z]=size(hsv);
for i=1:x
    for j=1:y%找到异物值后进行删除处理(置0),这里还同时置背景为0if(h(i,j)>100/255&&h(i,j)<180/255) %&&(s(i,j)>43/255&&s(i,j)<255/255)%&&
            (v(i,j)>46/255&&v(i,j)<255/255)
                 h(i,j)=0;
                 s(i,j)=0;
                 v(i,j)=0;
             end
    end
end
for i=1:x
    for j=1:y
        hsv(i,j,1)=h(i,j);%把置0的值填入HSV图像
        hsv(i,j,2)=s(i,j);
        hsv(i,j,3)=v(i,j);
    end
end
% k=find(h>0.4);
% h(k)=0;
subplot(234);imshow(hsv);title('去除异物后的HSV图像');
I1 = hsv2rgb(hsv);%HSV图像还原成RGB图像
subplot(235);imshow(I1);title('去除异物后的RGB图像');
% figure,imshow(h);
% figure,imshow(s);
% figure,imshow(v);
R=I1(:,:,1);
subplot(236);imshow(R);title('去除异物后的灰度图像');
figure;imshow(rgb2hsv(I));title('HSV图像');

你可能感兴趣的:(matlab,matlab,图像处理,开发语言)