数学形态学操作可以分为二值形态学和灰度形态学,灰度形态学由二值形态学扩展而来。数学形态学有2个基本的运算,即腐蚀和膨胀,而腐蚀和膨胀通过结合又形成了开运算和闭运算。
开运算就是先腐蚀再膨胀,闭运算就是先膨胀再腐蚀。

  • 二值形态学

粗略的说,腐蚀可以使目标区域范围“变小”,其实质造成图像的边界收缩,可以用来消除小且无意义的目标物。式子表达为:


该式子表示用结构B腐蚀A,需要注意的是B中需要定义一个原点,【而B的移动的过程与卷积核移动的过程一致,同卷积核与图像有重叠之后再计算一样】当B的原点平移到图像A的像元(x,y)时,如果B在(x,y)处,完全被包含在图像A重叠的区域,(也就是B中为1的元素位置上对应的A图像值全部也为1)则将输出图像对应的像元(x,y)赋值为1,否则赋值为0。
我们看一个演示图。


B依顺序在A上移动(和卷积核在图像上移动一样,然后在B的覆盖域上进行形态学运算),当其覆盖A的区域为[1,1;1,1]或者[1,0;1,1]时,(也就是B中‘1’是覆盖区域的子集)对应输出图像的位置才会为1。

  • 膨胀

粗略地说,膨胀会使目标区域范围“变大”,将于目标区域接触的背景点合并到该目标物中,使目标边界向外部扩张。作用就是可以用来填补目标区域中某些空洞以及消除包含在目标区域中的小颗粒噪声。

该式子表示用结构B膨胀A,将结构元素B的原点平移到图像像元(x,y)位置。如果B在图像像元(x,y)处与A的交集不为空(也就是B中为1的元素位置上对应A的图像值至少有一个为1),则输出图像对应的像元(x,y)赋值为1,否则赋值为0。
演示图为:

  • 小结

也就是说无论腐蚀还是膨胀,都是把结构元素B像卷积操作那样,在图像上平移,结构元素B中的原点就相当于卷积核的核中心,结果也是存储在核中心对应位置的元素上。只不过腐蚀是B被完全包含在其所覆盖的区域,膨胀时B与其所覆盖的区域有交集即可。

  • 灰度形态学

在讲述灰度值形态学之前,我们进行一个约定,即将结构元素B覆盖住的图像A的区域记为P(取Part之意)。

  • 灰度形态学的腐蚀

那么灰度形态学中的腐蚀就是类似卷积的一种操作,用P减去结构元素B形成的小矩形,取其中最小值赋到对应原点的位置即可。
我们来看一个实例,进行加深对灰度形态学的理解。
假设我们有如下的图像A和结构元素B:

进行灰度形态学腐蚀的过程如下:

我们对输出图像的第一个元素的输出结果进行具体的展示,也就是原点对应的4的位置。输出图像其他的元素的值也都是这样得到的。我们会看到,B首先覆盖的区域就是被减数矩阵,然后在其差矩阵中求min(最小值)来作为原点对应位置的值。

灰度形态学的膨胀

根据上面对腐蚀的描述,我们对膨胀做出同样的描述,灰度形态学中的膨胀就是类似卷积的一种操作,用P加上B,然后取这个区域中的最大值赋值给结构元素B的原点所对应的位置。


这里也对输出图像第一个元素值的来历做个说明。

对上面矩阵的和求最大值就是6,所以把6赋值给结构元素原点所对应的位置。

  • 小结

上面介绍了灰度形态学的概念,这里来说一说各自的用处。相比较于原图像,因为腐蚀的结果要使得各像元比之前变得更小,所以适用于去除高峰噪声。而灰度值膨胀的结果会使得各像元比之前的变得更大,所以适用于去除低谷噪声。
开运算和闭运算

ai = imread('a5.jpg');
mi=imread('mango_infected.png');
m4=imread('m4.PNG');img = imread('potato.png');
type = 'a';
[L, Centers] = imsegkmeans(img, 3);
B = labeloverlay(img,L);
rgbImage = B;
% Display the original image.
subplot(4, 5, 1);
imshow(rgbImage);
title('Original Image(Potato)');
% Split the original image into color bands.
redBand = rgbImage(:,:, 1);
greenBand = rgbImage(:,:, 2);
blueBand = rgbImage(:,:, 3);
% Threshold each color band.
redthreshold = 100;
greenThreshold = 140;
blueThreshold = 170;
redMask = (redBand < redthreshold);
greenMask = (greenBand > greenThreshold);
blueMask = (blueBand < blueThreshold);
% Combine the masks to find where all 3 are 'true.'
damagedAreasMask = uint8(redMask & greenMask & blueMask);
subplot(4, 5, 2);
imshow(damagedAreasMask, []);
title('Damaged Areas Mask');%%====================================================================================================
bw=im2bw(ai,threshold/255); % Convert to Binary Image
subplot(4,5,13);
imshow(bw);
title('Otsu threshold');
imgc = uint8(imcomplement(bw));
%imshow(imgc); % Display the Binary ImagefinalImage = uint8(zeros(size(ai)));
finalImage(:,:,1) = ai(:,:,1) .* imgc;
finalImage(:,:,2) = ai(:,:,2) .* imgc;
finalImage(:,:,3) = ai(:,:,3) .* imgc;
%imshow(finalImage);
reqInfo = finalImage(:, :, 1) > 0 & finalImage(:, :, 2) > 0 & finalImage(:, :, 3) > 0;
res = sum(reqInfo(:));
disp(res)
t = 10000;
%if type=='b'
%    t = 5000;
%end
subplot(4,5,14);
if res>timshow(finalImage);title('Result: Infected');
elseimshow(finalImage);title('Result: Good');
end %==========================================================================%
subplot(4,5,16);
imshow(mi);
title('infected mango(Spongy tissue)');
subplot(4,5,17);
imshow(m4);
title('x-ray image');
m4=rgb2gray(m4);
x=(m4>150);
subplot(4,5,18);
imshow(x);
title('segmented defected region');
mi2 = imread('m3.png');
subplot(4,5,19);
imshow(mi2);
title('good mango');
m4=rgb2gray(mi2);
x=(m4>150);
subplot(4,5,20);
imshow(x);
title('non-infected mango');

