哈工大深研院数字图像处理第二次大作业:水果自动识别(1)ROI提取

针对水果识别,需要有一个方法来自动获取ROI信息,这里采用分水岭算法可以很好地实现目标要求:

%Name: ROI extraction
%Function: Extract ROI in a RGB image
%Author: Changle Zhang, zhangchanglehit@163.com
clc;
clear all;
close all;
%Initilization
rgbimg=imread('Fruit Samples For Project2/澳洲蜜桔/澳洲蜜桔_image069.jpg');
%rgbimg=imread('Fruit Samples For Project2/番石榴/番石榴_image119.jpg');

figure;
imshow(rgbimg);
r=rgbimg(:,:,1);
g=rgbimg(:,:,2);
b=rgbimg(:,:,3);
% imshow(r);
% figure;
% imshow(g);
% figure;
% imshow(b);
% grayimg=rgb2gray(rgbimg);
% imshow(grayimg);
hsvimg=rgb2hsv(rgbimg);
H=hsvimg(:,:,1);
S=hsvimg(:,:,2);
V=hsvimg(:,:,3);
% figure;
% imshow(H);
% title('H');
% figure;
% imshow(S);
% title('S');
% figure;
% imshow(V);
% title('V'); %rgb = imread('pears.png');%读取原图像
I = S;%转化为灰度图像
hy = fspecial('sobel');%sobel算子
hx = hy';
Iy = imfilter(double(I), hy, 'replicate');%滤波求y方向边缘
Ix = imfilter(double(I), hx, 'replicate');%滤波求x方向边缘
gradmag = sqrt(Ix.^2 + Iy.^2);%求摸
%3.分别对前景和背景进行标记:本例中使用形态学重建技术对前景对象进行标记,首先使用开操作,开操作之后可以去掉一些很小的目标。
se = strel('disk', 20);%圆形结构元素
Io = imopen(I, se);%形态学开操作
Ie = imerode(I, se);%对图像进行腐蚀
Iobr = imreconstruct(Ie, I);%形态学重建
Ioc = imclose(Io, se);%形态学关操作
Iobrd = imdilate(Iobr, se);%对图像进行膨胀
Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));%形态学重建
Iobrcbr = imcomplement(Iobrcbr);%图像求反
bw = im2bw(Iobrcbr, graythresh(Iobrcbr));%转化为二值图像
figure;
imshow(bw), %显示二值图像
title('Thresholded opening-closing by reconstruction')
bww=im2uint8(bw)/255;
rgbimg(:,:,1)=bww.*rgbimg(:,:,1);
rgbimg(:,:,2)=bww.*rgbimg(:,:,2);
rgbimg(:,:,3)=bww.*rgbimg(:,:,3);
figure;
imshow(rgbimg);


提取ROI后的结果:


算法思路:通过rgb2hsv得到色调信息,利用对色调信息的分水岭变换得到我们需要的橙色区域,然后利用该区域作为ROI

文章来源: zclhit.blog.csdn.net,作者:zclhit_,版权归原作者所有,如需转载,请联系作者。

原文链接:zclhit.blog.csdn.net/article/details/51260502

(完)