導(dǎo)讀
圖像相關(guān)知識(shí)點(diǎn)匯總大全。
注:本文記錄筆者日常工作中接觸到的圖像相關(guān)知識(shí),純個(gè)人技術(shù)隨筆,不作為講解用。
圖像的組成
圖像的通道與深度
深度:將計(jì)算機(jī)中存儲(chǔ)單個(gè)像素所用的bit位,稱為圖像的深度
例如:
通道:描述一個(gè)像素點(diǎn),如果是灰度圖,只須用一個(gè)數(shù)值來(lái)表示,就是單通道。如果一個(gè)像素點(diǎn)有RGB三種顏色來(lái)描述,就是三通道,如果用RGB+alpha來(lái)描述,就是4通道
曝光:接觸光的多少
圖片的內(nèi)存大?。洪L(zhǎng)* 寬* 一個(gè)像素所占內(nèi)存的大小
一個(gè)像素所占內(nèi)存的大小,稱為色深(depth,是指一個(gè)像素用多少位表示)。例如Nokia老S40機(jī)器顏色數(shù)為4096色,即為2^12, 則一個(gè)像素所占的內(nèi)存空間為1.5個(gè)字節(jié)(一個(gè)字節(jié)8位,1.5個(gè)字節(jié),即為12位)。新S40機(jī)器顏色數(shù)位65536色,即為2^16, 則一個(gè)像素所占內(nèi)存大小為2個(gè)字節(jié)。
opencv中,RGB三個(gè)通道分別用8位表示,所以一個(gè)像素為24位(8*3=24),故一個(gè)像素占3個(gè)字節(jié)。
彩色圖像轉(zhuǎn)化為灰度圖像
人眼對(duì)綠色的敏感程度性最高,對(duì)藍(lán)色最低,所以可用加權(quán)平均法得到灰度圖像,例如:
圖像的色彩量化(減色處理)
將彩色圖像的值由256^3壓縮至4^3, 即將RGB的值只取32,96,160,224
圖像的卷積與池化:
卷積:在一個(gè)方框內(nèi),對(duì)每個(gè)像素值做“加權(quán)平均”
池化:最常見的有最大值,最小值,平均值池化(即在一個(gè)方框內(nèi),取最大值,最小值,平均值)
引申:
對(duì)于數(shù)列{a_n},{b_n},二者的卷積為(類似點(diǎn)積):
例如:
2個(gè)骰子,第一個(gè)骰子有8面:2面刻著1,1面刻著2,3面刻著3,2面刻著4.第二個(gè)骰子有6面,其中3面刻1,2面刻2,1面刻3.將2個(gè)骰子一起投一次,求點(diǎn)數(shù)之和為4的概率.
整理得到:
本題用卷積,可以很快寫出來(lái).
設(shè)第一個(gè)骰子投出n的概率為a_n,第2個(gè)骰子投出m的概率為b_m, 那么投出點(diǎn)數(shù)之和為4的概率為:
由于第2個(gè)骰子投出0的概率為0,所以b0用0代替.所以結(jié)果為:
(其實(shí)就是枚舉的思想,只不過是用卷積來(lái)建立數(shù)學(xué)模型)
色彩空間:
RGB色彩空間:
常用于圖像中,RGB3個(gè)通道,可能還要加一個(gè)alpha通道(表示透明程度),所以一個(gè)像素常用24bit或32bit來(lái)表示。
色深:用于表現(xiàn)顏色的二進(jìn)制的位數(shù)。如我們要表示8種顏色,只需要3個(gè)二進(jìn)制位,故色深為3. QBitmap的色深為1,故只能表示2種顏色,即黑與白。(通常表示維一個(gè)像素用多少位表示)
YUV色彩空間:
常用于視頻處理中,YCbCr是YUV的一個(gè)具體實(shí)現(xiàn)。
Y:代表亮度,Luminance或Luna
U,V:代表2個(gè)不同的顏色部分,通常為blue和Red,所以也稱CbCr(Chrominance或Chroma)
YUV:是對(duì)RGB重新編碼,將明度與色彩分開,因?yàn)槿搜蹖?duì)明暗變化更明暗一些。同時(shí)也是為了兼容黑白電視。Y通道就是直接輸入黑白電視(灰度圖),UV通道信號(hào)主管色彩。
HSV顏色空間
H: Hue, 色相,色調(diào), 顏色,取值范圍為[0,179]
S: Saturation, 飽和度,色彩純凈度(深藍(lán),淺藍(lán)),取值范圍為[0,255]
V: Value, 明度,亮度(光照等明暗的程度)
H為色調(diào)(即哪一種顏色),H固定,S減小,相當(dāng)于往顏色中添加白色;S增大,說(shuō)明顏色越鮮艷。V減小,相當(dāng)于往顏色中添加黑色,V為0,整個(gè)顏色呈現(xiàn)黑色
引申:
WebRTC:Web Real Time Communication,Web即時(shí)通信
FFmpeg:Fast Forward Motion Picture Experts Group,快進(jìn)動(dòng)態(tài)圖像專家組,是視頻處理最常用的開源軟件
AV:Audio& Video,音頻常見的編碼格式有mp3,aac, 視頻常見的編碼格式有h262,h264,h265
形態(tài)學(xué)操作(7種)
腐蝕:cv2.erode
膨脹:cv2.dilate
開運(yùn)算:先腐蝕,再膨脹(去毛刺)
閉運(yùn)算:先膨脹,再腐蝕
梯度運(yùn)算:膨脹-腐蝕(得到輪廓)
禮帽(tophat):原圖像-開運(yùn)算(得到毛刺)
黑帽(blackhat):閉運(yùn)算-原圖像(小的輪廓)
圖像處理(9種)
圖像轉(zhuǎn)化:轉(zhuǎn)化為灰度圖,hsv圖
二值化:cv2.threshold
平滑/濾波與梯度算子:
4. 直方圖(2個(gè)):計(jì)算直方圖,直方圖均衡化
5. 幾何操作:縮放,剪切,移位,旋轉(zhuǎn),鏡像
cv2.getAffineTransform, cv2.wrapAffine
6. 特效(6個(gè))
圖像底板(255減法)
馬賽克:用一個(gè)值來(lái)替換方框中所有的值
毛玻璃:用方框中隨機(jī)一個(gè)值來(lái)替換方框中所有的值
圖片融合:cv2.addWeighted
浮雕:相鄰兩個(gè)像素相減(突出邊緣),再加上一個(gè)恒定值,例如150
油畫:
7. 圖片美化:
直方圖均衡化
修補(bǔ)(cv2.inpaint,要用到mask)
亮度增強(qiáng)
磨皮美白(雙邊濾波)
8. 畫線條,矩形,加文字
傅里葉變換的圖像應(yīng)用:
高頻:像素值變化劇烈的地方,如邊界
低頻:像素值變化緩慢的地方,如一片大海
低通濾波器:只保留低頻,會(huì)使得圖像模糊
高通濾波器:只保留高頻,會(huì)使得圖像細(xì)節(jié)增強(qiáng)
通過傅里葉變換,可以將某一頻率圖像部分去除
直方圖均衡化:
直方圖特征:
直方圖表示的是所選圖片的灰度值分布的示意圖。X軸代表灰度值,y軸對(duì)應(yīng)相應(yīng)灰度值的像素點(diǎn)個(gè)數(shù)。
在RGB圖像中,直方圖是通過計(jì)算每個(gè)通道的灰度值得到的。
一般正常的直方圖,是中間高,兩邊低。圖像中最左邊有高度,說(shuō)明圖片上有陰影;最右側(cè)有高度,說(shuō)明圖片有高光。
均衡化原理:
屬于圖像增強(qiáng)的一種技術(shù)(可以使圖像更亮一些,可以增強(qiáng)圖像對(duì)比度),適合處理過亮或過暗的圖像。將過于集中的灰度像素分散開。
利用累計(jì)概率實(shí)現(xiàn),灰度值大的像素對(duì)應(yīng)大的累計(jì)概率
新灰度值=累積概率(每個(gè)像素會(huì)有所不同)* 灰度最大值(這個(gè)是不變的)
圖像操作代碼示例:
水平方向翻轉(zhuǎn)
以8*8圖像,一維線性表示為例
經(jīng)過觀察發(fā)現(xiàn):
第一行:0+7+1= 8 = 8 * 1 =8 * (0+1)
第一行:8+15+1= 24= 8 * 3 =8 * (1+2)
第一行:16+23+1= 40 = 8 * 5 =8 * (2+3)
。。。
分析可得:每一行首尾兩個(gè)元素相加的結(jié)果為:width* (RowIdx+RowIdx+1)-1
所以,對(duì)于一張圖像的一維表示,對(duì)其進(jìn)行水平翻轉(zhuǎn)的程序?yàn)椋?/p>
順時(shí)針方向翻轉(zhuǎn)
先轉(zhuǎn)置,再水平翻轉(zhuǎn)
圖像如果以二維表示,則轉(zhuǎn)置的操作十分簡(jiǎn)單:
Array[i] [j]=Array[j] [i]
如果圖像以一維表示(如上圖),進(jìn)行轉(zhuǎn)置操作,要先計(jì)算出行號(hào)和列號(hào)才行。
濾波:
圖像,也可以理解為各種色彩波的疊加。
常見的幾種濾波器:
方框?yàn)V波(box filter),中值濾波(median filter),均值濾波(mean filter),高斯濾波
用標(biāo)準(zhǔn)差為sigma的高斯濾波,進(jìn)行2次濾波,等于用標(biāo)準(zhǔn)差為sqrt(2)* sigma的高斯濾波進(jìn)行一次
二維高斯濾波可以轉(zhuǎn)化為2個(gè)一維高斯濾波
4. 用卷積進(jìn)行銳化的一個(gè)公式(拉普拉斯高斯)
思考:圖像可以利用卷積求取邊緣,而點(diǎn)云直接就能獲取物體的邊緣。
5. 利用卷積求導(dǎo)
patial derivative:偏導(dǎo)
圖像的梯度算子:Sobel算子,Scharr算子,Laplacian算子
6. 圖像梯度
7. 求導(dǎo)操作對(duì)于有噪聲圖像十分敏感:因此常常先去噪,再求導(dǎo)
8. 圖像金字塔(2種):
高斯濾波與其一階導(dǎo),二階導(dǎo)
高斯濾波:低通濾波,圖像變平滑,便模糊
高斯一階導(dǎo):高通濾波, Canny算子求邊緣
高斯二階導(dǎo):高通濾波,LOG算子(用于求尺度)
一階導(dǎo)可以提取圖像灰度梯度的變化情況,二階導(dǎo)可以提取圖像的細(xì)節(jié)(如何理解??),同時(shí)響應(yīng)圖像梯度變化情況。
引申:高斯函數(shù)在圖像中的應(yīng)用
一維高斯函數(shù):
不同均值,方差,振幅的高斯曲線對(duì)比:
二維高斯函數(shù)的分布(x與y兩個(gè)維度的分布,都是一維的高斯分布,因此俯視圖來(lái)看,是一個(gè)橢圓):
圖像為:
高斯分布的曲線如上圖,越靠近中心,取值越大,越遠(yuǎn)離中心,取值越小;現(xiàn)實(shí)意義是:越接近中心,影響力越大,越遠(yuǎn)離中心,影響力越小。
這樣的特性,可用于權(quán)值分配:越接近中心,權(quán)值越大,越遠(yuǎn)離中心,權(quán)值越小。
圖像的模糊:是一種計(jì)算“加權(quán)平均值”的過程
在數(shù)值上,這是一種“平滑化(smoothing)”,在圖像上,就會(huì)產(chǎn)生模糊效果,此時(shí)各個(gè)點(diǎn)的權(quán)值是一樣的,但顯然不合理,因?yàn)閳D像都是連續(xù)的,越靠近的點(diǎn)關(guān)系越密切,越遠(yuǎn)離的點(diǎn)越疏遠(yuǎn)。因此,加權(quán)平均更合理,越靠近的點(diǎn),權(quán)重越大,越遠(yuǎn)離的點(diǎn),權(quán)重越小。此時(shí)就可以用正態(tài)分布(即高斯分布)來(lái)分配權(quán)重。
高斯函數(shù)由3個(gè)參數(shù)確定:幅值(有多高),中心坐標(biāo),標(biāo)準(zhǔn)差(有多寬)
(在圖像鄰域內(nèi),還會(huì)有一個(gè)ksize,代表高斯核的大小,例如若ksize=3,則該高斯核為3*3的矩陣)
雙邊濾波Bilateral Filter: 做邊緣保存
用高斯濾波去噪,會(huì)將邊緣模糊掉,對(duì)高頻細(xì)節(jié)的保護(hù)并不明顯。
雙邊濾波:結(jié)合圖像的空間臨近度和像素值相似度的折衷方法。比高斯濾波多了一個(gè)高斯方差,在邊緣附近,離的較遠(yuǎn)的像素不會(huì)過多的影響邊緣上的像素值
卷積的作用:
引申:
梯度與方向?qū)?shù):
方向?qū)?shù)是一個(gè)數(shù),代表著沿著某一個(gè)方向的變化量
梯度是一個(gè)向量
方向?qū)?shù)達(dá)到最大時(shí),此時(shí)的方向就是梯度方向,此時(shí)的方向?qū)?shù),即為梯度的模
梯度的理解:
可理解為斜度。即曲面沿著某一個(gè)方向的傾斜程度(其實(shí)是方向?qū)?shù))
表示某一函數(shù)在該點(diǎn)處的方向?qū)?shù)沿著該方向(梯度方向)取得最大值,即該函數(shù)沿著梯度方向,變化最快(變化率最大)
在圖像領(lǐng)域中,梯度表示像素灰度值變化的速度
OpenCV相關(guān):
OpenCV庫(kù)結(jié)構(gòu):
OpenCV文件夾結(jié)構(gòu)(解壓之后,會(huì)有2個(gè)文件夾:source和build):
Souce文件夾下:
module/core:最核心的數(shù)據(jù)結(jié)構(gòu)與基本運(yùn)算
module/highgui:圖像的讀取,顯示,存儲(chǔ)等UI接口
module/imgproc:圖像處理的方法,如幾何變換,平滑。。。
feature2d:用于提取特征
nonfree:專利算法,如SIFT
objdetect:目標(biāo)檢測(cè),如人臉識(shí)別的Haar,LBP特征;基于HOG的行人,車輛等目標(biāo)檢測(cè)
stitching:圖像拼接
ml:機(jī)器學(xué)習(xí)庫(kù)
video:視覺處理,如背景建模,運(yùn)動(dòng)物體跟蹤,前景檢測(cè)
build文件夾下:
doc/opencvrefman.pdf: 函數(shù)手冊(cè)
doc/opencv_tutorials.pdf:函數(shù)使用手冊(cè)
include文件夾:OpenCV的頭文件
x86與x64文件夾:針對(duì)32位和64位的dll和lib庫(kù)
python:python API
java:java API的JAR包
OpenCV的幾何變換
仿射變換:
仿射函數(shù):最高次數(shù)為1的額多項(xiàng)式函數(shù)。常數(shù)項(xiàng)為0的仿射函數(shù)稱為線性函數(shù)。
從R^n到R^m的映射x-> Ax+b稱為仿射變換,其中A為一個(gè)m* n矩陣,b為一個(gè)m維向量。
線性變換(旋轉(zhuǎn),縮放)+平移
齊次坐標(biāo)形式為
順時(shí)針旋轉(zhuǎn)alpha角的仿射矩陣:
逆時(shí)針旋轉(zhuǎn)alpha角的仿射矩陣:
縮放矩陣:
以上都是以原點(diǎn)(0,0)為中心的。
若以任一點(diǎn)(x0,y0)為中心,逆時(shí)針旋轉(zhuǎn)alpha,則將(x0,y0)移動(dòng)到原點(diǎn),旋轉(zhuǎn)alpha后再移動(dòng)回來(lái)。仿射矩陣為:
同樣,以(x0,y0)為中心,縮小2倍的仿射矩陣為:
如果Sx與Sy相等,可直接調(diào)用OpenCV函數(shù)getRotationMatrix2D,例如如獲得以(40,50)為中心,逆時(shí)針旋轉(zhuǎn)30度縮小2倍的仿射變換矩陣:
注意:返回的矩陣A是2*3,因?yàn)榉律渚仃囎詈笠恍卸际?,0,1
計(jì)算仿射矩陣時(shí),也可以通過src和dst兩個(gè)矩陣,如:
得到仿射矩陣后,使用wrapAffine函數(shù)將該變換 作用到圖像上
投影變換:
幾種變換的區(qū)別:
剛體變換:又叫等距變換,等于平移+旋轉(zhuǎn),3個(gè)自由度(旋轉(zhuǎn)1個(gè),平移2個(gè))
剛體運(yùn)動(dòng),保證了同一個(gè)向量在各個(gè)坐標(biāo)系下的長(zhǎng)度和夾角都不會(huì)發(fā)生變化。這種變換叫做歐式變換。一個(gè)歐式變換,由一個(gè)旋轉(zhuǎn)和一個(gè)平移兩部分組成。
相似變換:剛體變換+縮放
有4個(gè)自由度,即旋轉(zhuǎn),x方向平移,y方向平移,縮放因子s
相似變換前后長(zhǎng)度比,夾角保持不變(跟相似三角形類似)
3. 仿射變換:
通過一系列原子變換復(fù)合實(shí)現(xiàn)(5個(gè)):平移(tranlation),縮放(scale),旋轉(zhuǎn)(rotate),翻轉(zhuǎn)(flip),錯(cuò)切(shear)。
其中錯(cuò)切又分為水平錯(cuò)切(水平軸上的邊不變)與垂直錯(cuò)切(垂直軸上的邊不變)
其中變換矩陣的第三行必須是:0,0,1
投影變換(Projection Transformation)
又稱透視變換(Perspective Transformation),也叫射影變換,含有8個(gè)自由度(為什么是8個(gè),而不是9個(gè))
當(dāng)投影矩陣的最后一行為(0,0,1)時(shí),即為仿射變換。
仿射變換中,左上角的2 * 2 矩陣正交時(shí),即為歐式變換(即為剛體變換),當(dāng)左上角2 * 2矩陣的行列式為1時(shí),為定向歐式變換。
所以投影矩陣包含仿射矩陣,仿射變換又包含歐式變換(剛體變換)
投影變換(Perspective Transformation)=單應(yīng)性變換(homograph)+直射變換(collination)
引申:
單應(yīng)矩陣:同一平面山的點(diǎn)在不同視角下的關(guān)系
解析變換矩陣
OpenCV的Mat類:
Matrix,位于core.hpp中
Mat m=Mat(2,3,CV_32FC(1)); //創(chuàng)建2*3 矩陣,F(xiàn)指float型,1是指單通道
也可以使用size類,注意:size的第一個(gè)參數(shù)為寬(即列數(shù)),第二個(gè)參數(shù)為高(行數(shù)),即如果創(chuàng)建2*3數(shù)組:
Mat m=Mat(Size(3,2),CV_32FC(1));
此時(shí)m.size()輸出為3*2,即寬 * 高,寬是3,高是2,即2行3列
如果要將二維矩陣的元素變?yōu)辄c(diǎn)的坐標(biāo),可以將
4. Mat 的成員變量ptr指向第一行首地址
每一行的元素在存儲(chǔ)上都是連續(xù)的,但行與行之間可能含有間隔,可以用m.isContinuous()來(lái)判斷行與行之間是否由間隔。
5. Mat的成員變量step和data
data指向第一個(gè)數(shù)值的指針,類型為uchar
step[0]代表每一行所占的字節(jié)數(shù)(包括行與行之間的間隔)
step[1]代表每一個(gè)數(shù)值所占的字節(jié)數(shù)
例如:若要訪問一個(gè)int型單通道矩陣第r行第c列,可用
(int * )是因?yàn)閙.data為uchar,所以要作類型轉(zhuǎn)換
OpenCV相機(jī)標(biāo)定(Camera Calibration)
相機(jī)標(biāo)定,簡(jiǎn)單來(lái)說(shuō)就是世界坐標(biāo)系轉(zhuǎn)換到圖像坐標(biāo)系的過程(世界坐標(biāo)系--》相機(jī)坐標(biāo)系--》圖像坐標(biāo)系),也就是求最終的投影矩陣P的過程。
相機(jī)外參R,t:從世界坐標(biāo)系轉(zhuǎn)換到相機(jī)坐標(biāo)系。這一步是從三維點(diǎn)到三維點(diǎn)的轉(zhuǎn)換
相機(jī)內(nèi)參:從相機(jī)坐標(biāo)系到圖像坐標(biāo)系,這一步是三維點(diǎn)到二維點(diǎn)的轉(zhuǎn)換
(這一部分其實(shí)是跟圖形學(xué)中正交變換和投影變換非常相關(guān),放到圖形學(xué)知識(shí)中再寫)
常見的C++線性代數(shù)庫(kù):
DCMTK:處理dicom圖像的庫(kù)
Eigen:開源的C++線性代數(shù)庫(kù),opencv中常用。示例代碼如下:
#include
上面幾行代碼就將w矩陣進(jìn)行svd分解,求解了U與V。
還有一種常見的C++線性代數(shù)庫(kù):Armadillo(犰狳)
BLAS,CUBLAS與LAPACK
BLAS:Basic Linear Algebra Subprograms, 基礎(chǔ)線性代數(shù)子程序集
CUBALS:BLAS在GPU計(jì)算技術(shù)下的版本
LAPACK: Linear Algebra Package, 線性代數(shù)包( BLAS 是LAPACK的一部分 ), 美國(guó)國(guó)家基金資助的著名公開軟件,包含了求解科學(xué)與工程計(jì)算中最常見的數(shù)值線性代數(shù)問題:如求解線性方程組,線性最小二乘問題, 特征值問題,奇異值問題等.
大津法(otsu算法)
最大類間方差法。找到一個(gè)閾值,使得背景與前景之間的方差差距最大(二分類問題)
假設(shè)存在一個(gè)閾值threshold,將圖像像素分為兩類C1(小于threshold)和C2(大于threshold),這兩類像素各自的均值為m1,m2,圖像的全局均值為mg,同時(shí)像素被分為C1和C2的概率分別為p1,p2,則有:
同時(shí),根據(jù)方差的概率,類間方差可計(jì)算得:
進(jìn)一步化簡(jiǎn),可得:
大津法就是找到一個(gè)閾值,使得sigma^2達(dá)到最大(在0-255遍歷每一個(gè)灰度值,計(jì)算p1,p2,m1,m2)
引申:能否用于決策樹???與2020年10月5日的LDA類似,見2020年8月24日
圖像的局部特征
角點(diǎn):Harris算子,SuSAN算子,F(xiàn)AST算子
梯度特征點(diǎn):SIFT,SURF,GLOH,ASIFT,PSIFT算子
邊緣特征(線型):Canny算子,Marr算子
紋理特征:灰度共生矩陣,小波Gabor算子
LBP特征:Local Binary Pattern局部二進(jìn)制模式
原始的LBP算子被定義為3 * 3 窗口,以中心像素為閾值,相鄰的8個(gè)像素與閾值進(jìn)行比較,大于則記為1,小于則標(biāo)記為0,3* 3區(qū)域內(nèi)的8個(gè)臨近點(diǎn),可用8為二進(jìn)制數(shù)表示,最終可表示0~255的十進(jìn)制數(shù),即LBP碼,最終用這個(gè)值來(lái)表示該區(qū)域的紋理信息。
常常采用LBP特征譜的統(tǒng)計(jì)直方圖來(lái)作為特征向量,用于分類識(shí)別,如人臉分析,紋理分類。
Harris角點(diǎn)檢測(cè)
(缺一個(gè)實(shí)際計(jì)算的例子)
1 當(dāng)窗口位于平坦區(qū)是,任意方向移動(dòng),都沒有灰度變化;當(dāng)窗口位于邊緣時(shí),沿邊緣方向移動(dòng),灰度無(wú)變化;當(dāng)窗口位于角點(diǎn)時(shí),沿任意方向移動(dòng),灰度都有明顯變化。
2 ,
其中w(x, y)為權(quán)值矩陣(一般用高斯函數(shù)),u,v表示沿x方向和y方向移動(dòng)的距離,I(x, y)表示圖像灰度
3, 根據(jù)泰勒展開
所以E(u,v)可以寫成
其中,M矩陣為
E(u, v)可表示成一個(gè)二次函數(shù),
該二次函數(shù)本質(zhì)上是一個(gè)橢圓(橢圓的標(biāo)準(zhǔn)方程:x^2 / a^2 + y^2 / b^2 = 1),橢圓的長(zhǎng)短軸由M矩陣的特征值lamda1,lamda2決定,M矩陣可以變化為
當(dāng)λ2 >> λ1或λ1 >>λ2時(shí),為邊
當(dāng)λ1和λ2都較大,且λ1和λ2相差不多時(shí),為角點(diǎn)
當(dāng)λ1和λ2都較小時(shí),為平坦區(qū)
計(jì)算角點(diǎn)時(shí),無(wú)需計(jì)算λ1和λ2,可以由以下公式近似計(jì)算:
alpha為一常數(shù),通常取0.04~0.06
計(jì)算梯度時(shí)
最終計(jì)算求得每個(gè)像素的R值。
行人檢測(cè):HOG+SVM
HOG:Histogram of Oriented Gradient, 方向梯度直方圖
統(tǒng)計(jì)一定區(qū)域內(nèi)的像素的梯度和其方向,生成描述子。
例如一個(gè)cell中8*8 像素,統(tǒng)計(jì)9個(gè)方向的梯度信息(9個(gè)bin),則計(jì)算出8 * 8像素的梯度和其方向,同時(shí)按照每360/9=40度統(tǒng)計(jì)梯度方向,制作成直方圖。最后每個(gè)cell對(duì)應(yīng)一個(gè)9維的特征向量。
同時(shí)也可以將多個(gè)cell組成一個(gè)block,例如2 * 2 cell組成一個(gè)block,則一個(gè)block對(duì)應(yīng)一個(gè)2* 2 *9 =36維特征。
實(shí)際應(yīng)用中,通常取固定大小的滑動(dòng)窗口來(lái)提取HOG特征,例如:窗口大小設(shè)置為64 * 128,每8 * 8 個(gè)像素組成一個(gè)cell,每2 * 2 個(gè)cell組成一個(gè)block,一共有(8-1)* (16-1)=105個(gè)block,則每個(gè)窗口的特征維度為105 * 36 =3780
行人重識(shí)別(ReID:Person Re-Identification)
利用CV技術(shù)判斷圖像或視頻序列中是否存在特定行人得技術(shù)。
數(shù)據(jù)集分為:訓(xùn)練集,驗(yàn)證集,Query,Gallery。訓(xùn)練集與驗(yàn)證集上訓(xùn)練模型,然后利用模型對(duì)Query和Gallery中的圖片提取特征計(jì)算相似度,對(duì)于每個(gè)Query在Gallery中找出前N個(gè)與之相似的圖片。
2個(gè)大方向:特征提取,度量學(xué)習(xí)
存在的挑戰(zhàn):攝像機(jī)低分辨率,遮擋,視角/姿勢(shì)變化,光照
人臉檢測(cè):Haar + Adaboost
Haar模板:OpenCV中有14個(gè)模板,最早只有4個(gè)模板
計(jì)算方法:sum(白)-sum(黑),選擇不同類型的模板(模板大小,模板位置)可以得到不同的特征值。
積分圖:Integral Image, 又叫Summed Area Table。Harr特征的計(jì)算需要重復(fù)計(jì)算目標(biāo)區(qū)域的像素值,使用積分圖可以大大減少計(jì)算量。
記點(diǎn)(x,y)處的像素值為I(x,y)則
Adaboost:通過級(jí)聯(lián)方法(Cascade)將多個(gè)弱分類器(CART決策樹)變成一個(gè)強(qiáng)分類器:要計(jì)算每個(gè)所分類器的誤差率,要用到指數(shù)損失函數(shù)
OpenCV還支持LBP + Adaboost 和HOG+Adaboost的方法進(jìn)行人臉識(shí)別
Canny邊緣檢測(cè)
用高斯一階偏導(dǎo)核對(duì)圖像進(jìn)行濾波,求出梯度圖的幅值與方向
非極大值抑制:將“寬”的邊緣變?yōu)椤罢钡倪吘?/p>
用高閾值先找到邊緣,用低閾值再找出與邊緣相連的邊緣(去除偽邊緣)
RANSAC:Random Sample Consensus
隨機(jī)采樣一致性:在一堆樣本點(diǎn)中,隨機(jī)取2個(gè)點(diǎn)做一條直線,同時(shí)設(shè)定一個(gè)閾值T,統(tǒng)計(jì)樣本點(diǎn)到該直線的距離小于T的點(diǎn)的個(gè)數(shù)(內(nèi)點(diǎn)), 反復(fù)迭代取樣本點(diǎn),做直線,找出內(nèi)點(diǎn)最多的那條直線。
除此之外,還可以用RanSAC找匹配點(diǎn)。
霍夫變換:
直角坐標(biāo)系中的一條直線y=ax+b,也可以寫成b=-ax+y,此時(shí)當(dāng)(x,y)固定時(shí),b=-ax+y也是一條直線,只不過是在參數(shù)空間(霍夫空間)中
即直角坐標(biāo)系中的一條直線y=ax+b,對(duì)應(yīng)霍夫空間中的一個(gè)點(diǎn)(a,b),同理霍夫空間上的一條直線b=-ax+y,對(duì)應(yīng)于直角坐標(biāo)系中的一個(gè)點(diǎn)(x,y)
直角坐標(biāo)系兩點(diǎn)確定一條直線,對(duì)應(yīng)于霍夫空間中兩條直線的交點(diǎn);直角坐標(biāo)系三點(diǎn)共線,對(duì)應(yīng)于霍夫空間中三條直線的交點(diǎn)
由于y=ax+b無(wú)法表示斜率為無(wú)窮的情況(即垂直于x軸的直線),故考慮將笛卡爾坐標(biāo)系換為極坐標(biāo)系。
此時(shí),直角坐標(biāo)系中的一個(gè)點(diǎn)(x0,y0)對(duì)應(yīng)于霍夫空間中p-theta的一條曲線;直角坐標(biāo)系中三點(diǎn)共線,即對(duì)應(yīng)于霍夫空間p-theta中三條曲線的交點(diǎn)
4. 檢測(cè)一個(gè)圓
霍夫變換的思想為:找到一個(gè)共性。檢測(cè)直線,則斜率與截距為不變的(或p與theta)。檢測(cè)圓,則圓心與半徑是不變的。也是在參數(shù)空間(圓心---半徑)中找到多條曲線相交的點(diǎn),此時(shí)即找到了圓。
Log變換(注意不是LOG算子)與Box-Cox變換
Log變換:用于穩(wěn)定方差,可將傾斜分布,轉(zhuǎn)換為正態(tài)分布,可使圖像更亮(應(yīng)為log函數(shù)對(duì)低值擴(kuò)展更強(qiáng))
Box-Cox變換:用于連續(xù)的變量不滿足正態(tài)分布的情況。
LOG算子和DOG算子:
LOG算子:Laplace Of Gaussian, 通過對(duì)圖像的二階導(dǎo)的零值來(lái)進(jìn)行邊緣檢測(cè)。由于微分運(yùn)算對(duì)噪聲比較敏感,所以LoG是先對(duì)圖像進(jìn)行高斯平滑,再使用Laplace算子進(jìn)行邊緣檢測(cè)(LoG算子可以求尺度)
DoG算子:Difference of Gaussian,高斯函數(shù)的差分,將圖像在不同sigma參數(shù)下的高斯濾波結(jié)果相比,得到差分圖。
因?yàn)镈OG算子在計(jì)算上比較簡(jiǎn)單,所以常用DOG算子來(lái)替代LOG算子。
二者相差k-1倍,但不影響極值點(diǎn)的檢測(cè)
二階導(dǎo)與凹凸性
一階導(dǎo)的正負(fù),代表函數(shù)值f(x)的增大或減小
二階導(dǎo)的正負(fù),代表的是斜率(斜率即一階導(dǎo))的增大或減小
凹凸的定義:
從二階導(dǎo)的正負(fù)也能判斷出凹凸性
二階導(dǎo)為正,說(shuō)明斜率越來(lái)越大,即凹函數(shù)(注意看上面的圖像)
二階導(dǎo)為負(fù),說(shuō)明斜率越來(lái)越小,即凸函數(shù)
二階導(dǎo)為0,說(shuō)明斜率的變化率為0,即保持同一斜率(變化率)
常見的插值法
以上三種是最最常見的插值方法,除此之外,還有以下幾種插值:
其中最常見的兩種多項(xiàng)式插值法為:
樣條插值:每?jī)蓚€(gè)點(diǎn)確定一個(gè)函數(shù),每個(gè)函數(shù)就是一個(gè)樣條,函數(shù)不同,樣條就不同,所以定義中說(shuō)“可變樣條”,然后把所有樣條分段結(jié)合成一個(gè)函數(shù),就是最終的 插值函數(shù)。
引申:
圖片的放大與縮小———插值原理(最近鄰插值與雙線性插值)
例如一個(gè)3*3 的256灰度圖,像素矩陣(記為src圖)為:
將其放大為4*4的圖像(記為dst圖):
最近鄰插值的公式為:
4*4 圖像中(0, 0)處的值為:(0 * 3/4, 0* 3/4)=(0,0)
即4*4 圖像中(0, 0)處的值,即為src途中(0,0)處的圖
4*4 圖像中(1, 0)處的值為:(1 * 3/4, 0* 3/4)=(0.75,0),為原來(lái)src圖中(0.75,0)處的值,此時(shí)會(huì)采用四舍五入的方法,即src圖中的(1,0)處
依此方法,4* 4 矩陣計(jì)算求得:
這種算法是最簡(jiǎn)單的圖像縮放算法,效果也是最不好的:放大由馬賽克,縮小由失真(因?yàn)椴捎昧怂纳嵛迦氲姆椒ǎ?。這種方法不科學(xué),因?yàn)楫?dāng)坐標(biāo)為0.75時(shí),不應(yīng)該就簡(jiǎn)單的取為1,而是利用源圖這個(gè)虛擬點(diǎn)四周的4個(gè)真實(shí)點(diǎn)按照一定的規(guī)律計(jì)算出來(lái)。此時(shí)就引入了雙線性插值。
雙線性插值:在x和y方向,分別做線性插值
已知Q11,Q12,Q21,Q22這4個(gè)點(diǎn)的坐標(biāo)和這4個(gè)點(diǎn)的值,現(xiàn)給出P點(diǎn)坐標(biāo),求P點(diǎn)的值。此時(shí)就要用到雙線性插值(先求R1,R2的值,然后再求P點(diǎn)的值)
雙線性插值的公式為:
例如dst圖中(1,1)處,由最近鄰插值得到的dst圖坐標(biāo)為(0.75, 0.75), 該點(diǎn)是一個(gè)虛擬點(diǎn),應(yīng)該由其四周的4個(gè)點(diǎn)(0,0), (0,1), (1,0), (1,1)決定。
由于(0.75, 0.75)離(1, 1)要更近一些,那么(1,1)處所起的作用就更大一些。由公式的系數(shù)uv=0.75* 0.75可體現(xiàn)。而(0.75, 0.75)離(0, 0)要遠(yuǎn)一些,那么(0,0)處所起的作用就更小一些。由公式的系數(shù)(1-u)(1-v)=0.25* 0.25可體現(xiàn)。
NLM去噪算法
Non Local Means, 非局部平均。
原理:假設(shè)同一幅圖像上,有很多相似的紋理,因此再有噪聲的區(qū)域,可以通過某種方式情況下,將相似的紋理區(qū)域來(lái)替換噪聲區(qū)域,從而達(dá)到較好的去噪效果,并且不太多的損失細(xì)節(jié)。
圖像增強(qiáng)算法
直方圖均衡化,拉普拉斯LOG,gamma 變換
圖形增強(qiáng),常見于對(duì)圖像的亮度,對(duì)比度,飽和度,色調(diào)等進(jìn)行調(diào)節(jié),增加其清晰度,減少噪點(diǎn)。圖像增強(qiáng)往往是多個(gè)算法的組合,一般流程為:圖像去噪,增加清晰度(對(duì)比度),灰度化或者獲取圖像邊緣特征(對(duì)圖像進(jìn)行卷積),二值化等等。圖像增強(qiáng)方法不同,應(yīng)用領(lǐng)域不同,事件中需要靈活掌握多張方法。
圖像去噪:等同于低通濾波器(噪聲是高頻)
增加清晰度:為高通濾波器
圖像領(lǐng)域中,微分是銳化,積分是模糊
圖像銳化:使灰度反差增強(qiáng),使模糊圖像變得清晰
圖像模糊:圖像收到平均運(yùn)算或積分運(yùn)算。
微分運(yùn)算, 能夠突出圖像細(xì)節(jié),使圖像變得更加清晰,laplus是一種微分算子,它的應(yīng)用可增強(qiáng)圖像中灰度突變的區(qū)域,減弱灰度的緩慢變化區(qū)域。
圖像增強(qiáng):對(duì)數(shù)log變換
由于對(duì)數(shù)函數(shù)曲線在像素值較低的區(qū)域斜率大,在像素值較高的區(qū)域斜率小,所以經(jīng)過對(duì)數(shù)變換,圖像較暗區(qū)域的對(duì)比度將有所提升,增強(qiáng)了圖像的暗部細(xì)節(jié)。
圖像增強(qiáng):Gamma變換
主要用于圖像的校正,增強(qiáng)圖像對(duì)比度,適用于灰度過高或灰度過低的圖片修正。對(duì)于對(duì)比度偏低,并且整體亮度偏高(相機(jī)過曝)情況下的圖像,增強(qiáng)效果明顯。
r值以1為分界,值越小,對(duì)低灰度部分的擴(kuò)展作用就越強(qiáng)(此時(shí)類似于log變換);值越大,對(duì)圖像高灰度部分的擴(kuò)展作用就越強(qiáng)(此時(shí)類似于指數(shù)變換)。通過不同的r值,就可以增強(qiáng)低灰度(或者高灰度)部分細(xì)節(jié)的作用。
一種增強(qiáng)圖像對(duì)比度的方法:
大的越大,小的越?。梢詫懸黄撐模? 例如[10, 30]變?yōu)閇-10, 50],可以用以下方法
求均值:(10+30)/2=20
求均值范圍[10-20, 30-20] 即為[-10,10]
乘系數(shù),假設(shè)為2,即[-10, 10]* 2=[20, 20]
應(yīng)用到原范圍:[10,30]+[-20, 20]=[-10,50]
圖像壓縮:
圖像壓縮:svd,傅里葉變換,基變換(使用小波基與傅里葉基,JEEG使用的是傅里葉基)
圖像的邊緣檢測(cè):
LoG算子:Laplacian of Gaussian算子
先對(duì)圖形做高斯濾波,然后再求Laplacian二階導(dǎo),最后檢測(cè)濾波結(jié)果的零交叉(Zero crossing)可以獲得圖像或物體的邊緣。
邊緣檢測(cè)最常見的幾種方法:Sobel算子,Laplacian算子,Canny算子等
Roberts算子(0的方向,即為邊的方向)
2. Prewitt算子
3. Sobel算子:在Prewitt算子上加了權(quán)重,距離近的像素權(quán)重高
4. Laplacian算子:二位微分算子,也是二階微分算子
本質(zhì):做卷積,求差分
圖像配準(zhǔn)算法(3類)
基于灰度和模板匹配算法:
MAD: Mean Absolute Differences 平均絕對(duì)差算法
SAD: Sum of Absolute Differences 絕對(duì)誤差和
SSD: Sum of Squred Differences , 誤差平方和,也叫差方和
MSD:Mean Squred Differences, 均方差算法
NCC:Normalized CrossCorrelation,歸一化互相關(guān)算法(或歸一化交叉相關(guān)算法),該算法利用了相似系數(shù)的計(jì)算,來(lái)計(jì)算兩張圖像的相似性。
SSDA:Sequential Similarity Detection Algorithm,序列相似性檢測(cè)算法:設(shè)定一個(gè)與之,累計(jì)絕對(duì)誤差和,該值超過閾值,則進(jìn)行下一次匹配。
SATD: Sum of Absolute Transformed Difference, 該算法也經(jīng)常用于視頻編碼中
基于特征的匹配算法:
Canny算法等
基于域變換的方法:
傅立葉---梅林變換
小波變換。
圖像修復(fù):
面積比較小的,稱為Inpainting
面積大的叫做Image Completion
圖像超分:超級(jí)分辨率,Super Resolution
基于插值的重建:傳統(tǒng)方法
基于概率的重建:反投影,最大后驗(yàn)概率
基于機(jī)器學(xué)習(xí)與深度學(xué)習(xí)的重建
圖像拼接(制作全景圖片)常用算法:
就是找關(guān)鍵點(diǎn)的算法:SIFT, SURF, ORB,SuperPoint
SIFT:Scale-Invariant Feature Transform
尺度不變特征轉(zhuǎn)換, 這是一種找關(guān)鍵點(diǎn)的方法。步驟如下:
構(gòu)建多尺寸空間(DOG,高斯差分),檢測(cè)極值點(diǎn)
利用插值等方法,通過上一步得到的多個(gè)極值點(diǎn),求出關(guān)鍵點(diǎn)
生成特征描述點(diǎn):利用直方圖統(tǒng)計(jì)關(guān)鍵點(diǎn)鄰域范圍內(nèi)的像素的梯度方向,求出關(guān)鍵點(diǎn)的主方向,構(gòu)造描述子
提取尺寸不變區(qū)域--》歸一化尺寸--》旋轉(zhuǎn)歸一化--》特征描述子(最終是:位置+128維向量)
SURF:Speed Up Robust Features
加速穩(wěn)健特征(也是找關(guān)鍵點(diǎn))。大致算法與SIFT相同,但比SIFT高效,利用Hessian矩陣的行列式作特征點(diǎn)檢測(cè),并用積分圖加速運(yùn)算。
是SIFT的變種,效果沒有SIFT好,但速度更快。
ORB: Oriented FAST and Rotated BRIEF
基于FAST 和BRIEF特征描述子提出來(lái),運(yùn)行時(shí)間最快,比較常用與實(shí)際生產(chǎn)中
目標(biāo)運(yùn)動(dòng)偵測(cè)算法:
背景差分法
光流法
幀差法
-
二進(jìn)制
+關(guān)注
關(guān)注
2文章
795瀏覽量
41679 -
算法
+關(guān)注
關(guān)注
23文章
4615瀏覽量
93015 -
圖像
+關(guān)注
關(guān)注
2文章
1086瀏覽量
40493
原文標(biāo)題:技術(shù)知識(shí)查漏補(bǔ)缺!這可能是最全的圖像相關(guān)知識(shí)總結(jié)
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論