膨胀与腐蚀

形态学处理

  首先,我们来介绍一下形态学图像处理:

  • 数学形态学的语言是集合论,它为大量的图像处理问题提供了一种一致的有力方法。
  • 数学形态学中的集合表示图像中的不同对象。例如,在二值图像中,所有黑色像素的集合是图像完整的形态学描述。
  • 在二值图像中,正被讨论的集合是二维整数空间(z^2)的元素,在这个二维整数空间中,集合的每个元素都是一个多元组,是一个黑色(或白色,取决于事先的约定)像素在图像中的坐标 (x, y)。

集合论的几个基本概念

令 A 为一个 z2 中的集合。

  • 如果 a = (a1, a2) 是 A 的元素,则我们将其写成 a∈A;如果不是 A 的元素,则写成:a ∉A。

  • 集合由两个大括号之中的内容表示,例:C = {w|w=-d, d∈D}

  • 如果集合 A 的每个元素又是另一个集合 B 的一个元素,则 A 称为 B 的子集,表示为:A ⊆ B

  • 两个集合 A 和 B 的并集表示为:C = A Ս B

  • 两个集合 A 和 B 的交集表示为:D = A Ո B

  集合 B 的反射,表示为     ,定义为:

  集合 B 平移到点 z = (z1, z2),表示为 (B)z,定义为:

膨胀

  由于 A 和 B 是 z2 中的集合, A 被 B 膨胀定义为:

代码

clear;clc;
width=500; %图像的宽
height=500; %图像的高
expand_size=200;

img=ones(width,height);
expand_img=double(wextend('2D','zpd',img,expand_size));%扩展0,也就是增加padding
model=ones(51,51);%模板大小为15
model_size=51;
cen=floor((model_size 1)/2);

[M,N]=size(expand_img);
img_result=zeros(M,N);
for i=1:(M-model_size)
for j=1:(N-model_size)
ave=sum(sum(expand_img(i:i model_size-1,j:j model_size-1).*model));
if ave>0
img_result(i cen,j cen)=255;
end
end
end
figure
subplot(1,2,1);
imshow(expand_img)
title('原图像');
subplot(1,2,2);
imshow(img_result)
title('膨胀之后的图像');

  本例中采用结构元50*50:

腐蚀

  对 z^2 中的集合 A 和 B, 使用 B 对 A 进行腐蚀, 定义为:

代码

clear;clc;width=500;  %图像的宽height=500;  %图像的高expand_size=200;img=ones(width,height);expand_img=double(wextend('2D','zpd',img,expand_size));%扩展0,也就是增加paddingmodel=ones(51,51);%模板大小为51model_size=51;cen=floor((model_size 1)/2);Sum=model_size*model_size;[M,N]=size(expand_img);img_result=zeros(M,N);for i=1:(M-model_size)    for j=1:(N-model_size)        ave=sum(sum(expand_img(i:i model_size-1,j:j model_size-1).*model));        if ave==Sum            img_result(i cen,j cen)=255;        end    endendfiguresubplot(1,2,1);imshow(expand_img)title('原图像');subplot(1,2,2);imshow(img_result)title('腐蚀之后的图像');

来源:https://www.icode9.com/content-4-820951.html

(0)

相关推荐

  • (1条消息) OpenCV图像处理实际案例(二)

    本博客算法及代码参考自贾志刚老师的<OpenCV图像处理-小案例实战>,若涉及侵权问题,望通知,会第一时间删除. 功能要求: 从如下图片中找出所有直线.  解决方案一: 直接进行霍夫直线检 ...

  • 【OpenCV 4开发详解】形态学应用

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • OpenCV根据轮廓查找精准定位圆形

    经过多次试验,发现利用OpenCV的霍夫圆变换查找出来的圆,其圆心位置并不准确,而且参数调节较为麻烦.于是想到利用轮廓查找的方式来进行圆检测,我们可以通过判断轮廓的外接矩形的横纵比来判断该轮廓是否为圆 ...

  • Python+opencv 图像处理(五)

        灰度反转 "你说的黑是什么黑......"有一首歌的歌词是这样的. 在图像中,黑是什么? 很简单,就是0嘛. 因为在数字图像里,用0表示黑. 那么,"你说的白是什 ...

  • python+opencv图像处理(二)

    python+opencv图像处理(二) ----图像变换 自然界中有很多的颜色,红红的花,绿绿的草,蓝蓝的天,白白的云,多姿多彩的世界,美轮美奂的图像. 通过手机,照相机就可以定格每一个美的瞬间. ...

  • Matlab:单幅图象的暗原色先验去雾改进算法,能够很好地改进天空或明亮部分色彩失真问题

    Matlab:单幅图象的暗原色先验去雾改进算法,能够很好地改进天空或明亮部分色彩失真问题 输出结果 实现代码 %单幅图象的暗原色先验去雾改进算法,能够很好地改进天空或明亮部分色彩失真问题,matlab ...

  • (11条消息) C++opencv图像裁剪、等比例放大缩小

    描述 C++使用opencv时,对imshow图像进行的常见处理,包括图像剪裁.等比例压缩等(待继续补充) 代码 1. 剪裁 int matrix_size = 3000; cv::Mat image ...

  • OpenCV探索之路(四):膨胀、腐蚀、开闭运算

    腐蚀和膨胀是最基本的形态学运算. 腐蚀和膨胀是针对白色部分(高亮部分)而言的. 膨胀就是对图像高亮部分进行"领域扩张",效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域被蚕食 ...

  • 如何在机器学习中应用图像处理以及使用相对于的技术

    Processing 可以用来提高图像质量,或帮助你从图像中提取有用的信息.它在医学成像等领域很有用,甚至可以用于隐藏图像中的数据. 在本文中,我将告诉你有关如何在机器学习中应用图像处理以及可以使用的 ...

  • 使用Python可视化卷积神经网络方法汇总

    仅做学术分享,如有侵权,联系删除 转载于 :深度学习与计算机视觉 https://www.analyticsvidhya.com/blog/2018/03/essentials-of-deep-lea ...