產(chǎn)品講技術(shù) | 帶你看懂什么是計(jì)算機(jī)視覺(一)
做為一名5歲的AI產(chǎn)品汪,剛好利用春節(jié)(疫情)假期在家整理了一些CV的文章,發(fā)現(xiàn)網(wǎng)上的資料質(zhì)量參差不齊,內(nèi)容缺斤少兩,小白很難甄別/讀懂,想對CV有一個(gè)系統(tǒng)的認(rèn)識很難,就自己做了一個(gè)系統(tǒng)總結(jié)(小白可以當(dāng)教材看)。
本人并非CV領(lǐng)域?qū)I(yè)人士(產(chǎn)品經(jīng)理),但希望可以幫助小白對CV全流程和原理有一個(gè)系統(tǒng)的認(rèn)識,也歡迎各位大牛幫忙糾正。
適讀人群:
- 對AI感興趣的同學(xué)
- 對AI產(chǎn)品經(jīng)理感興趣的同學(xué)
- 互聯(lián)網(wǎng)產(chǎn)品經(jīng)理想轉(zhuǎn)AI產(chǎn)品經(jīng)理的同學(xué)
- 對CV或者圖像處理有一定基礎(chǔ),想再系統(tǒng)復(fù)習(xí)的同學(xué)
讀完收獲:
- 對CV全流程有一個(gè)了解,明白從一個(gè)圖像識別需求到輸出結(jié)果,CV都需要做些什么
- AI產(chǎn)品經(jīng)理需要掌握的CV常識和專業(yè)名詞,終于知道算法工程師在說什么了
- 熟悉CV的全流程,在數(shù)據(jù)收集、產(chǎn)品設(shè)計(jì)時(shí)就可以盡量規(guī)避問題,提高圖像識別準(zhǔn)確率
- 收藏了本文章,可以經(jīng)常拿出來復(fù)習(xí),再方便不過啦
首先我把CV的處理流程分為4個(gè)階段:1圖像采集->2圖像編碼->3圖像預(yù)處理->4特征工程
- 圖像采集:是CV處理的數(shù)據(jù)輸入來源,根據(jù)需要識別的業(yè)務(wù)需求,對圖像的背景光線、噪音、距離、遮擋物等會有相關(guān)的要求。
- 圖像編碼:做為計(jì)算機(jī)視覺處理的前提,通過把圖像的二進(jìn)制數(shù)據(jù)進(jìn)行交換,轉(zhuǎn)換為OpenVC等算法模型可用的圖片編碼格式,常用的方法有模擬處理、脈沖調(diào)制、數(shù)字編碼、預(yù)測碼等方式。
- 圖像預(yù)處理:是為特征工程掃除障礙和無效信息,提高圖像識別準(zhǔn)備率的核心主力了,因?yàn)樵趯?shí)際的業(yè)務(wù)場景中收集到的圖像數(shù)據(jù)是非常復(fù)雜多樣的,會有圖像質(zhì)量太差、大量無效數(shù)據(jù)、圖像變形、失真等情況,而這種圖像如果直接由特征工程去處理,輸出的結(jié)果可想而知。
- 特征工程:就是大家常說的AI模型,但可能運(yùn)用的不只一種模型,根據(jù)業(yè)務(wù)的需求選擇對應(yīng)的算法模型,提前針對需要的輸出結(jié)果,進(jìn)行特征提取、特征選擇、PCA降維等工作,再用大量已標(biāo)注好的高質(zhì)量數(shù)據(jù)進(jìn)行訓(xùn)練,輸出可以滿足此階段業(yè)務(wù)識別需求的特征工程。
下圖是我對CV處理流程的理解:
接下來會對CV處理流程中圖像預(yù)處理和特征工程部分進(jìn)行重點(diǎn)介紹。
文章大綱:(粗體部分是本篇文章分享的內(nèi)容)
一、什么是圖像預(yù)處理?
1.1灰度化是什么?
1.1.彩色圖像實(shí)現(xiàn)灰度化的常用方法
1.2什么是圖像幾何轉(zhuǎn)換?
1.2.1圖像的平移轉(zhuǎn)換
1.2.2圖像的鏡面變換
1.2.3圖像的轉(zhuǎn)置變換
1.2.4圖像的旋轉(zhuǎn)
1.2.5圖像的縮放
1.2.6什么是灰度插值算法?
1.3什么是圖像增強(qiáng)?
1.3.1圖像去噪
1.3.2銳化
1.3.3低照度增強(qiáng)
1.3.4去霧
1.3.5去運(yùn)動(dòng)模糊
1.3.6超分辨率重建
1.4什么是圖像恢復(fù)?
1.4.1圖像增強(qiáng)和圖像恢復(fù)的區(qū)別
1.4.2圖像恢復(fù)的處理流程
1.5什么是圖像分割/邊緣檢測
二、什么是特征工程?
2.1算法和模型的區(qū)別
2.2特征使用方案
2.3特征獲取方案
2.4特征處理
2.4.1特征清洗
2.4.2特征預(yù)處理
2.5特征監(jiān)控
三、參考文獻(xiàn)
一、圖像預(yù)處理是什么?
圖像預(yù)處理主要目的是消除圖像中無關(guān)的信息,恢復(fù)有用的真實(shí)信息,增強(qiáng)有關(guān)信息的可檢測性、最大限度地簡化數(shù)據(jù),從而改進(jìn)特征提取、圖像分割、匹配和識別的可靠性。
一般的預(yù)處理流程為:1灰度化->2幾何變換->3圖像增強(qiáng)
1.1 灰度化是什么?
現(xiàn)在大部分的彩色圖像都是采用 RGB顏色模式,在進(jìn)行圖像處理時(shí),我們往往需要對RGB三個(gè)分量通道依次進(jìn)行處理,花費(fèi)時(shí)間和計(jì)算成本會相對較高。但實(shí)際上RGB并不能反映圖像的形態(tài)特征,只是從光學(xué)的原理上進(jìn)行顏色的調(diào)配。
所以我們經(jīng)常要把彩色圖像弄成8位的灰度值圖像直接進(jìn)行處理,可以通過直方圖,灰度變化,還有正交變換之類的進(jìn)行處理,減少所需處理的數(shù)據(jù)量,從而達(dá)到提高整個(gè)應(yīng)用系統(tǒng)的處理速度的目的。
目的:為了減小圖像原始數(shù)據(jù)量,提升計(jì)算效率,因?yàn)閳D像處理中不一定需要對彩色圖像的RGB三個(gè)分量都進(jìn)行處理。
科普環(huán)節(jié),大牛請?zhí)^:
R:Red 紅色
G:Green 綠色
B:Blue 藍(lán)色
RGB圖像就是我日常見到的大多數(shù)彩色圖像,它只使用R、G、B三種顏色,每種顏色有0~255范圍內(nèi)的強(qiáng)度值。如果按照不同的比例混合可以組合成約1677萬種顏色,幾乎包含了人類視力所能感知的所有顏色,而每幅彩色圖像是由RGB三幅灰度圖像組合而成。
二值圖像(Binary Image):圖像中每個(gè)像素的灰度值僅可取0或1,即不是取黑,就是取白,二值圖像可理解為黑白圖像
灰度圖像(Gray Scale Image):圖像中每個(gè)像素可以由0-255的灰度值表示,具體表現(xiàn)為從全黑到全白中間有255個(gè)介于中間的灰色值可以取
下面用一張圖來感受一下灰度圖與彩色圖像之間的聯(lián)系與差別
1.1.1 彩色圖像實(shí)現(xiàn)灰度化的常用方法
1)分量法:將彩色圖像中的三分量RGB的亮度作為三個(gè)灰度圖像的灰度值,可根據(jù)應(yīng)用需要選取三種中的一種灰度圖像。
2)最大值法:將彩色圖像中的三分量亮度的最大值作為灰度圖的灰度值。
3)平均值法:將彩色圖像中的三分量亮度求平均得到一個(gè)灰度圖。
4)加權(quán)平均法:根據(jù)重要性及其它指標(biāo),將三個(gè)分量以不同的權(quán)值進(jìn)行加權(quán)平均。由于人眼對綠色的敏感最高,對藍(lán)色敏感最低,因此,按下式對RGB三分量進(jìn)行加權(quán)平均能得到較合理的灰度圖像。
1.2 什么是圖像幾何變換?
圖像幾何變換又稱為圖像空間變換,通過平移、轉(zhuǎn)置、鏡像、旋轉(zhuǎn)、縮放等幾何變換對采集的圖像進(jìn)行處理,用于改正圖像采集系統(tǒng)的系統(tǒng)誤差和儀器位置(成像角度、透視關(guān)系乃至鏡頭自身原因)的隨機(jī)誤差。
這就給觀測者或是圖像識別程序帶來了困擾,通過適當(dāng)?shù)膸缀巫儞Q可以最大程度地消除這些幾何失真所產(chǎn)生的負(fù)面影響,有利于我們在后續(xù)的處理和識別工作中將注意力集中子圖像內(nèi)容本身。更確切地說是圖像中的對象,而不是該對象的角度和位置等。
因此, 幾何變換常常作為其他圖像處理應(yīng)用的預(yù)處理步驟, 是圖像歸一化的核心工作之一。它將一幅圖像中的坐標(biāo)位置映射到另一幅圖像中的新坐標(biāo)位置. 我們學(xué)習(xí)幾何變換的關(guān)鍵就是要確定這種空間映射關(guān)系, 以及映射過程中的變換參數(shù)。
目的:減少因幾何失真而造成圖像識別的問題,通過圖像空間變換最大程度地消除幾何失真產(chǎn)生的負(fù)面影響。
下面會給大家介紹一下幾何變換常用的幾種方法的原理和Matlab實(shí)現(xiàn)方法:
- 圖像的平移變換;
- 圖像的鏡像變換;
- 圖像的轉(zhuǎn)置變換;
- 圖像的旋轉(zhuǎn)變換;
- 圖像的縮放。
1.2.1 圖像的平移變換
在進(jìn)行書寫matlab代碼之前,先來了解一下圖像平移的理論基礎(chǔ)。設(shè)圖像的高度為H,寬度為W,如下所示:
我們知道,圖像是由像素組成的,而像素的集合就相當(dāng)于一個(gè)二維的矩陣,每一個(gè)像素都有一個(gè)“位置”,也就是像素都有一個(gè)坐標(biāo)。假設(shè)原來的像素的位置坐標(biāo)為(x0,y0),經(jīng)過平移量(△x,△y)后,坐標(biāo)變?yōu)椋▁1,y1),如下所示:
用數(shù)學(xué)式子表示可以表示為:
x1 = x0 + △x
y1 = y0 + △y
用矩陣表示為:
本來使用二維矩陣就可以了的,但是為了適應(yīng)像素、拓展適應(yīng)性,這里使用三位的向量。
式子中,矩陣:
稱為平移變換矩陣(因子),△x和△y為平移量。
此外,我們也知道了,圖像的高度H其實(shí)也就是像素的行數(shù),對于坐標(biāo)1≤X≤H;圖像的長度也就是像素的列數(shù),對應(yīng)坐標(biāo)1≤Y≤W。
我們先來看一下效果,,效果如下所示:
然后下面分析一下關(guān)鍵的代碼:
讀入圖像之后,得到im,我們可以看到im是一個(gè)三維的變量,包括了像素的位置(高度(即垂直長度)和寬度(即水平長度)),像素的顏色。(注,24位真彩圖:也是用矩陣表示,圖像像素直接用RGB顏色顯示,而不是通過顏色索引表。圖像像素的顏色用三個(gè)變量表示即(R,G,B),每個(gè)變量從0~255變化,因此一個(gè)像素也就是8bit*3=24bit,一個(gè)像素用24bit表示可以有2^24種顏色。)我們可以看到會有unit8,就是8bit的原因。
然后我們獲取圖像的大小,用H,W,Z三個(gè)變量接收,其中H接收了圖片的高度(也就是垂直長度),W接收了圖片的寬度(水平長度),然后Z接收了圖片的顏色值。
然后我們將圖像轉(zhuǎn)換成雙精度類型 I,這是因?yàn)槭褂秒p精度可以仿真在轉(zhuǎn)換過程中發(fā)生精度損失的問題,也是方便我們進(jìn)行轉(zhuǎn)換。轉(zhuǎn)換之后,我們可以看到unit8的類型別我們轉(zhuǎn)換成了double類型。
接著,我們構(gòu)造一個(gè)圖像res矩陣,這個(gè)圖像首先進(jìn)行歸一化,也就是讓里面的元素全部為1,對于圖像,就是一張白色的圖片了。這個(gè)圖像主要是用來“保存”我們進(jìn)行位移后的圖像。
然后我們就設(shè)置平移量、構(gòu)造平移變換矩陣。這個(gè)矩陣我們根據(jù)前面的理論部分可以得到。
接著便是重點(diǎn)了,進(jìn)行平移變換。我們來一句一句解讀這個(gè)循環(huán)。當(dāng)x0=1,y0=1時(shí),得到第一個(gè)像素的位置,也就是(x0,y0)這個(gè)像素,然后將這個(gè)像素位置進(jìn)行緩存,也就是構(gòu)造一個(gè)矩陣temp,即理論中的:
然后進(jìn)行位置轉(zhuǎn)換,也就是進(jìn)行矩陣相乘,用變換矩陣乘以原像素矩陣,得到了變換后像素矩陣:
接著,我們需要把變換后的像素位置“提取”出來,用x1,y1進(jìn)行存儲,為什么要獲取位置呢?
這是因?yàn)槲覀円袛噙@個(gè)像素是否越界了,也就是進(jìn)行平移之后,得到的這個(gè)像素位置是否還存在顯示區(qū)域里面,也就是我們的:
if(x <= H) & (y <= W) & (x >= 1) & (y >= 1)語句
當(dāng)還在顯示區(qū)域里面時(shí),我們要進(jìn)行移位顯示:
res(x1,y1,:)= I(x0,y0,:);%進(jìn)行圖像平移,顏色賦值
這個(gè)語句的含義是,把I中的RGB值(也就是顏色值)賦值給res,也就是說,前面矩陣相乘只是移動(dòng)的像素位置,但是顏色沒有進(jìn)行移動(dòng),這里進(jìn)行圖像顏色的平移,當(dāng)x0=1,y0=1時(shí),把該點(diǎn)的位置圖像顏色進(jìn)行移動(dòng)過去。
當(dāng)x0=1,y0=2時(shí),移動(dòng)第二點(diǎn)。我們可以看到,這里的代碼是:從左到右平移,也就是先進(jìn)行寬度的平移;從上到下,進(jìn)行高度的平移。當(dāng)兩個(gè)循環(huán)完成之后,圖像也就像平移完成了。
最后的代碼就是顯示圖像了,其中axis on 的意思是打開左邊,方便我們進(jìn)行查看平移后的位置。從上面的效果我們可以得到,delx表示的高度的平移量,delx為正值時(shí)往下平移,delx為負(fù)值時(shí)往上平移;而dely表示的寬度的平移量,正值往右平移,負(fù)值往左平移。
1.2.2 圖像的鏡像變換
圖像的鏡像變換分為水平鏡像和垂直鏡像,下面分別進(jìn)行這兩種鏡像的介紹,首先說明一下,無論是水平鏡像還是垂直鏡像,鏡像后高度和寬度都不變。
H圖像的高度,關(guān)聯(lián)x W:圖像的寬度,關(guān)聯(lián)y。
水平鏡像操作:以原圖像的垂直中軸線為中心,將圖像分為左右兩部分進(jìn)行對稱變換。
示意圖如下所示:
水平鏡像中,原圖中的(x0,y0)經(jīng)過水平鏡像后,坐標(biāo)變成了(x0,W-y0),用數(shù)學(xué)公式表達(dá)就是:
x1 = x0,
y1 = W-y0;
寫成矩陣就是:
也就是說,水平鏡像變換矩陣(因子)為:
代碼效果如下所示:
垂直鏡像操作:以原圖像的水平中軸線為中心,將圖像分為上下兩部分進(jìn)行對稱變換。
示意圖如下所示:
垂直鏡像中,原圖中的(x0,y0)經(jīng)過垂直鏡像后,坐標(biāo)變成了(H-x0,y0),用數(shù)學(xué)公式表達(dá)就是:
x1 = H – x0
y1 = y0
寫成矩陣就是:
也就是說,垂直鏡像變換矩陣(因子)為:
實(shí)現(xiàn)的效果如下所示:
1.2.3 圖像的轉(zhuǎn)置變換
圖像的轉(zhuǎn)置就是將圖像像素的x坐標(biāo)和y坐標(biāo)互換。這樣將改變圖像的高度和寬度,轉(zhuǎn)置后圖像的高度和寬度也將互換。
圖像的轉(zhuǎn)置用數(shù)學(xué)公式描述就是:
x1 = y0
y1 = x0
寫出矩陣如下所示:
實(shí)現(xiàn)的效果如下所示:
1.2.4 圖像的旋轉(zhuǎn)
一般情況下,旋轉(zhuǎn)操作會有一個(gè)旋轉(zhuǎn)中心,這個(gè)旋轉(zhuǎn)中心一般為圖像的中心,旋轉(zhuǎn)之后圖像的大小一般會發(fā)生改變。圖像像素原來的坐標(biāo)為(x0,y0),(順時(shí)針)選擇Θ角度后得到(x1,y1),用數(shù)學(xué)公式表達(dá)如下所示:
x1 = x0·cosΘ+ y0·sinΘ
y1 = -x0·sinΘ+ y0·cosΘ
用矩陣表示如下所示:
代碼實(shí)現(xiàn)的效果如下所示:
1.2.5 圖像的縮放
下面值來介紹一下圖像的縮放主要是根據(jù)函數(shù)imresize來實(shí)現(xiàn)的,我們先來看看代碼和效果圖,然后分析圖像的縮放函數(shù)。
效果圖像所示:
縮?。?/p>
等大:
放大:
縮放并且設(shè)置行列:
線性插值:
感謝原作者的無私奉獻(xiàn),希望可以有更多大牛可以分享出更好的文章~
對原文進(jìn)行了部分刪減和修改,轉(zhuǎn)載自:https://www.cnblogs.com/IClearner/p/6842334.html
現(xiàn)在大家對圖像幾何變換已經(jīng)有一些了解了吧,但是幾何變換不會改變圖像的像素值,只是在圖像平面上進(jìn)行像素的重新安排。
一個(gè)完整的幾何變換需要兩部分運(yùn)算:除了空間變換所需的運(yùn)算外,還需要使用灰度插值算法。因?yàn)榘凑諑缀巫儞Q關(guān)系進(jìn)行計(jì)算,輸出圖像的像素可能被映射到輸入圖像的非整數(shù)坐標(biāo)上。而像素做為最小顯示單位(矢量圖形不是由像素構(gòu)成的,矢量可以是一個(gè)點(diǎn)或一條線),我們要為輸出圖像找到最合適的整數(shù)像素點(diǎn)。
1.2.6 什么是灰度插值算法?
灰度插值算法,通常采用的方法有最近鄰插值、雙線性插值和雙三次插值。在講插值算法之前,我們先來看下圖像的縮放問題。
傳統(tǒng)的繪圖工具中,有一種叫做“放大尺”的繪圖工具,畫家常用它來放大圖畫。在計(jì)算機(jī)上,我們將不再需求用放大尺去放大或縮小圖像了,把這個(gè)工作交給程序來完成就可以了。
我們所說的圖像都是指點(diǎn)陣圖,也就是用一個(gè)像素矩陣來描述圖像的方法,對于另一種圖像:用函數(shù)來描述的圖像的矢量圖,不再本文討論之列。
圖像放大時(shí),像素也相應(yīng)地增加,但這些增加的像素從何而來?
這時(shí)插值就派上用場了:插值就是在不生成像素的情況下增加圖像像素大小的一種方法,在周圍像素色彩的基礎(chǔ)上用數(shù)學(xué)公式計(jì)算丟失像素的色彩。
所以在放大圖像時(shí),圖像看上去會比較平滑、干凈,但必須注意的是插值并不能增加圖像信息。
目的:因?yàn)閳D像空間變換不改變圖像的像素值,只是對圖像的像素值重新進(jìn)行映射,在表示映射關(guān)系時(shí),輸出圖像的像素可能被映射到輸入圖像的非整數(shù)坐標(biāo)上,灰度插值算法就是為輸出圖像找到最合適的整數(shù)像素坐標(biāo)。
在知道什么是插值后,讓我們來一起看一下常用的插值算法的原理。
(1)最近鄰插值法 Nearest Neighbour Interpolate
是最簡單的一種插值算法,也稱作零階插值,就是令變換后像素的灰度值等于距它最近的輸入像素的灰度值。也就是說照搬旁邊的像素這樣做結(jié)果,會產(chǎn)生明顯可見的鋸齒,在待求像素的四鄰像素中,將距離待求像素最近的鄰灰度值賦給待求像素。
設(shè)i+u, j+v(i, j為正整數(shù), u, v為大于零小于1的小數(shù),下同)為待求象素坐標(biāo),則待求象素灰度的值 f(i+u, j+v)
如下圖所示:
如果(i+u, j+v)落在A區(qū),即u<0.5, v<0.5,則將左上角象素的灰度值賦給待求象素。同理,落在B區(qū)則賦予右上角的象素灰度值,落在C區(qū)則賦予左下角象素的灰度值,落在D區(qū)則賦予右下角象素的灰度值。最鄰近元法計(jì)算量較小,但可能會造成插值生成的圖像灰度上的不連續(xù),在灰度變化的地方可能出現(xiàn)明顯的鋸齒狀。
最近鄰插值法實(shí)現(xiàn)的效果如下所示:
從效果圖上,可以看到明顯的鋸齒,這就是因?yàn)樽罱彶逯捣ú粩嘣趶?fù)制最近鄰像素灰度值的原因,假設(shè)A、B、C、D為四個(gè)不同的像素點(diǎn),現(xiàn)在把輸入圖像擴(kuò)大4倍:
輸出圖像就由原來的4個(gè)像素點(diǎn)變成了16像素點(diǎn),而新增的12個(gè)像素點(diǎn)并不是圖像新的真實(shí)像素,而是復(fù)制圖像鄰近像素產(chǎn)生的,就很容易出現(xiàn)鋸齒這種圖像失真現(xiàn)象。
(2)雙線性插值Bilinear Interpolation
1)雙線性插值
假設(shè)源圖像大小為mxn,目標(biāo)圖像為axb。那么兩幅圖像的邊長比分別為:m/a和n/b。注意,通常這個(gè)比例不是整數(shù),編程存儲的時(shí)候要用浮點(diǎn)型。目標(biāo)圖像的第(i,j)個(gè)像素點(diǎn)(i行j列)可以通過邊長比對應(yīng)回源圖像。其對應(yīng)坐標(biāo)為(i*m/a,j*n/b)。
顯然,這個(gè)對應(yīng)坐標(biāo)一般來說不是整數(shù),而非整數(shù)的坐標(biāo)是無法在圖像這種離散數(shù)據(jù)上使用的。雙線性插值通過尋找距離這個(gè)對應(yīng)坐標(biāo)最近的四個(gè)像素點(diǎn),來計(jì)算該點(diǎn)的值(灰度值或者RGB值)。如果你的對應(yīng)坐標(biāo)是(2.5,4.5),那么最近的四個(gè)像素是(2,4)、(2,5)、(3,4),(3,5)。
若圖像為灰度圖像,那么(i,j)點(diǎn)的灰度值可以通過一下公式計(jì)算:
f(i,j)=w1*p1+w2*p2+w3*p3+w4*p4;
其中,pi(i=1,2,3,4)為最近的四個(gè)像素點(diǎn),wi(i=1,2,3,4)為各點(diǎn)相應(yīng)權(quán)值。關(guān)于權(quán)值的計(jì)算,在維基百科和百度百科上寫的很明白。
2)存在的問題
這部分的前提是,你已經(jīng)明白什么是雙線性插值并且在給定源圖像和目標(biāo)圖像尺寸的情況下,可以用筆計(jì)算出目標(biāo)圖像某個(gè)像素點(diǎn)的值。
當(dāng)然,最好的情況是你已經(jīng)用某種語言實(shí)現(xiàn)了網(wǎng)上一大堆博客上原創(chuàng)或轉(zhuǎn)載的雙線性插值算法。然后發(fā)現(xiàn)計(jì)算出來的結(jié)果和matlab、openCV對應(yīng)的resize()函數(shù)得到的結(jié)果完全不一樣。
那這個(gè)究竟是怎么回事呢?
其實(shí)答案很簡單,就是坐標(biāo)系的選擇問題,或者說源圖像和目標(biāo)圖像之間的對應(yīng)問題。
按照網(wǎng)上一些博客上寫的,源圖像和目標(biāo)圖像的原點(diǎn)(0,0)均選擇左上角,然后根據(jù)插值公式計(jì)算目標(biāo)圖像每點(diǎn)像素。
假設(shè)你需要將一幅5×5的圖像縮小成3×3,那么源圖像和目標(biāo)圖像各個(gè)像素之間的對應(yīng)關(guān)系如下:
只畫了一行,用做示意,從圖中可以很明顯的看到,如果選擇右上角為原點(diǎn)(0,0),那么最右邊和最下邊的像素實(shí)際上并沒有參與計(jì)算,而且目標(biāo)圖像的每個(gè)像素點(diǎn)計(jì)算出的灰度值也相對于源圖像偏左偏上。
那么,讓坐標(biāo)加1或者選擇右下角為原點(diǎn)怎么樣呢?很不幸,還是一樣的效果,不過這次得到的圖像將偏右偏下。
最好的方法就是,兩個(gè)圖像的幾何中心重合,并且目標(biāo)圖像的每個(gè)像素之間都是等間隔的,并且都和兩邊有一定的邊距,這也是matlab和openCV的做法。如下圖:
如果你不懂我上面說的什么,沒關(guān)系,只要在計(jì)算對應(yīng)坐標(biāo)的時(shí)候改為以下公式即可:
int x=(i+0.5)*m/a-0.5
int y=(j+0.5)*n/b-0.5
instead of
int x=i*m/a
int y=j*n/b
利用上述公式,將得到正確的雙線性插值結(jié)果
雙線性內(nèi)插法實(shí)現(xiàn)的效果如下所示:
雙線性內(nèi)插法的計(jì)算比最鄰近點(diǎn)法復(fù)雜,計(jì)算量較大但沒有灰度不連續(xù)的缺點(diǎn),結(jié)果基本令人滿意。它具有低通濾波性質(zhì),使高頻分量受損,圖像輪廓可能會有一點(diǎn)模糊。
(3)雙三次插值Bicubic interpolation
雙三次插值是一種更加復(fù)雜的插值方式,它能創(chuàng)造出比雙線性插值更平滑的圖像邊緣。雙三次插值方法通常運(yùn)用在一部分圖像處理軟件、打印機(jī)驅(qū)動(dòng)程序和數(shù)碼相機(jī)中,對原圖像或原圖像的某些區(qū)域進(jìn)行放大。Adobe Photoshop CS 更為用戶提供了兩種不同的雙三次插值方法:雙三次插值平滑化和雙三次插值銳化。
在數(shù)值分析這個(gè)數(shù)學(xué)分支中,雙三次插值是二維空間中最常用的插值方法。在這種方法中,函數(shù)f在點(diǎn) (x,y) 的值可以通過矩形網(wǎng)格中最近的十六個(gè)采樣點(diǎn)的加權(quán)平均得到,在這里需要使用兩個(gè)多項(xiàng)式插值三次函數(shù),每個(gè)方向使用一個(gè)。
雙三次插值又叫雙立方插值,用于在圖像中“插值”(Interpolating)或增加“像素”(Pixel)數(shù)量/密度的一種方法。通常利用插值技術(shù)增加圖形數(shù)據(jù),以便在它打印或其他形式輸出的時(shí)候,能夠增大打印面積以及(或者)分辨率。
有不同的插值技術(shù)可供選用。雙立方插值通常能產(chǎn)生效果最好,最精確的插補(bǔ)圖形,但它速度也幾乎是最慢的?!半p線性插值”(Bilinear interpolation)的速度則要快一些,但沒有前者精確。
在商業(yè)性圖像編輯軟件中,經(jīng)常采用的是速度最快,但也是最不準(zhǔn)確的“最近相鄰”(Nearest Neighbor)插值。其他一些插值技術(shù)通常只在高檔或單獨(dú)應(yīng)用的程序中出現(xiàn)。
顯然,無論技術(shù)多么高級,插補(bǔ)過的數(shù)據(jù)肯定沒有原始數(shù)據(jù)準(zhǔn)確。這意味著對一個(gè)圖形文件進(jìn)行插值處理后,雖然文件長度增加了(數(shù)據(jù)量增大),但不會有原先那幅圖銳利,可能會在圖形質(zhì)量上打折扣。
這公式是什么?我是誰?我在干嘛……
這部分確實(shí)還沒整明白,先把結(jié)果告訴大家,原理后續(xù)再繼續(xù)更新……
雙三次曲線插值法實(shí)現(xiàn)的效果如下所示:
雙三次曲線插值方法計(jì)算量較大,但處理圖像效果是最好的。這種算法是一很常見的算法,普遍用在圖像編輯軟件、打印機(jī)驅(qū)動(dòng)和數(shù)碼相機(jī)上。
現(xiàn)在有許多數(shù)碼相機(jī)廠商將插值算法用在了數(shù)碼相機(jī)上,并將通過算法得到的分辨率值大肆宣傳。固然他們比雙三次插值算法等先進(jìn)很多,但是事實(shí)圖像的細(xì)節(jié)不能憑空造出來的。因?yàn)椴逯捣直媛适菙?shù)碼相機(jī)通過自 身的內(nèi)置軟件來增加圖像素,從而達(dá)到大分辨率效果。
啊哈,對于小白來說這些內(nèi)容已經(jīng)很燒腦了,大家看完之后要盡量動(dòng)手嘗試一下哦,下一篇會繼續(xù)為大家更新圖像增強(qiáng)和圖像恢復(fù)的部分。
注:文章部分內(nèi)容和圖片來自于互聯(lián)網(wǎng),在參考文獻(xiàn)中會注明出處,如有侵權(quán)等問題,請及時(shí)聯(lián)系我刪除,謝謝大佬們的支持和無私奉獻(xiàn)~
第二篇連載已更新,已經(jīng)完成的圖像預(yù)處理的所有內(nèi)容,喜歡小伙伴可以繼續(xù)閱讀哈~
《產(chǎn)品講技術(shù) | 帶你看懂什么是計(jì)算機(jī)視覺(二)》
作者:賈濤,微信公眾號:賈產(chǎn)品(ID:JIAPRODUCT),互聯(lián)網(wǎng)愛好者。
本文由 @賈濤 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議
能加個(gè)v嗎
當(dāng)然可以,微信號:ai459926247
微信交流
歡迎歡迎
769710589
的