Фильтры в OpenCV. MedianBlur и Bilateral — TechCave

Оглавление Линейные фильтры изображения В предыдущей статье мы рассмотрели фильтры Homogeneous (Однородное) сглаживание и Gaussian (Гаусово) сглаживание Homogeneous (Однородное) сглаживание Gaussian сглаживание Median сглаживание Bi

Фильтры в OpenCV. MedianBlur и Bilateral

OpenCV/Обработка и распознавание изображений

Фильтры в OpenCV. MedianBlur и Bilateral

Оглавление

Линейные фильтры изображения

В предыдущей статье мы рассмотрели фильтры Homogeneous (Однородное) сглаживание и Gaussian (Гаусово) сглаживание



  • Homogeneous (Однородное) сглаживание
  • Gaussian сглаживание
  • Median сглаживание
  • Bilateral (Двустороннее) сглаживание

В этой главе мы рассмотрим остальные два фильтра: Median сглаживание и Bilateral (Двустороннее) сглаживание.

Вот изображение, который мы использовали ранее:

Median фильтр

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

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>

using namespace cv;

int main(int argc, char** argv)
{
   namedWindow("Before" , CV_WINDOW_AUTOSIZE);

   // Load the source image
   Mat src = imread( "../data/zebra.jpg", 1);

   // Create a destination Mat object
   Mat dst;

   // display the source image
   imshow("Before", src);

   for (int i=1; i<51; i=i+2)
   { 
      // smooth the image in the "src" and save it to "dst"
      // blur(src, dst, Size(i,i));

      // Gaussian smoothing
      // GaussianBlur( src, dst, Size( i, i ), 0, 0 );

      // Median smoothing
      medianBlur( src, dst, i );

      // show the blurred image with the text
      imshow( "Median filter", dst );

      // wait for 5 seconds
      waitKey(5000);
   }
}

Синтаксис medianBlur() выглядит следующим образом:

void medianBlur(InputArray src, OutputArray dst, int ksize)

src — входное 1-, 3- или 4-канальное изображение, когда ksize 3 или 5, глубина изображения должна быть CV_8U, CV_16U или CV_32F, для больших размеров апертуры, это может быть только CV_8U.

dst - вывод изображения того же размера и типа как и src.

ksize — линейный размер апертуры, он должен быть нечетным и больше 1, например: 3, 5, 7 ...

В нашем коде, размер ядра мы увеличиваем с 1x1 до 49x49. Мы видим сгоаживание изображения при увеличении размера ядра.

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.12)

project(median_filter)

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(median_filter main.cpp)
target_link_libraries(median_filter ${OpenCV_LIBS})

Ссылка на Github

Bilateral (Двустороннее) сглаживание

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

Вот код, который использует Bilateral (Двустороннее) сглаживание:

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>

using namespace cv;

int main(int argc, char** argv)
{
   namedWindow("Before" , CV_WINDOW_AUTOSIZE);

   // Load the source image
   Mat src = imread( "../data/zebra.jpg", 1);

   // Create a destination Mat object
   Mat dst;

   // display the source image
   imshow("Before", src);

   for (int i=1; i<51; i=i+2)
   {
      // Bilateral smoothing
      bilateralFilter( src, dst, i, i*2, i*2 );

      //show the blurred image with the text
      imshow( "Bilateral filter", dst );

      //wait for 5 seconds
      waitKey(5000);
   }
}

 Синтаксис bilateralFilter():

void bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT )

Параметры:

src — исходное изображение 8-битное или с плавающей точкой, 1-канальное или 3-канальное.

dst — выходное изображение того же размера и типа как и src.

d — диаметр каждого пикселя окрестности, которая используется в процессе фильтрации. Если значение не является положительным, оно вычисляется из sigmaSpace.

sigmaColor — сигма фильтр в цветовом пространстве.

sigmaSpace — сигма фильтр  в координатном пространстве.

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.12)

project(bilateral_filter)

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(bilateral_filter main.cpp)
target_link_libraries(bilateral_filter ${OpenCV_LIBS}

Ссылка на Github

Оглавление

13:29
8111

Нет комментариев. Ваш будет первым!

Авторизация

Пользователи

Keyleas
Kirby
Имя Фамилия
lunchcalllina1978
Sever
stopresniebots1983
tekino
templide
Seangle