• 一、引言

       果梗是判断水果新鲜程度的重要标志,对水果的贮藏和保鲜也具有重要的参考价值。库尔勒香梨分级标准中对果梗有明确要求,要求果梗完整,但由于库尔勒香梨果梗颜色与果实接近,用传统的简单阈值分割方法难以提取。因此,下面基于数学形态学开发一个能实现其果梗提取和测量的程序。

  • 二、程序代码

clear all;

close all;

clc;

I=imread('.\FragrantPear.tif');

I_R=I(:,:,1);

I_G=I(:,:,2);

I_B=I(:,:,3);

I_GB=I_G-I_B;

figure,imshow(I_GB),title('G-B图像');

figure,imhist(I_GB),title('G-B灰度直方图');

%I_GB_bw=im2bw(I_GB,graythresh(I_GB));  %分割阈值的选择

I_GB_bw=im2bw(I_GB,2/255);  %分割阈值的选择

figure,imshow(I_GB_bw);

SE=strel('disk',1);%确定结构元素形式和尺寸

obj=imopen(I_GB_bw,SE);%数学形态学开运算,消除小目标并平滑边界

obj=imfill(obj,'holes');

figure,imshow(obj),title('库尔勒香梨二值图像');

obj2=uint8(obj).*I;

figure,imshow(obj2),title('库尔勒香梨彩色图像');

[L,num]=bwlabel(obj);

stats=regionprops(L,'Area','Perimeter');

A=[stats.Area];      %获取库尔勒香梨的面积

P=[stats.Perimeter]; %获取库尔勒香梨的周长

FP=bwmorph(obj,'remove');

figure,imshow(FP);%获取库尔勒香梨的边缘图像

imtool(obj)

SE2=strel('disk',10);  %选取合适的结构元素

M=imopen(obj,SE2);

figure,imshow(M);

Stem=logical(obj-M);%图像减法获取果梗图像像

figure,imshow(Stem);

Stem2=bwareaopen(Stem,100);%去除噪声

figure,imshow(Stem2);

%测量果梗的长和宽

% 计算区域属性

props = regionprops(Stem2, 'Area','BoundingBox','MajorAxisLength','MinorAxisLength');% doc regionprops

 % 提取最小外矩形的长轴和短轴

MajorLength=props.MajorAxisLength;%估计果梗长度

MinorLength=props.MinorAxisLength;%估计果梗直径

% 提取最小面积的矩形

minAreaRect = props(1).BoundingBox;

% 绘制最小外矩形

rectangle('Position', minAreaRect, 'EdgeColor', 'r'),title('绘制最小外接矩形');%绘制最小外接矩形

%%https://www.mathworks.com/help/images/ref/regionprops_zh_CN.html

figure,

subplot(2,2,1),imshow(I),title('原始图像');

subplot(2,2,2),imshow(obj),title('二值图像');

subplot(2,2,3),imshow(FP),title('库尔勒香梨边缘图像');

subplot(2,2,4),imshow(Stem2),title('库尔勒香梨果梗二值图像');

三、程序部分运行结果

《数字图像处理与机器视觉》案例一(库尔勒香梨果梗提取和测量)-LMLPHP

《数字图像处理与机器视觉》案例一(库尔勒香梨果梗提取和测量)-LMLPHP

四、总结

    本次果梗提取和测量,充分利用MATLAB中内置函数imopen、imtool和imhist各自特点对彩色图像进行分析,确定了最优分割方案,获得了较好分割效果,对其它水果果梗检测也具有一定参考价值。

五、原始图像

《数字图像处理与机器视觉》案例一(库尔勒香梨果梗提取和测量)-LMLPHP

如果觉得本案例对大家今后的编程有帮助,请点赞和收藏。如有改进意见可以与我联系,谢谢!

06-24 10:37