Как заострить изображение в OpenCV?
Как заострить изображение с помощью OpenCV? Есть много способов сглаживания или размытия, но ни один из них я не мог видеть заточки.
5 ответов:
одна общая процедура изложена в статья Википедии о нерезкой маскировке: Вы используете гауссовский сглаживающий фильтр и вычитаете сглаженную версию из исходного изображения (взвешенным образом, чтобы значения постоянной области оставались постоянными).
чтобы получить заточенную версию
frame
наimage
: (какcv::Mat
)cv::GaussianBlur(frame, image, cv::Size(0, 0), 3); cv::addWeighted(frame, 1.5, image, -0.5, 0, image);
параметры есть то, что вам нужно настроить для себя.
есть еще лапласиан заточка, вы должны найти что-то на этом, когда вы google.
вы можете попробовать простой ядро и filter2D функция, например, в Python:
kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]]) im = cv2.filter2D(im, -1, kernel)
Википедия имеет хороший обзор ядер с некоторыми другими примерами здесь -https://en.wikipedia.org/wiki/Kernel_ (image_processing)
в обработке изображений ядро, матрица свертки или маска-это небольшая матрица. Он используется для размытия, заточки, тиснения, обнаружения краев и многое другое. Это выполняется путем выполнения свертки между ядром и изображением.
вы можете найти пример кода, о резкость изображения с помощью алгоритма "нерезкая маска" at Документация OpenCV
изменение значений
sigma
,threshold
,amount
даст разные результаты// sharpen image using "unsharp mask" algorithm Mat blurred; double sigma = 1, threshold = 5, amount = 1; GaussianBlur(img, blurred, Size(), sigma, sigma); Mat lowContrastMask = abs(img - blurred) < threshold; Mat sharpened = img*(1+amount) + blurred*(-amount); img.copyTo(sharpened, lowContrastMask);
для ясности в этой теме, несколько моментов действительно должны быть сделаны:
повышение резкости изображений является некорректно поставленной задачей. Другими словами, размытие-это операция с потерями, и возвращение от нее вообще невозможно.
чтобы заострить отдельные изображения, вам нужно каким-то образом добавить ограничения (предположения) на то, какое изображение вы хотите, и как оно стало размытым. Это область естественной статистики изображений. Подходы к делу заточка держит эти статистические данные явно или неявно в своих алгоритмах (глубокое обучение является наиболее неявно закодированными). Общий подход к повышению-взвешивание некоторых уровней a разложение пирамиды собаки или Лапласа, что является обобщением ответа Брайана Бернса, предполагает, что гауссовское размытие испортило изображение, и то, как выполняется взвешивание, связано с предположениями о том, что было в изображении для начала.
других источников информация может сделать проблему обострения хорошо поставленной. Распространенным таким источником информации является видео движущегося объекта или многовидовая настройка. Заточка в этой настройке обычно называется супер-разрешение (это очень плохое название для него, но он застрял в академических кругах). Там было методы сверхразрешения в OpenCV С давних времен.... хотя они обычно не работают так хорошо для реальных проблем, в последний раз я проверил их. Я ожидаю глубокого обучения произвел некоторые замечательные результаты и здесь. Может быть, кто-то будет размещать в комментариях о том, что стоит там.
попробуйте с помощью этого:
cv::bilateralFilter(img,9,75,75);
вы можете найти более подробную информацию здесь