如果您觉得本文不错!记得点赞哦!


一. 图像形态学简介:

图解图像腐蚀、膨胀 ↑

经验之谈:形态学操作一般作用于二值图像,来连接相邻的元素(膨胀)或分离成独立的元素(侵蚀)。腐蚀和膨胀是针对图片中的白色(即前景)部分!


二. 图像形态学操作 膨胀和腐蚀的算法:

  膨胀算法:

对于待操作的像素 f(x,y),不论 f(x,y-1) 、f(x,y+1) 、f(x-1,y) 、f(x+1,y) 哪一个为255,则 f(x,y)=255。

膨胀操作 ↑

换句话说:将待操作的图像像素与以下  4-近邻矩阵 相乘,结果大于255的话,将中心像素设为255。

膨胀:待操作像素 * 上面矩阵 > =255,f(x,y) = 255。 ↑

腐蚀算法:

对于待操作的像素 f(x,y),只有 f(x,y-1) 、f(x,y+1) 、f(x-1,y) 、f(x+1,y) 都为255,则 f(x,y)=255。

换句话说:将待操作的图像像素与以下  4-近邻矩阵 相乘,结果小于255*4的话,将中心像素设为0。

腐蚀:待操作像素 * 上面矩阵 < 255*4,f(x,y) = 0 。↑


三. python实现图像膨胀和腐蚀

# Writer : wojianxinygcl@163.com
# Date   : 2020.3.21
import cv2
import numpy as np
import matplotlib.pyplot as plt# Gray scale
def BGR2GRAY(img):b = img[:, :, 0].copy()g = img[:, :, 1].copy()r = img[:, :, 2].copy()# Gray scaleout = 0.2126 * r + 0.7152 * g + 0.0722 * bout = out.astype(np.uint8)return out# Otsu Binalization
def otsu_binarization(img, th=128):H, W = img.shapeout = img.copy()max_sigma = 0max_t = 0# determine thresholdfor _t in range(1, 255):v0 = out[np.where(out < _t)]m0 = np.mean(v0) if len(v0) > 0 else 0.w0 = len(v0) / (H * W)v1 = out[np.where(out >= _t)]m1 = np.mean(v1) if len(v1) > 0 else 0.w1 = len(v1) / (H * W)sigma = w0 * w1 * ((m0 - m1) ** 2)if sigma > max_sigma:max_sigma = sigmamax_t = _t# Binarizationprint("threshold >>", max_t)th = max_tout[out < th] = 0out[out >= th] = 255return out# Morphology Dilate
def Morphology_Dilate(img, Dil_time=1):H, W = img.shape# kernelMF = np.array(((0, 1, 0),(1, 0, 1),(0, 1, 0)), dtype=np.int)# each dilate timeout = img.copy()for i in range(Dil_time):tmp = np.pad(out, (1, 1), 'edge')for y in range(1, H):for x in range(1, W):if np.sum(MF * tmp[y-1:y+2, x-1:x+2]) >= 255:out[y, x] = 255return out# Morphology Erode
def Morphology_Erode(img, Erode_time=1):H, W = img.shapeout = img.copy()# kernelMF = np.array(((0, 1, 0),(1, 0, 1),(0, 1, 0)), dtype=np.int)# each erodefor i in range(Erode_time):tmp = np.pad(out, (1, 1), 'edge')# erodefor y in range(1, H):for x in range(1, W):if np.sum(MF * tmp[y-1:y+2, x-1:x+2]) < 255*4:out[y, x] = 0return out# Read image
img = cv2.imread("../paojie.jpg").astype(np.float32)# Grayscale
gray = BGR2GRAY(img)# Otsu's binarization
otsu = otsu_binarization(gray)# Morphology - dilate
erode_result = Morphology_Erode(otsu, Erode_time=2)
dilate_result = Morphology_Dilate(otsu,Dil_time=2)# Save result
cv2.imwrite("Black_and_white.jpg",otsu)
cv2.imshow("Black_and_white",otsu)
cv2.imwrite("erode_result.jpg", erode_result)
cv2.imshow("erode_result", erode_result)
cv2.imwrite("dilate_result.jpg", dilate_result)
cv2.imshow("dilate_result",dilate_result)
cv2.waitKey(0)
cv2.destroyAllWindows()

四. 实验结果:

二值图像(左),膨胀图像(中),侵蚀图像(右) ↑


五. 参考内容:

①  https://www.jianshu.com/p/ba2cec49c981

②  https://www.cnblogs.com/wojianxin/p/12542004.html


六. 版权声明:

未经作者允许,请勿随意转载抄袭,抄袭情节严重者,作者将考虑追究其法律责任,创作不易,感谢您的理解和配合!

