計算機視覺Nanodegree筆記(一

計算機視覺Nanodegree筆記(一

計算機眼中的圖片

簡單來講,對於計算機而言,圖像就是一個填滿了像素值的矩陣。黑白圖像也稱為二值圖,像素值【0,1】,0是黑色,1為白色。灰度圖每個像素取值在【0,255】同樣0為黑色,值越大亮度越高,255為白色。RGB圖像有三個通道,每個通道對應一個值在【0,255】的矩陣。

(以下三個圖片,均來自優達計算機視覺納米學位課程練習)

灰度圖的每個像素取值在【0,255】之間。

由此,我們可以將圖像看做是一個函數,比如灰度圖:f(x,y)。那麼我們就可以對圖像進行一些運算操作。

圖片來自www.cs.cornell.edu/courses/cs6670/2011sp/lectures

圖片來處https://www.cs.cornell.edu/courses/cs6670/2011sp/lectures/lec02_filter.pdf

此外,色彩做為圖像的一個特徵可以用於圖像分割或者提供重要特徵信息,比如識別交通信號燈或指示牌。但在有一些任務中我們可以完全依靠灰度圖來解決問題。比如識別圖像中的行人或車輛。

Pipline:適用於一般CV任務

(圖片來自優達課程內容)

圖像處理

同數據分析一樣,分析圖像前,同樣需要對圖像做一些處理。基本思路就是減少噪音對物體識別的干擾,增強識別目標的特徵(如銳化、色彩增強)。(以下每種方法不是必須的,根據任務可選擇)

  • 標準化輸入圖像,比如統一調整為600x600(HxW)大小的圖像。
  • 灰度化:根據需求,通常一些圖像分割演算法需要先轉為灰度圖。
  • 改變色彩空間。比如 RGB -> HSV 這麼處理的好處是Hue通道不受光照條件的影響,當待識別物體分別出現在陰影或強光下,通過H通道就能很好的識別出來。

  • 降噪,可以理解為去除圖像中無關或者干擾的信息。首先圖像同聲音也是有頻率變化的,這個可以簡單的理解為相鄰的像素值沿某個方向的變化,如果強烈為高頻,反之低頻。通常一張圖像同時包含這兩種頻率組件。比如,下面圖像的藍色方框從背景中採樣的部分屬於低頻,而紅色方框採樣的部分屬於高頻。此外,我們還可以看出人物與背景交接的地方變化也非常強烈,因此這種高頻信息可以幫助我們來檢測物體邊緣輪廓。我們可以通過過濾器或者形態學方法來實現。

(圖片來自優達課程)

卷積過濾器

我們先看下卷積的計算過程:定位一個像素,根據filter大小取周圍像素值並用其與filter的內積來替換該像素位置的值。這個過程其實就是用一個像素及周圍的像素的線性組合來取代原來的值。而這個filter決定了組合的方式。換句話講其實就是通過卷積操作來近似某個函數,比如後面遇到的高斯、拉普拉斯,實現圖像轉換的目的。

如果接觸過CNN對filter一定不陌生,它還有其它叫法,比如kernel,mask。這裡介紹的filter其實就是CNN的基礎,這裡的權重矩陣是根據目的設置的,而CNN中是模型在訓練中自學習的。此外我們在CNN中還會對卷積結果進行非線性處理,來提升模型的學習能力。

上面說圖像的兩種頻率,那麼對應的過濾器也有兩種,高通過濾器(high-pass filter:HPF)和低通(low-pass filter:LPF)。在進一步細節化前,先大致了解一下這兩種過濾器的用處。HPF可以強化高頻率的部分,通常這些filters可以捕捉圖像中的一些模式特徵過濾掉無關信息來實現邊緣檢測。LPF則多用來降噪,一般在進行HPF前,會先用LPF對圖像做降噪處理。

接下來逐個介紹課程中出現的filter以及如何實現邊緣檢測的。

1.LPF

  • 均值filter

計算過程如下,結果是85,比原本中心位置的40要亮一些。

圖片來自優達教程

從下圖可以直接看出這個filter的效果。對比可以看出背景的雜訊被模糊掉了,這裡用了9x9的filter,可以看出,我們需要的輪廓也被模糊了。

  • Gaussian Blur

高斯函數(2個維度),這裡x,y代表的是像素的坐標位置。高斯filter就是用離散化kernal近似這個連續函數。

G(x)=frac{1}{{2pi sigma^{2}}}e^{-frac{x^{2}+y^{2}}{2sigma^{2}}}

圖片來源:http://dev.theomader.com/gaussian-kernel-calculator/

下圖是常用的3x3高斯filter,中心點的位置對應坐標(0,0)。filter越大模糊的面積也越大。

圖片來自優達課程

接下來先看下效果。同樣使用9x9 kernal。與均值過濾相比,減少背景雜訊的同時,很好的保留了物體的邊緣信息。

sigma是一個可調參數。當sigma過小效果較弱,當sigma過大退化為均值模糊。這裡我截取了考拉一隻眼睛,這樣用較小的filter就可以實現下圖的效果。

2.HPF

高通filter用來銳化圖片強調圖片中高頻部分,也就是相鄰像素髮生急劇變化的區域。通常在使用低通如高斯模糊後使用。這裡權重相加為0處理是為了不改變原圖的亮度信息。下面這個filter就是常用的一種Laplacian filter,與之後遇到的sobal不同,它是基於零交叉搜索的方法,通過計算圖像函數的二階導數來尋找邊緣。

圖片來自優達課程

Laplacian公式:

L(x,y) = frac{partial^{2}I}{partial x^{2}}+frac{partial^2I}{partial y^2}

接下來分別在原圖及經過高斯模糊處理的圖片上進行高通過濾。右圖是沒有經過降噪處理直接做邊緣檢測,背景的雜訊也被filter強化。這就是為什麼通常我們要在這一步前先降噪。

Sobel filter

這種filter常用於邊緣檢測和模式特徵識別,它是計算近似圖像梯度的一種filter。因此,我們有兩種sobel filter,分別用於檢測水平和垂直方向上的變化。經過卷積操作我們可以分別得出x和y方向上的變化量,同時可以進一步求出梯度的方向

圖片來自優達課程

計算公式如下:* 為卷積運算

A = image;M = magnitude ;Theta=direction:

G_{x} = S_{x} ast A ; G_{y} = S_{y} ast A

M_{x} = sqrt{G_{x}^{2}}; M_{y} = sqrt{G_{y}^{2}} ;M_{xy} = sqrt{G_{x}^{2}+G_{y}^{2}}

Theta = atan(frac{G_{x}^{2}}{G_{y}^{2}})

經過sobel filter過濾的效果:

如下圖,在X方向的梯度可以幫助檢測接近垂直的邊緣,Y方向的可以檢測接近水平方向的邊緣。

到目前為止已經實現了簡單的邊緣檢測,邊緣檢測並不像這篇筆記里的例子這麼簡。現實中我們會遇到很多背景複雜或者受光線影響而很難識別出物體的輪廓的圖片,因此我們可能需要其它方法來解決這個問題。


推薦閱讀:

[計算機視覺論文速遞] 2018-04-28
CVPR 2018視頻分析論文關注
從RTX&DXR看圖形學的發展
計算機視覺部分演算法最佳解釋
skimage例子學習(七)filters模塊介紹之邊緣檢測的實現

TAG:計算機視覺 | 筆記 | 機器學習 |