读入一张水果彩色数字图像,然后对其进行水果和果梗进行分割。算法思想:通过提取红、绿和蓝各分量图像,发现其双峰特性不明显。使用improfile绘制水果图像中穿过背景和水果的R、G 、B分量的灰度值曲线,从improfile曲线可以看出,在水果所在位置R分量曲线和B分量的灰度值差异大,而背景差异小。因而,选择r-b进行代数运算,然后进行对比度增强,再使用最大类间方差法进行二值化,最后进行彩色图像背景分割。
详细代码如下:
clear all;
close all;
clc;
imtool close all;
I=imread('fruit1.jpg');%读入水果彩色图像
imshow(I);
Ir=I(:,:,1);%提取R分量图像
figure,imhist(Ir),title('红色分量灰度直方图');
Ig=I(:,:,2);%提取G分量图像
figure,imhist(Ig),title('绿色分量灰度直方图');
Ib=I(:,:,3);%提取B分量图像
figure,imhist(Ib),title('蓝色分量灰度直方图');
%通过以上分析,各分量灰度直方图双峰特征不明显
imtool(I);
x = [1 459];
y = [190 190];
improfile(I,x,y),grid on %使用improfile绘制水果图像中穿过背景和水果的R、G 、B分量的灰度值曲线
Irb=Ir-Ib; %从improfile曲线可以看出,在水果所在位置R分量曲线和B分量的灰度值差异大,而背景差异小。
Irb=imadjust(Irb);%对图像进行对比度调节
figure,imshow(Irb);
figure,imhist(Irb);
bw=im2bw(Irb,graythresh(Irb));%利用最大类间方差法进行图像分割
bw2=imfill(bw,'holes');
figure,imshow(bw2);
objFruit=uint8(bw2).*I;
figure,imshow(objFruit);%将水果从图像中分割出来
objStem=uint8(bw2-bw).*I;
figure,imshow(objStem);%将果蒂从图像中分割出来
figure('Name','彩色图像阈值分割','NumberTitle','off');
subplot(3,2,1),imshow(I),title('水果彩色图像');
subplot(3,2,2),imshow(Irb),title('R-B图像');
subplot(3,2,3),imshow(bw2),title('模版1');
subplot(3,2,4),imshow(bw2-bw),title('模版2');
subplot(3,2,5),imshow(objFruit),title('水果图像');
subplot(3,2,6),imshow(objStem),title('果蒂图像');
%% 本程序在MATLAB 2018b 下调试运行
最后运行结果如下图所示: