【问题标题】:Why does the scikit median filter produce a blank output image?为什么scikit中值滤波器会产生空白输出图像?
【发布时间】:2021-04-09 19:40:59
【问题描述】:

我正在尝试使用Scikit Imagemedian 过滤器对以下图片进行降噪。

这是一张尺寸为 250 X 100 像素的图片。像素为黑色或白色。

dtype=uint8
shape=(100,250)
max=255
min=0

这是 Python 脚本

import os
from skimage import io
from skimage.filters.rank import median
from skimage.morphology import disk


def median_filter(inputfilename):
    folder_script=os.path.dirname(__file__)
    absolute_filename=os.path.join(folder_script,"./in/",inputfilename)

    original= io.imread(absolute_filename, as_gray=True)
    
    median_filtered=median(original, disk(50))  #5, 10, 20,100

    filename_result="median-filter-output.png"
    file_result=os.path.join(folder_script,"./out/",filename_result)
    io.imsave(file_result,median_filtered)

median_filter(inputfilename="NoisySine.png")

生成的图像始终为空白(全白)。我确定我做错了什么 - 但不清楚在哪里。

有什么建议吗?

谢谢,

【问题讨论】:

    标签: python-3.x scikit-image


    【解决方案1】:

    因为你的图像几乎是全白的,所以这么大磁盘的中位数也是白色的。

    作为一个极端的例子,想象一个有 51% 白色像素和 49% 黑色像素的磁盘 -> 中值将是白色的。在你的情况下看起来至少 95% 白人占主导地位。

    顺便说一句,它是as_grey 而不是as_gray(更新:以前是这样但现在不是了,请参阅下面的@Juan 评论)

    【讨论】:

    • 我指的是scikit-image.org/docs/dev/api/skimage.io.html#skimage.io.imread 你确定应该是as_grey 而不是as_gray 吗?谢谢。
    • 曾经是 as_grey,但现在确实是as_gray。我们决定在整个图书馆中使用美式拼写,而从历史上看,它是由个人贡献者的口味决定的。除此之外,答案是正确的:如果> 50% 的周围像素是黑色的,中值滤波器只会给你一个黑色像素。您可以在上图中看到这永远不会发生。在您的情况下,我认为您需要对数据点进行建模(例如,作为正弦曲线)以确定噪声与信号。请参阅此示例:scikit-image.org/docs/dev/auto_examples/transform/…
    • @sau001,灰色只是一个旁注,多亏了 Juan,我看到了混乱。无论如何,即使是 RGB,中值也应该可以工作。你明白我关于你为什么得到白色图像的回答吗?
    • @Juan - 你找到我了!我确实在使用 RANSAC 的路上。我正在探索一种方法,该方法通过逐个补丁地运行 RANSAC 来帮助确定噪声图像(不仅仅是正弦)中的任何平滑曲线。这里的假设是任何平滑曲线都是由线性段组成的。我相信,当人眼看到一张大图片时,大脑会通过分割成小区域并提取线条、曲线等基本特征来分析图片。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 2015-01-26
    • 1970-01-01
    • 2018-11-11
    相关资源
    最近更新 更多