Фильтр изображения, который использует наибольшее количество значений пикселей

Я хочу использовать фильтр изображения, который должен заменить пиксель, с которым он имеет дело, с самым высоким появлением соседей. Например, если пиксель имеет значение 10, а 8 соседей имеют 9, 9, 9, 27, 27, 200, 200, 210, тогда следует выбрать 9, потому что 9 имеет наибольшее количество вхождений в окрестности. Он также должен учитывать сам пиксель. Так, например, если пиксель имеет значение 27, а 8 соседей имеют 27, 27, 30, 30, 34, 70, 120, 120, тогда он должен выбрать 27, потому что 27 присутствует 3 раза, включая сам пиксель. У меня также должна быть возможность выбрать размер ядра. Я не нашел такого фильтра. Есть ли один? Или я должен создать его самостоятельно? Я использую opencv с python.

Исходная информация: Я не могу просто использовать Медианный фильтр, потому что мои изображения отличаются. У меня есть серые изображения с от 3 до 6 различных значений серого. Поэтому я не могу использовать некоторые морфологические преобразования. Я не получаю желаемого результата. Медианный фильтр выберет медианное значение, потому что идея состоит в том, что значения представляют изображение правильным образом. Но мои изображения являются результатом kmeans, и 3-6 различных значений серого не имеют логической связи.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 162
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать модальный фильтр в беглый просмотр, пример здесь, документация здесь.


Или, если ваши потребности немного отличаются, вы можете поэкспериментировать с generic_filter() в острый (документация здесь) следующим образом:

#!/usr/bin/env python3

import numpy as np
from PIL import Image
from scipy.ndimage import generic_filter
from scipy import stats

# Modal filter
def modal(P):
    """We receive P[0]..P[8] with the pixels in the 3x3 surrounding window"""
    mode = stats.mode(P)
    return mode.mode[0]

# Open image and make into Numpy array - or use OpenCV 'imread()'
im = Image.open('start.png').convert('L')
im = np.array(im)

# Run modal filter
result = generic_filter(im, modal, (3, 3))

# Save result or use OpenCV 'imwrite()'
Image.fromarray(result).save('result.png')

Обратите внимание, что изображения OpenCV полностью взаимозаменяемы с массивами Numpy, поэтому вы можете использовать OpenCVimage = imread(), а затем вызывать функции, которые я предлагаю выше, с этим изображением.

Ключевые слова: Python, PIL, Pillow, skimage, простой фильтр, общий фильтр, среднее значение, медиана, режим, изображение, обработка изображений, numpy

Спасибо! Как только я проверю это, я отмечу ваш ответ как решение :)

Mob 30.01.2019 13:37

Другие вопросы по теме