圖像預(yù)處理流程

圖像預(yù)處理主要包括去噪、對比度增強,去噪和對比度增強方法順序不唯一,根據(jù)實際情況作出最好的安排。

1、灰度化

http://blog.sina.com.cn/s/blog_13c6397540102wqtt.html

那么什么叫圖片的灰度化呢?其實很簡單,就是讓像素點矩陣中的每一個像素點都滿足下面的關(guān)系:R=G=B(就是紅色變量的值,綠色變量的值,和藍色變量的值,這三個值相等,“=”的意思不是程序語言中的賦值,是數(shù)學(xué)中的相等),此時的這個值叫做灰度值。

灰度處理的方法:

???一般灰度處理經(jīng)常使用兩種方法來進行處理。

?方法1:

?????灰度化后的R=(處理前的R + 處理前的G +處理前的B)/ 3

????灰度化后的G=(處理前的R + 處理前的G +處理前的B)/ 3

?????灰度化后的B=(處理前的R + 處理前的G +處理前的B)/ 3

方法2:

?????灰度化后的R =處理前的R * 0.3+ 處理前的G * 0.59 +處理前的B * 0.11

?????灰度化后的G =處理前的R * 0.3+ 處理前的G * 0.59 +處理前的B * 0.11

?????灰度化后的B =處理前的R * 0.3+ 處理前的G * 0.59 +處理前的B * 0.11

2、高斯濾波、均值濾波、中值濾波、雙邊濾波(去噪)

https://blog.csdn.net/u013007900/article/details/78181249

高斯濾波器是一種線性濾波器,能夠有效的抑制噪聲,平滑圖像。其作用原理和均值濾波器類似,都是取濾波器窗口內(nèi)的像素的均值作為輸出。其窗口模板的系數(shù)和均值濾波器不同,均值濾波器的模板系數(shù)都是相同的為1;而高斯濾波器的模板系數(shù),則隨著距離模板中心的增大而系數(shù)減小。所以,高斯濾波器相比于均值濾波器對圖像個模糊程度較小。

均值濾波及中值濾波的區(qū)別

均值濾波和和中值濾波都可以起到平滑圖像,慮去噪聲的功能。均值濾波采用線性的方法,平均整個窗口范圍內(nèi)的像素值,均值濾波本身存在著固有的缺陷,即它不能很好地保護圖像細節(jié),在圖像去噪的同時也破壞了圖像的細節(jié)部分,從而使圖像變得模糊,不能很好地去除噪聲點。均值濾波對高斯噪聲表現(xiàn)較好,對椒鹽噪聲表現(xiàn)較差。中值濾波采用非線性的方法,它在平滑脈沖噪聲方面非常有效,同時它可以保護圖像尖銳的邊緣,選擇適當(dāng)?shù)狞c來替代污染點的值,所以處理效果好,對椒鹽噪聲表現(xiàn)較好,對高斯噪聲表現(xiàn)較差。

http://www.360doc.com/document/18/0320/20/52973095_738813007.shtml

中值濾波介紹及C實現(xiàn)

https://www.cnblogs.com/qiqibaby/p/5281743.html

雙邊濾波:

雙邊濾波是一種非線性濾波器,它可以達到保持邊緣、降噪平滑的效果。和其他濾波原理一樣,雙邊濾波也是采用加權(quán)平均的方法,用周邊像素亮度值的加權(quán)平均代表某個像素的強度,所用的加權(quán)平均基于高斯分布[1]。最重要的是,雙邊濾波的權(quán)重不僅考慮了像素的歐氏距離(如普通的高斯低通濾波,只考慮了位置對中心像素的影響),還考慮了像素范圍域中的輻射差異(例如卷積核中像素與中心像素之間相似程度、顏色強度,深度距離等),在計算中心像素的時候同時考慮這兩個權(quán)重。 公式1a,1b給出了雙邊濾過的操作,Iq為輸入圖像,Ipbf為濾波后圖像:


雙邊濾波的核函數(shù)是空間域核與像素范圍域核的綜合結(jié)果:在圖像的平坦區(qū)域,像素值變化很小,對應(yīng)的像素范圍域權(quán)重接近于1,此時空間域權(quán)重起主要作用,相當(dāng)于進行高斯模糊;在圖像的邊緣區(qū)域,像素值變化很大,像素范圍域權(quán)重變大,從而保持了邊緣的信息。

(雙邊濾波算法)原理及實現(xiàn):

https://blog.csdn.net/piaoxuezhong/article/details/78302920

3、gamma矯正

https://blog.csdn.net/w450468524/article/details/51649651

https://www.cnblogs.com/qiqibaby/p/5325193.html