【图像检测】基于形态学实现水果缺陷检测matlab源码相关推荐

  1. 【水果识别】基于形态学实现水果识别含Matlab源码

    1 简介 数学形态学操作可以分为二值形态学和灰度形态学,灰度形态学由二值形态学扩展而来.数学形态学有2个基本的运算,即腐蚀和膨胀,而腐蚀和膨胀通过结合又形成了开运算和闭运算. 开运算就是先腐蚀再膨胀, ...

  2. 【水果识别】基于计算机视觉实现水果识别含Matlab源码

    1 简介 自"农业 4.0"时代的来临,以"互联网+"为驱动的农业技术已成为发展农业强有力的支撑.在果蔬业中,果蔬分类通常由经过训练的人员人工评估农产品或农作物 ...

  3. 【车辆计数】基于形态学实现停车场车辆计数matlab源码

    一.简介 模型参考这里. 二.源代码 clc; clear all I=imread('C:\Users\lenovo\Desktop\新建文件夹\2.png'); G=rgb2gray(I); % ...

  4. 【语音合成】基于matlab线性预测共振峰检测和基音参数语音合成【含Matlab源码 562期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[语音合成]基于matlab线性预测共振峰检测和基音参数语音合成[含Matlab源码 562期] 点击上面蓝色字体,直接付费下载,即可. ...

  5. 【染色体识别】基于matlab形态学染色体计数【含Matlab源码 1066期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[染色体识别]基于matlab形态学染色体计数[含Matlab源码 1066期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  6. 【图像去噪】基于最小二乘方滤波实现图像去噪含Matlab源码

    1 简介 基于最小二乘方滤波实现图像去噪含Matlab源码​ 2 部分代码 function varargout = zuixiaoercheng(varargin)% ZUIXIAOERCHENG ...

  7. matlab代做mhslogic,MATLAB代做|FPGA代做|simulink代做——基于遗传算法的车间布局优化MATLAB源码...

    MATLAB代做|FPGA代做|simulink代做--基于遗传算法的车间布局优化MATLAB源码 添加时间:2019-12-8 来源:本站整理 基于遗传算法的车间布局优化MATLAB源码 车间布局优 ...

  8. matlab和投影寻踪,基于遗传算法的投影寻踪模型Matlab源码

    基于遗传算法的投影寻踪模型Matlab源码 %% "投影寻踪+遗传算法优化"的主仿真程序 % GreenSim团队原创作品,转载请注明 % Email:greensim@http: ...

  9. 【水果识别】柑橘质量检测及分级系统【含GUI Matlab源码 738期】

    ⛄一.简介 1 案例背景 目前,柑橘的分级主要靠人工完成,该方法存在主观误差大.效率低和柑橘易造成二次损伤等问题.随着机器视觉技术的快速发展, 图像处理在水果质量检测方面也取得了深入进展. 试验拟通过 ...

最新文章

  1. 支持向量机SVM 参数选择
  2. linux命令学习——file
  3. saiku 3.8 二次开发代码整理步骤(20160727更新)
  4. CSipSimple通话记录分组
  5. python1~10阶乘_python求n的阶乘
  6. 印钞机 java c c vb_自己动手写一个印钞机 第六章
  7. ubuntu下面解决mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists
  8. Java例外:java lang NoSuchMethodError
  9. java高并发临时表_不适用临时表进行分页,筛选,查询,避免高并发的方法。...
  10. 微信亲戚备注分组名称_微信新功能上线!群聊名称可备注,仅自己可见
  11. 京东:网传通过 Bug 抢茅台是假消息;罗永浩回应带货价格非「全网最低」;Rust 文档团队解散 | 极客头条...
  12. 《电子基础与维修工具核心教程》——第2章 电阻2.1 电阻器介绍
  13. python3.6中内置函数变化
  14. MySQL多线程备份工具mydumper
  15. oracle pl/sql发送邮件多个收件人问题
  16. 51单片机 protues 的仿真程序源文件
  17. Snake算法知识点记录
  18. 百度网盘怎么设置提取码 百度网盘自定义提取码方法
  19. C语言malloc函数详解(通俗易懂)
  20. 收藏:更换手机号必做的9件事

热门文章

  1. 六度分离理论、150法则与弱链接
  2. 藏头诗c语言实验报告,c语言程序设计期末实验报告
  3. 图像处理------提高图像边缘锐利度之UNSHARP_MASK算法
  4. 家用 NAS 服务器(6)| Nextcloud 网盘
  5. SpringBoot从入门到精通教程(七):集成Redis
  6. 格雷希尔快速连接器GripSeal 密封性测试密封堵头 G15Pro系列使用说明
  7. 利用自定义方法显示数组中的全部数据
  8. 有关血型的限制级秘密 (A型)
  9. 聚力赋能·共享共创|吉鼎科技与厦门6大高校“敏捷开发教学研讨会”圆满成功!
  10. 计算机专业性价比高的学校 考研,计算机专业考研,该怎样选择院校?这五所大学性价比很高...