图像膨胀、腐蚀算法实现 python源码相关推荐

  1. python:实现图像去雾算法(附完整源码)

    python:实现图像去雾算法 import cv2import mathimport numpy as npdef DarkChannel(im,sz):b,g,r = cv2.split(im)d ...

  2. 按复杂度有效性递减排序_十大经典排序算法:python源码实现,通俗深入讲解

    概述 提示:本文上万字,陆陆续续疏理知识点加测试代码,耗时近一个月.阅读时长40分钟左右. 本文将十大经典排序算法进行汇总,从源码实现.复杂度.稳定性进行分析,并对每种排序的特性进行点评.对典型算法, ...

  3. python目标识别算法_深度学习目标检测系列:一文弄懂YOLO算法|附Python源码

    摘要: 本文是目标检测系列文章--YOLO算法,介绍其基本原理及实现细节,并用python实现,方便读者上手体验目标检测的乐趣. 在之前的文章中,介绍了计算机视觉领域中目标检测的相关方法--RCNN系 ...

  4. 深度学习目标检测系列:一文弄懂YOLO算法|附Python源码

    在之前的文章中,介绍了计算机视觉领域中目标检测的相关方法--RCNN系列算法原理,以及Faster RCNN的实现.这些算法面临的一个问题,不是端到端的模型,几个构件拼凑在一起组成整个检测系统,操作起 ...

  5. 多目标遗传优化算法nsga2求解复杂约束问题【python源码实现,实数编码】

    效果图如下: 提示:专栏解锁后,可以查看该专栏所有文章. 文章目录 一.必备知识 二.nsga2(遗传算法为实数编码) 2.1 有规则的例子 2.2 没有规则的例子 总结 一.必备知识 十分钟了解完多 ...

  6. Python实现朱利亚集算法及完整源码

    Python实现朱利亚集算法及完整源码 朱利亚集是一种数学图形,它的形态多变,美丽而神秘.在计算机绘图领域,朱利亚集被广泛应用,并因此成为了数字艺术的重要组成部分. 在本文中,我将向大家介绍如何使用P ...

  7. 多目标遗传优化算法nsga2求解复杂约束问题【python源码实现,二进制编码】

    前言 本文讲解多个输入情况下,多目标复杂约束问题.示例问题.Pareto解分布.代码量见下图 提示:专栏解锁后,可以查看该专栏所有文章.划算. 文章目录 前言 一.必备知识 二.多目标遗传优化算法求解 ...

  8. 【图像增强】基于matlab萤火虫算法图像对比度增强【含Matlab源码 2142期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像增强]基于matlab萤火虫算法图像对比度增强[含Matlab源码 2142期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  9. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

最新文章

  1. python批量读取csv文件-Python读取/批量读取文件
  2. Android下NDK开发环境搭建
  3. cad绘制椭圆的方法有几种_你还在头疼CAD系统变量如何设置?这些你知道几个吗?...
  4. 【Java】 5.7 多态
  5. Authentication和Authorization的区别
  6. 关于c# .net爬虫
  7. MATLAB 在一个数组中随机选择n个数
  8. java笔记--重定向输出流实现程序输出到日志
  9. Mac查看Python安装路径和版本
  10. mysql explain预估剖析
  11. 时序图如何表现分支_【Video Recognition】在视频分类任务中如何高效使用3D卷积...
  12. WideString 和 string区别
  13. vscode 清空缓存_如何清除Visual Studio Code的TypeScript的intellisense缓存?
  14. 不是所有的U盘都能作为启动盘
  15. SpringBoot 根据条件注入需要的 Bean
  16. ganglia不能获取gpu_免费试用亚马逊云服务器进行深度学习实验:免环境配置/GPU支持...
  17. 方框加对勾怎么输入_word里如何往方框中加对号?带方框的对号怎么弄,原来是这样的...
  18. Unity3D脚本中文系列教程(八)
  19. 微信早安推送,26都要骗,笑死了
  20. java两个字符串相等却总返回false

热门文章

  1. python手机版下载-QPython下载
  2. linux语音识别_linux语音识别 arm_linux 语音识别引擎 - 云+社区 - 腾讯云
  3. 百度长语音识别免费开放 大幅提升语音转写效率
  4. SpringBoot 整合swagger3.X
  5. 【Servlet笔记】Servlet入门
  6. LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化
  7. python实现网站测速软件_python实现网站友情链接查询与网站死链接查询的两个脚步...
  8. K8S 使用 SideCar 模式部署 Filebeat 收集容器日志
  9. Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4
  10. 如何保证 RocketMQ 不丢失消息