Почему медианный фильтр scikit выдает пустое выходное изображение?

#python-3.x #scikit-image

#python-3.x #scikit-image

Вопрос:

Я пытаюсь уменьшить шум следующего изображения, используя median фильтр Scikit Image .

введите описание изображения здесь

Это изображение размером 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")

 

Результирующее изображение всегда остается пустым (полностью белым). Я уверен, что делаю что-то не так, но не ясно, где.

Есть какие-нибудь предложения?

Спасибо,

Сау

Ответ №1:

Поскольку ваше изображение почти полностью белое, медиана такого большого диска также белая.

В качестве крайнего примера представьте диск, содержащий 51% белых пикселей и 49% черных пикселей -> медиана будет белой. В вашем случае это выглядит как минимум 95% -ное доминирование белых.

Кстати, это и есть as_grey , и нет as_gray (обновление: было так, но больше нет, см. Комментарий @Juan ниже)

Комментарии:

1. Я имею в виду scikit-image.org/docs/dev/api/skimage.io.html#skimage.io.imread Вы уверены , что так и должно быть as_grey , а так и нет as_gray ? Спасибо.

2.Раньше это было as_grey , но теперь это действительно as_gray так. Мы решили использовать американскую орфографию во всей библиотеке, тогда как исторически это оставлялось на усмотрение отдельных авторов. вкусы. Кроме этого, ответ правильный: медианный фильтр даст вам черный пиксель, только если> 50% окружающих пикселей черные. Вы можете видеть, что этого никогда не произойдет на приведенном выше изображении. В вашем случае, я думаю, вам нужно будет смоделировать ваши точки данных (например, в виде синусоиды), чтобы определить соотношение шума и сигнала. Смотрите этот пример: scikit-image.org/docs/dev/auto_examples/transform /…

3. @sau001, серый цвет был просто дополнением, и благодаря Хуану я вижу путаницу. Во всяком случае, медиана должна работать, даже если это был RGB. Вы поняли мой ответ относительно того, почему у вас белое изображение?

4. @Хуан — Ты меня понял! Я действительно нахожусь на пути к использованию RANSAC. Я изучаю подход, который помогает определить любую плавную кривую в зашумленном изображении (а не только синус), запуская RANSAC на основе патча за патчем. Предположение здесь состоит в том, что любая гладкая кривая состоит из линейных сегментов. Я убежден, что когда человеческий глаз видит большую картинку, разум анализирует картинку, разбивая ее на маленькие области и извлекая основные черты, такие как линии, кривые и т.д.