一尘不染

Python 是否等效于Matlab函数“imfill”的grayscale??

python

是否有一个使用OpenCV或scikit-image的实现与Matlab的灰度图像填充功能(即灰度孔填充)等效?

请参见以下 示例链接matlab_imfill中的灰度部分(I2 = imfill(I))。或查看 图片:matlab_tire_ex
这是示例中轮胎图像的链接
我一直在尝试使用
scipy.ndimage.grey_closing函数通过改变size参数来复制Matlab输出,但是没有成功。

我正在使用Python 3.5。


阅读 363

收藏
2021-01-20

共1个答案

一尘不染

此处已在Python中实现了洪水填充算法的两个版本:

http://arcgisandpython.blogspot.de/2012/01/python-flood-fill-algorithm.html

第一个简单的变量包含两个未定义的变量,但这是一个
有效的版本:

import numpy as np
import scipy as sp
import scipy.ndimage

def flood_fill(test_array,h_max=255):
    input_array = np.copy(test_array) 
    el = sp.ndimage.generate_binary_structure(2,2).astype(np.int)
    inside_mask = sp.ndimage.binary_erosion(~np.isnan(input_array), structure=el)
    output_array = np.copy(input_array)
    output_array[inside_mask]=h_max
    output_old_array = np.copy(input_array)
    output_old_array.fill(0)   
    el = sp.ndimage.generate_binary_structure(2,1).astype(np.int)
    while not np.array_equal(output_old_array, output_array):
        output_old_array = np.copy(output_array)
        output_array = np.maximum(input_array,sp.ndimage.grey_erosion(output_array, size=(3,3), footprint=el))
    return output_array
2021-01-20