(转载)计算机视觉、图像处理中常见的滤波操作
前言:計(jì)算機(jī)視覺是讓計(jì)算機(jī)理解圖像與視頻,本系列博客的目的在于加深自己在學(xué)習(xí)計(jì)算機(jī)視覺過程中對(duì)相關(guān)知識(shí)理解與回顧。其中很多內(nèi)容參照:教材《ComputerVision: Algorithms and Applications》,教材《Learning Image Processing with OpenCV》工具書《LearningOpenCV》,國(guó)外大學(xué)的課程《Computer Vision》和課程《ComputerVision》。
圖像濾波既可以在實(shí)域進(jìn)行,也可以在頻域進(jìn)行。圖像濾波可以更改或者增強(qiáng)圖像。通過濾波,可以強(qiáng)調(diào)一些特征或者去除圖像中一些不需要的部分。濾波是一個(gè)鄰域操作算子,利用給定像素周圍的像素的值決定此像素的最終的輸出值。(個(gè)人認(rèn)為《LearningImage Processing with OpenCV》中這一段寫的很好:Image filtering is a process to modify or enhance images.Emphasizing certain features or removing others in an image are examples ofimage filtering. Filtering is a neighborhood operation. The neighborhood is aset of pixels around a selected one. Image filtering determines the outputvalue of a certain pixel located at a position (x,y) by performing someoperations with the values of the pixels in its neighborhood.)圖像濾波可以通過公式:
進(jìn)行計(jì)算,其中K為濾波器,在很多文獻(xiàn)中也稱之為核(kernel)。常見的應(yīng)用包括去噪、圖像增強(qiáng)、檢測(cè)邊緣、檢測(cè)角點(diǎn)、模板匹配等。其中用于平滑圖像的常見濾波算子包括(Code:https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/ImgProc/Smoothing.cpp):
均值濾波(normalized box filter):用其像素點(diǎn)周圍像素的平均值代替元像素值,在濾除噪聲的同時(shí)也會(huì)濾掉圖像的邊緣信息。在OpenCV中,可以使用boxFilter和blur函數(shù)進(jìn)行均值濾波。均值濾波的核為:
高斯濾波(Gaussian filter):高斯濾波為最常用的濾波器,具有可分離性質(zhì),可以把二維高斯運(yùn)算轉(zhuǎn)換為一維高斯運(yùn)算,其本質(zhì)上為一個(gè)低通濾波器。在OpenCV中可通過函數(shù)GaussianBlur進(jìn)行操作。
中值濾波(median filter):中值濾波用測(cè)試像素周圍鄰域像素集中的中值代替原像素。中值濾波去除椒鹽噪聲和斑塊噪聲時(shí),效果非常明顯。在OpenCV中,可以使用函數(shù)medianBlur進(jìn)行操作。
雙邊濾波(bilateral filter):雙邊濾波在平滑圖像時(shí)能夠很好的保留邊緣特性,但是其運(yùn)算速度比較慢。在OpenCV中,可以使用函數(shù)bilateralFilter進(jìn)行操作。
除了平滑去噪,圖像銳化,求邊緣等也是常見的圖像濾波應(yīng)用。這類濾波器常常使用一節(jié)或者二階差分(或微分,對(duì)于數(shù)字圖像而言,其為離散信號(hào),長(zhǎng)用差分代替導(dǎo)數(shù))核算子對(duì)圖像進(jìn)行濾波。一節(jié)差分常用于求取圖像邊緣。二階差分常用于圖像增強(qiáng)。常用的這類算子包括:
Sobel operator:Sobel算子通過計(jì)算水平和垂直方向上的一節(jié)差分來進(jìn)行計(jì)算。在OpenCV函數(shù)中,可通過使用Sobel函數(shù)進(jìn)行計(jì)算。
Laplacian operator:Laplacian算子通過計(jì)算二階差分(微分)來進(jìn)行計(jì)算。在OpenCV函數(shù)中,可通過使用Laplacian函數(shù)進(jìn)行計(jì)算。
除了上面列舉的較為經(jīng)典的濾波器(或者說是核算子)外,在OpenCV中也可以自己定義自己的濾波器,然后使用filter2D函數(shù)進(jìn)行運(yùn)算。
對(duì)于以上在實(shí)域進(jìn)行濾波的濾波器來說,邊界問題是一個(gè)不得不考慮的事情。通常有以下幾種辦法來進(jìn)行處理:
(black) (wrap around) (copy edge) (reflectacross edge)
除了在實(shí)域進(jìn)行濾波之外,在頻域也可以進(jìn)行濾波。傅里葉變換保存每個(gè)頻率對(duì)于的幅度和相位信息,其中幅度表示在某個(gè)特定的頻率信號(hào)有多少信號(hào)。相位則表示信號(hào)的空間信息,主要指方向信息。
在頻域中濾波主要就是設(shè)計(jì)相應(yīng)的低通、高通或者帶通等濾波器以實(shí)現(xiàn)保留某些頻率,濾除其余頻率的目的。此外在實(shí)域中的卷積運(yùn)算可以放到頻域中做乘積運(yùn)算,可以降低運(yùn)算復(fù)雜度。
總結(jié)
以上是生活随笔為你收集整理的(转载)计算机视觉、图像处理中常见的滤波操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vb6.0服务器组件安装失败,win10
- 下一篇: taylor+swift纽约公寓_国际巨