(Gamma?Correction,伽瑪校正):所謂伽瑪校正就是對圖像的伽瑪曲線進行編輯,以對圖像進行非線性色調(diào)編輯的方法,檢出圖像信號中的深色部分和淺色部分,并使兩者比例增大,從而提高圖像對比度效果。計算機繪圖領(lǐng)域慣以此屏幕輸出電壓與對應(yīng)亮度的轉(zhuǎn)換關(guān)系曲線,稱為伽瑪曲線(Gamma?Curve)。

以傳統(tǒng)CRT(Cathode?Ray?Tube)屏幕的特性而言,該曲線通常是一個乘冪函數(shù),Y=(X+e)γ,其中,Y為亮度、X為輸出電壓、e為補償系數(shù)、乘冪值(γ)為伽瑪值,改變乘冪?值(γ)的大小,就能改變CRT的伽瑪曲線。典型的Gamma值是0.45,它會使CRT的影像亮度呈現(xiàn)線性。使用CRT的電視機等顯示器屏幕,由于對于?輸入信號的發(fā)光灰度,不是線性函數(shù),而是指數(shù)函數(shù),因此必需校正



4、直方圖均衡化

直方圖均衡化(Histogram Equalization)?又稱直方圖平坦化,實質(zhì)上是對圖像進行非線性拉伸,重新分配圖像象元值,使一定灰度范圍內(nèi)象元值的數(shù)量大致相等。這樣,原來直方圖中間的峰頂部分對比度得到增強,而兩側(cè)的谷底部分對比度降低,輸出圖像的直方圖是一個較平的分段直方圖:如果輸出數(shù)據(jù)分段值較小的話,會產(chǎn)生粗略分類的視覺效果。

?直方圖是表示數(shù)字圖像中每一灰度出現(xiàn)頻率的統(tǒng)計關(guān)系。直方圖能給出圖像灰度范圍、每個灰度的頻度和灰度的分布、整幅圖像的平均明暗和對比度等概貌性描述?;叶戎狈綀D是灰度級的函數(shù),?反映的是圖像中具有該灰度級像素的個數(shù),?其橫坐標(biāo)是灰度級r,?縱坐標(biāo)是該灰度級出現(xiàn)的頻率(?即像素的個數(shù)) pr( r) ,?整個坐標(biāo)系描述的是圖像灰度級的分布情況,?由此可以看出圖像的灰度分布特性,?即若大部分像素集中在低灰度區(qū)域,?圖像呈現(xiàn)暗的特性;?若像素集中在高灰度區(qū)域,?圖像呈現(xiàn)亮的特性。

?圖1所示就是直方圖均衡化,?即將隨機分布的圖像直方圖修改成均勻分布的直方圖。基本思想是對原始圖像的像素灰度做某種映射變換,?使變換后圖像灰度的概率密度呈均勻分布。這就意味著圖像灰度的動態(tài)范圍得到了增加,?提高了圖像的對比度。


①求該圖像的灰度直方圖。②對該圖像進行直方圖均衡化處理,寫出過程和結(jié)果。

首先需要說明的是,如果你說的是一道完整的題目,則這道題目沒有唯一解,因為題目中沒有說明原始圖像的灰度級數(shù)(比如原始圖像是16個灰度級的,或者是32個灰度級的,等等)。為了給你提供一個解題思路,現(xiàn)在人為假設(shè)原始圖像是16個灰度級的,其它灰度級的解法類似。

圖像的灰度直方圖求法為:

先計算圖像中各個灰度級的出現(xiàn)頻率,用h(i)表示灰度級i的出現(xiàn)頻率,其值等于灰度級出現(xiàn)次數(shù)/圖像像素個數(shù):

h(0)=2/16,h(1)=1/16,h(2)=3/16,h(3)=2/16,h(4)=0/16

h(5)=1/16,h(6)=4/16,h(7)=1/16,h(8)=1/16,h(9)=1/16

h(10)=h(11)=h(12)=h(13)=h(14)=h(15)=0/16。

圖像進行直方圖均衡化處理的過程為:

先計算累積分布,用r(i)表示灰度級i的累積分布:

r(0)=h(0)=2/16

r(1)=r(0)+h(1)=2/16+1/16=3/16

r(2)=r(1)+h(2)=3/16+3/16=6/16

r(3)=r(2)+h(3)=6/16+2/16=8/16

r(4)=r(3)+h(4)=8/16+0/16=8/16

r(5)=r(4)+h(5)=8/16+1/16=9/16

r(6)=r(5)+h(6)=9/16+4/16=13/16

r(7)=r(6)+h(7)=13/16+1/16=14/16

r(8)=r(7)+h(8)=14/16+1/16=15/16

r(9)=r(8)+h(9)=15/16+1/16=16/16=1

