Адаптивная пороговая бинаризация: постобработка для удаления объектов-призраков - PullRequest
4 голосов
/ 02 марта 2010

Кто-нибудь знает об алгоритмах постобработки для удаления объектов-призраков из бинаризованного изображения? Эта проблема: Когда я бинаризирую изображение, используя, например, метод niblack или Бернсена, это производит много шума. Я пишу в Красной книге или в Интернете статьи о бинаризации, и все они говорят, что в Niblack и других методах бинаризации необходим шаг постобработки, Но они не говорят, что это, операция постобработки. Поэтому, пожалуйста, если кто-то знает, скажи мне. РЕДАКТИРОВАТЬ: Исходное изображение:

альтернативный текст http://i.piccy.info/i4/20/63/b970ab2ca66e997f421e969a1657.bmp

пороговое значение Бернсена 31, разность контрастов 15:

альтернативный текст http://i.piccy.info/i4/32/55/2f1e0293311119986bd49529e579.bmp

пороговое значение Бернсена 31, разность контрастности 31:

альтернативный текст http://i.piccy.info/i4/2a/13/774508890030b93201458986bbd2.bmp

Размер окна метода Niblack-15, k_value 0.2:

альтернативный текст http://i.piccy.info/i4/12/4f/fa6fc09bcba7a7e3245d670cbfa5.bmp

Niblack метод size-31, k_value 0.2:

альтернативный текст http://i.piccy.info/i4/c0/fd/1f190077abba2aeea89398358fc0.bmp

EDIT2: Как видите, порог Niblack создает много шума. И если я уменьшу размер окна, черные квадраты станут немного белыми внутри. Чем лучше Бернсен - меньше шума, но даже если я увеличу контраст, но есть одна проблема, я просто не могу создать изображение прямо сейчас, на словах, проблема: если изображение содержит объекты с цветом, близким к белому, и фон белый, так что если есть область (для линии теста) с черным цветом, то этот метод игнорирует объекты, и результат неверен. Это потому, что метод Бернсена использует эту формулу: на каждом пикселе рассчитывают разницу контрастности diff = Maximum_grayscale_value --imum_grayscale_value а затем разница используется для расчета порогового значения, но в случае, который я написал выше, мы имеем максимальное значение 255 и минимальное значение 0. Таким образом, порог будет 128, Но фактический цвет объекта выше 128 (почти белый цвет).

Так что мне нужно использовать некоторые операции постобработки для правильной бинаризации. Есть мысли?

Ответы [ 3 ]

2 голосов
/ 03 марта 2010

Завершите программу 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

Во время каждой итерации K-means вычисляет центр каждого «кластера», а затем переназначает элементы на основе кластеров.по пересчитанным центрам.В простом случае, когда каждый элемент (т. Е. Пиксель) является одномерным, и требуются только два кластера, порог является просто средним из двух центров кластеров.

Я должен добавить, что этот метод работает дляпример изображения, которое вы опубликовали, но не для других (например, того, которое вы опубликовали в другом вопросе).Но без дополнительной информации, я думаю, что это решение работает.

Вывод:

binary.bmp http://up.stevetjoa.com/binary.bmp

0 голосов
/ 07 ноября 2017

Вопрос может быть устаревшим, но для тех, кто все еще не может найти ответ, метод, который следует использовать в этих ситуациях, а именно с быстро меняющимися фоновыми изображениями, это НЕ Локальный уровень серого, а Локальный элемент, который анализирует изображения не локальным уровнем серого, а методом ширины мазка. Вы можете искать это в сети.

0 голосов
/ 03 марта 2010

Похоже, ваша проблема - это проблема сегментации ... какие типы изображений вы прокачиваете?

Кстати, как мне прокомментировать вопрос, а не отвечать на него?

...