Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 自适应阈值二值化:去除重影对象的后处理_Image Processing - Fatal编程技术网

Image processing 自适应阈值二值化:去除重影对象的后处理

Image processing 自适应阈值二值化:去除重影对象的后处理,image-processing,Image Processing,有人知道从二值化图像中删除重影对象的后处理算法吗?问题是: 当我使用例如niblack方法或bernsen对图像进行二值化时, 它产生许多噪音。我读过关于二值化的红皮书或网络文章,他们都说Niblack和other的二值化方法需要后处理步骤, 但他们没有说这是什么,后处理操作。所以,如果有人知道,请告诉我。 编辑: 原始图像: Bernsen阈值winsize 31,对比度差15: Bernsen阈值winsize 31,对比度差31: 尼布拉克法窗口尺寸-15,k_值0.2: 尼布拉克

有人知道从二值化图像中删除重影对象的后处理算法吗?问题是: 当我使用例如niblack方法或bernsen对图像进行二值化时, 它产生许多噪音。我读过关于二值化的红皮书或网络文章,他们都说Niblack和other的二值化方法需要后处理步骤, 但他们没有说这是什么,后处理操作。所以,如果有人知道,请告诉我。 编辑: 原始图像:

Bernsen阈值winsize 31,对比度差15:

Bernsen阈值winsize 31,对比度差31:

尼布拉克法窗口尺寸-15,k_值0.2:

尼布拉克法窗口大小-31,k_值0.2:

编辑2: 正如您所看到的,Niblack阈值产生了许多噪声。 如果我把窗户缩小一些,里面的黑色方块会变成一点白色。 Bernsen更好-噪音更小,但即使我使对比度差异更大, 但有一个问题,我现在无法制作图像,换句话说,就是这个问题: 如果图像包含一些颜色接近白色的对象,且背景为白色, 因此,如果有一个区域(例如,直线)为黑色,则此方法会忽略对象,结果是错误的。 这是因为Bernsen方法使用以下公式: 在每个像素处计算对比度差 差异=最大灰度值-最小灰度值 然后用差值来计算阈值, 但在我上面写的例子中,我们的最大值是255 最小值为0。 所以阈值是128, 但实际对象颜色高于128(接近白色)

所以我需要使用一些后处理操作来正确地进行二值化。
有什么想法吗?

使用K-means完成Python程序,K-means是一种用于寻找最佳量化间隔的工具:

from scipy.misc import imread, imsave
def kmeans(file_in, file_out, maxiter):
    X = imread(file_in)
    thresh = X.mean()
    for iter in range(maxiter):
        thresh = (X[X<thresh].mean() + X[X>=thresh].mean())/2.0
    X[X<thresh] = 0
    X[X>=thresh] = 255
    imsave(file_out, X)
    return X, thresh
从scipy.misc导入imread,imsave
def kmeans(文件输入、文件输出、最大值):
X=imread(文件\u in)
thresh=X.平均值()
对于范围内的iter(maxiter):
thresh=(X[X=thresh].mean())/2.0
X[X=thresh]=255
imsave(文件输出,X)
返回X,脱粒
在每次迭代中,K-means计算每个“簇”的中心,然后根据重新计算的中心将元素重新分配给簇。在每个元素(即像素)为一维且仅需要两个簇的简单情况下,阈值仅为两个簇中心的平均值

我应该补充一点,这种方法适用于您发布的示例图像,但可能不适用于其他图像(例如您在另一个问题中发布的图像)。但如果没有进一步的信息,我认为这个解决方案是可行的

输出:


听起来你的问题真的是一个细分问题。。。你所拍摄的图像类型是什么


顺便说一句,我如何评论这个问题而不是回答它?

这个问题可能已经过时了,但是对于那些仍然找不到答案的人来说,在这些情况下应该使用的方法,即对于快速变化的背景图像,不是局部灰度阈值,而是局部特征阈值,它不是用局部灰度来分析图像,而是用笔划宽度法。你可以在网上查找。

请查看示例图片!(二值化前后)。根据这一点,可能需要一些形态学清理。我添加了图像,以后会对它们进行更多的注释,现在我添加了更多的信息,方法实现是正确的,但是这里的问题是什么,应该做些什么来更好地进行二值化?似乎该算法的行为类似于全局阈值,但是如果我决定对全局阈值错误的其他图像进行二值化怎么办?是的,那么您可能需要其他东西。我只是以给定的图片作为例子来回答这个问题,在这种情况下,我的解决方案是有效的。好的,我有一个想法,但不确定速度和想法本身。因此,如果通过某种算法,我们可以得到一个数字N,表示在某幅图像中我们需要多少簇,然后使用K-Means算法,得到的不是二值化的,而是类似于分割图像的,片段的数量是N。实际上,在这种情况下,片段指的是像素属于某个区域的区域。因此,我们可以使用更简单的图像。下一步可以是二值化,我认为这比以前容易,或者单独使用这些片段。那么你能告诉我你认为它会起作用吗?在我的例子中,K-均值不是用来计算阈值的,而是用来分割的。对,我也考虑过同样的事情。但这种解决方案——使用K-均值进行空间分割——的鲁棒性要差得多。找到N并不容易。在寻找N的过程中,如果你能做到这一点,你很可能也找到了集群本身。你所说的图像类型是什么意思?它们是由相机在不同条件下制作的,如照明不均匀等。有一个文本和Niblack被认为是处理文本图像最好的方法之一,但它非常嘈杂。这个问题有一个添加评论按钮,你可以在问题的底部看到它。在已经发布的评论下面。我所说的类型是:它们是合成纹理、生物图像等。每一种都有非常不同的解决方法。有些人擅长频域解决方案,而另一些人擅长基于几何的解决方案。它还取决于各种其他因素。。。如色彩平衡、径向失真等。