r(10)=r(11)=r(12)=r(13)=r(14)=r(15)=1

將累積分布進行量化(量化時需要用到原始圖像的灰度級數(shù),這也是為什么前面需要說明的原因),量化后的灰度級用rq(i)表示,量化公式為rq(i)=ROUND(r(i)*15),(說明:量化公式中的15等于原始圖像灰度級數(shù)減1),可得:

rq(0)=ROUND(r(0)*15)=2

rq(1)=ROUND(r(1)*15)=3

rq(2)=ROUND(r(2)*15)=6

rq(3)=ROUND(r(3)*15)=8

rq(4)=ROUND(r(4)*15)=8

rq(5)=ROUND(r(5)*15)=8

rq(6)=ROUND(r(6)*15)=12

rq(7)=ROUND(r(7)*15)=13

rq(8)=ROUND(r(8)*15)=14

rq(9)=ROUND(r(9)*15)=15

rq(10)=ROUND(r(10)*15)=15

rq(11)=ROUND(r(11)*15)=15

rq(12)=ROUND(r(12)*15)=15

rq(13)=ROUND(r(13)*15)=15

rq(14)=ROUND(r(14)*15)=15

rq(15)=ROUND(r(15)*15)=15

因此,原始圖像中的灰度級和均化后圖像中的灰度級之間的對應(yīng)關(guān)系為:

0->2??1->3?? 2->6?? 3->8??4->8?? 5->8?? 6->12??7->13?? 8->14?? 9->15

10->15?11->15?? 12->15?? 13->15?14->15?? 15->15

#include

#include

#include

usingnamespacestd;

intmain(intargc,char** argv)

{

//載入圖片

inti=0, j=0, temp=0;

IplImage * img = cvLoadImage("D:\\2.jpg", CV_LOAD_IMAGE_GRAYSCALE);//圖片路徑

intheight = img->height;

intwidth? = img->width;

intstep? = img->widthStep;

uchar *data = (uchar*)img->imageData;

floatsize = height*width;

//直方圖

unsignedinthist[256] = {0};

for(i=0; i

{

for(j=0; j

{

temp = data[i*step+j];

hist[temp]++;

}

}

//歸一化直方圖

floathistPDF[256] = {0};

for(i=0; i<255; i++)

{

histPDF[i]=(float)hist[i]/size;

}

//累積直方圖

floathistCDF[256] = {0};

for(i=0; i<256; i++)

{

if(0==i) histCDF[i] = histPDF[i];

elsehistCDF[i] = histCDF[i-1] + histPDF[i];

}

//直方圖均衡化,映射

inthistEQU[256] = {0};

for(i=0; i<256; i++)

{

histEQU[i] = (int)(255.0* histCDF[i] +0.5);

}

for(i=0; i

{

for(j=0; j

{

temp = data[i*step+j];

data[i*step+j] = histEQU[temp];

}

}

cvNamedWindow("demo", CV_WINDOW_AUTOSIZE);

cvShowImage("demo", img);

cvWaitKey(0);

cvDestroyWindow("demo");

cvReleaseImage(&img);

return0;

}

5、線性變換

y=a*x+b的方式,其中x表示原圖,y表示輸出圖像。

a=1,b=0,y和x相同

a>1對比度增強,a<1對比度減弱

b>0亮度增強,b<0亮度減弱

6、亮度、飽和度調(diào)整

https://blog.csdn.net/mao0514/article/details/47041099

通常在RGB色彩空間調(diào)整亮度與飽和度不是很直觀,而HSL彩色空可以很直觀表示出

每個像素的飽和度與亮度。所以首先讀取圖像的像素RGB值然后再轉(zhuǎn)換到HSL空間得

到飽和度與亮度值,調(diào)整以后再從HSL空間轉(zhuǎn)換到RGB空間的RGB值,對每個像素完

成這樣的調(diào)整就完成圖像的亮度與飽和度調(diào)整。

關(guān)于RGB與HSL色彩空間的轉(zhuǎn)換

代碼:http://lib.csdn.net/article/css3/52059


轉(zhuǎn)換公式:


7、一種計算圖像曝光度(Exposure)的方法

https://blog.csdn.net/grafx/article/details/45619731

下面是基于opencv的相關(guān)代碼示例,strength范圍可以設(shè)置為-2.0到2.0:

// strength范圍[-2.0, 2.0]

int row = inputImg.rows;

int step = inputImg.step;

uchar* pInputImg = inputImg.data;

uchar* pOutputImg = outputImg.data;

for (int i = 0; i < row * step; i++)

{

pOutputImg[i] = (uchar)min_uchar(255, max_uchar(0, pInputImg[i] * pow(2, strength)));

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容