当前位置: 首页 > article >正文

python(scipy)实现填充孔洞的方法(非常类似于MATLAB的imfill)

填充二值图像的孔洞是一个非常常见的方法,因为某些原因我不得不用python来写我的程序,当我想要使用类似于MATLAB 中的imfill 方法时, 我最初发现的是opencv 中的cv2.floodFill 的方法,其实现的过程有点麻烦,而且实现的效果不尽人意。在意外中发现scipy库已经实现了填充孔洞的方法,而且实现的过程如同MATLAB那样的简洁。

1、使用Matlab 的imfill 进行填充图像

imfill是matlab的一个函数,在http://www.mathworks.cn/cn/help/images/ref/imfill.html 中有详细的讲解。

简单的举例:

clc;
clear;
BW = im2bw( imread('imfilltest.tif'));
imshow(BW);
holes = imfill(BW, 'holes');BW(~holes) = 1; 
figure,imshow(holes);

2、使用python-opencv实现孔洞的填充

这个方法也不多fei话,直接上实现的代码

im_floodfill = mask.copy()
maskS = np.zeros((imgClean.shape[0] + 2, imgClean.shape[1] + 2), dtype=np.uint8)
cv2.floodFill(im_floodfill, maskS, (0, 0), 255)  # 核心代码
im_floodfill_inv = cv2.bitwise_not(im_floodfill)
im_out = mask | im_floodfill_inv

3、使用python(scipy)中的scipy.ndimage.binary_fill_holes来填充孔洞

这个方法跟MATLAB的imfill一样简洁方便。官网见链接

语法:

scipy.ndimage.binary_fill_holes(input,structure=None,output=None, origin=0)

参数说明:

  • input:待填充的二值图像
  • structure:用于计算的结构元素。大尺寸的元素可以使计算速度更快,但可能会漏掉与背景被薄区域隔开的洞。默认元素(具有等于1的方形连通性)会产生直观的结果,其中输入中的所有孔都已填充。
  • output:已经填充的输出结果
  • origin:结构元素的位置。

举例说明:

from scipy import ndimagea = np.zeros((5, 5), dtype=int)
a[1:4, 1:4] = 1
a[2,2] = 0
a
# array([[0, 0, 0, 0, 0],
#        [0, 1, 1, 1, 0],
#        [0, 1, 0, 1, 0],
#        [0, 1, 1, 1, 0],
#        [0, 0, 0, 0, 0]])ndimage.binary_fill_holes(a).astype(int)
# array([[0, 0, 0, 0, 0],
#        [0, 1, 1, 1, 0],
#        [0, 1, 1, 1, 0],
#        [0, 1, 1, 1, 0],
#        [0, 0, 0, 0, 0]])# Too big structuring element
ndimage.binary_fill_holes(a, structure=np.ones((5,5))).astype(int)
# array([[0, 0, 0, 0, 0],
#        [0, 1, 1, 1, 0],
#        [0, 1, 0, 1, 0],
#        [0, 1, 1, 1, 0],
#        [0, 0, 0, 0, 0]])
http://www.lryc.cn/news/2415603.html

相关文章:

  • TLP521中文资料
  • windows 钩子原理及应用
  • java画图_Java实现的简单画图板示例
  • MIDP2.0中对图片象素级处理(2)
  • 80个让你笑爆肚皮的程序员段子,不好笑算我输!
  • c/c++高质量编程
  • iOS开发笔记之五——Xcode 6.0 Beta编译工程时可能遇到的问题及参考解决方案
  • A 驾驶员辅助系统开发的基础2
  • LCD液晶显示屏工作原理
  • 冯·诺伊曼结构(英語:),也称馮·紐曼模型(Von Neumann model),是一种将程序指令存储器和数据存储器合并在一起的電腦設計概念结构。
  • Adobe Dreamweaver所有版本的序列号
  • 机架服务器 远程电源管理 备忘
  • 史上最详细SharePoint 2010安装步骤图解新手教程
  • Android 学习指南
  • Windows Media Player Real Player ActiveX 属性及方法
  • Computer Graphics From Scratch - Chapter 5
  • 新的UnityAnswers社区站点
  • 13个免费资源网站,你想要的全都有!【各类宝藏资源,建议收藏】
  • wordpress友联_一段代码开启WordPress友情链接管理
  • TM2008 Preview体验
  • 初学者一定要看!Perl 语言入门学习
  • web服务IIS服务器搭建
  • 度量空间
  • Eclipse 3.4+MyEclipse 6.01+MyEclipse 6.5+MyEclipse 6.01注册机+Eclipse汉化包官方下载地址
  • Python之Pandas中Series、DataFrame实践
  • OpenCV学习笔记(二):读取mnist数据集
  • 个人DIY一套全智能机器人基本流程
  • kindeditor在php中的使用,PHP中使用kindeditor
  • 微信小程序实现简单的树形选择控件------treeSelect
  • 干啥啥不行,摸鱼第一名