Как улучшить изображение с грубыми горизонтальными линиями с помощью OpenCV?

У меня есть такое изображение с грубыми горизонтальными линиями, и я хочу удалить его или, по крайней мере, сделать эти линии невидимыми.

Как улучшить изображение с грубыми горизонтальными линиями с помощью OpenCV?

Используя технику сглаживания, такую ​​как Gaussian Blur, я не смог получить удовлетворительный результат, поскольку линии все еще видны, и это просто снижает разрешение изображения.

cv::GaussianBlur(image, result, cv::Size(5, 5), 3);

Как улучшить изображение с грубыми горизонтальными линиями с помощью OpenCV?

Есть ли другой метод, более подходящий для моей проблемы? Спасибо

Мы говорим о горизонтальных линиях или о диагональных? Если диагональные тонкие, они могут исчезнуть после медианного фильтра. Горизонтальные линии: вам придется размыть больше, возможно, только в вертикальном направлении.

user9400869 22.05.2019 07:15

@generic_opto_guy горизонтальная линия, я отредактирую свой вопрос, спасибо. Как размыть только по вертикали?

gameon67 22.05.2019 07:15

@gameon67 Вы можете изменить размер ядра, например. используйте cv::GaussianBlur(image, result, cv::Size(1, 15), 0). Здесь размытие в направлении x опущено, а размытие в направлении y увеличено. Я думаю, это то, что хотел предложить другой комментатор.

HansHirse 22.05.2019 07:37

Используйте детектор горизонтальных краев и разделите изображение на изображение края. Это ослабит горизонтальные линии изображения. (Вы можете умножить постоянное значение на результирующее изображение, чтобы сделать его лучше).

MH304 22.05.2019 10:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
4
534
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Как предложил @gameon67, вы можете использовать размер ядра 1x15, чтобы увеличить размытие в направлении y и опустить в направлении x. Однако я считаю, что в этом случае усредненная фильтрация лучше подходит, чем фильтрация по Гауссу. Подробнее о них можно прочитать в официальном документация.

img = cv2.blur(img,(1, 15)) # average filtering

average filtering result

img = cv2.GaussianBlur(img, (1, 15), 0) # Gaussian filtering

gaussian filtering result

Я пробовал, и среднее размытие лучше для этого случая. Спасибо!

gameon67 24.05.2019 09:00

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