摘 要: 數(shù)字圖片在人們生活中越來越普遍,隨時隨地拍照即可,已經(jīng)成為人們生活中很重要的一部分,同時對圖片處理的需求也越來越多。如何更好地處理圖片,已經(jīng)成為更多相關(guān)研究的重點??偨Y(jié)了一些常見的圖片處理算法及相關(guān)圖片處理軟件,方便大家借鑒及應(yīng)用。
關(guān)鍵詞: 數(shù)字圖像;圖像處理;信息傳輸;圖像處理算法
0 引言
隨著電子產(chǎn)品的快速進步,數(shù)字圖片在人們生活中越來越普遍,隨時隨地可以拍照,圖片處理的需求越來越普遍,不管用手機還是電腦,已經(jīng)成為人們生活很重要的一部分。
目前圖片處理軟件特別多,各式各樣的,受不同用戶喜歡的。對于一般用戶,網(wǎng)絡(luò)上的圖片處理軟件夠用了。對于特殊用戶,想對圖片的精細度要求更高的相關(guān)研究人員,或需要其他特殊處理等,網(wǎng)絡(luò)上的處理軟件是遠遠不夠用的。這需要相關(guān)開發(fā)人員對不同人員的要求進行單獨處理。
1 相關(guān)研究及圖像處理軟件
參考文獻[1]介紹了制作縮略圖、圖片加水印、顯示隨機圖像的過程實現(xiàn),但沒有具體實現(xiàn)過程和圖片顯示效果。參考文獻[2]中分析了基于最不顯著特征位替代(LSB)算法基本原理,并且對加密處理進行改進,加入輸入像素預(yù)測和邊界剩余信息分析壓縮,通過VC+和編譯平臺實現(xiàn)過程。參考文獻[3]主要研究如何將數(shù)字圖像轉(zhuǎn)換成色值矩陣的算法。
圖像處理軟件是用于處理圖像信息的各種應(yīng)用軟件的總稱,專業(yè)的圖像處理軟件有Adobe的Photoshop系列;基于應(yīng)用的處理管理、處理軟件Picasa等,還有國內(nèi)很實用的大眾型軟件彩影,非主流軟件有美圖秀秀,動態(tài)圖片處理軟件有Ulead GIF Animator、gif movie gear等。
以上都是現(xiàn)有軟件,功能固定,每一點的效果也是程序事先編程好的,如何做到隨心處理,精確到每一點像素,通過功能內(nèi)部處理圖片的變化呢?
本文總結(jié)以下幾個圖片處理算法實例,詳細說明對同一幅圖片進行不同處理是如何變化其RGB值的。圖片點的處理精確到每一個點的RGB,對圖片處理要求達到精細。圖片不同的顯示效果可以根據(jù)自己的需求來調(diào)整。
本文主要使用C#語言,對圖片的不同效果進行處理,使用的方法和調(diào)用的技術(shù)手段都不一樣。
2 本文算法
下面是對某一圖片的初始定義:
圖片寬度:int Pheight;獲取圖片寬度:int pwidth;圖片矩形:Rectangle rect;
初始化Bitmap對象:Bitmap mybmp;內(nèi)存像素處理:BitmapData bmpdata;
?。?)底片效果相關(guān)核心算法
算法的主要原理就是先獲得每一點的像素值,然后再用255取反顏色值重新賦值到對應(yīng)的點。
if(curbmp==null){return;}
unsafe{int offset=bmpdata.Stride-pwidth*3;
byte*bptr=(byte*)(bmpdata.Scan0);
for(intx=0;x<pwidth;x++)
{for(inty=0;y<Pheight;y++)
{ bptr[0]=(byte)(255-bptr[0]);bptr[1]=(byte)(255-bptr[1]);
bptr[2]=(byte)(255-bptr[2]);bptr+=3;}bptr+=offset;}//用255取反
curbmp.UnlockBits(bmpdata);}
this.effectPicbox.Image=curbmp;
?。?)浮雕效果相關(guān)核心算法
此算法的原理主要是獲得每一個像素的RGB值,再減去相鄰像素的RGB值,然后加128得到新的RGB值賦值給原像素點。主要核心算法如下:
IntPtr ptr=mydata.Scan0;int pixels=Pwidth*Pheight*3;
byte[]rgbValues=new byte[pixels];Marshal.Copy(ptr,rgbValues,0,pixels);
int r=0,g=0,b=0;
for(int i=0;i<pixels-6;i+=3)
{r=Math.Abs(rgbValues[i+5]-rgbValues[i+2]+128);
//相鄰像素R的值
g=Math.Abs(rgbValues[i+4]-rgbValues[i+1]+128);
b=Math.Abs(rgbValues[i+3]-rgbValues[i]+128);
if(r>255)r=255;if(r<0)r=0;if(g>255)g=255;if(g<0)g=0;
if(b>255)b=255;if(b<0)b=0;
rgbValues[i]=(byte)b;rgbValues[i+1]=(byte)g;rgbValues[i+2]=(byte)r;}
Marshal.Copy(rgbValues,0,ptr,pixels);mybmp.UnlockBits(mydata);
this.effectPicbox.Image=mybmp;
?。?)黑白效果相關(guān)核心算法
將彩色數(shù)字圖片處理成黑白效果通常有3種算法:
?、僮畲笾捣ǎ簩⒚恳粋€像素點的R、G、B中3個值等于其中的最大值。
?、谄骄捣ǎ簩⒚恳粋€像素點的R、G、B值等于原3個R、G、B值的平均值。
?、奂訖?quán)平均值法:對每一個像素點的R、G、B值進行加權(quán)。
本文主要采用第3種加權(quán)平均值的算法主要的算法原理如下:首先獲取每一點的RGB值,分別對每一個像素RGB賦不同的權(quán)值,賦給臨時變量,然后獲得的臨時變量得到的值賦給原像素的RGB值,且RGB 3個值是相同的。
IntPtr ptr=mydata.Scan0;int bytes=pwidth*Pheight*3;byte[]rgbValues=new byte[bytes];
Marshal.Copy(ptr,rgbValues,0,bytes);byte temp=0;
for(int i=0;i<bytes-3;i+=3)
{temp=(byte)(rgbValues[i+2]*.58+rgbValues[i+1]*.22+rgbValues[i]*0.1);
rgbValues[i]=rgbValues[i+1]=rgbValues[i+2]=temp;}
//賦值
Marshal.Copy(rgbValues,0,ptr,bytes);mybmp.UnlockBits(mydata);
this.effectPicbox.Image=mybmp;}
catch(System.ArgumentException e){MessageBox.Show(e.ToString());}
?。?)柔化效果相關(guān)核心算法
原理:利用高斯模板,將其每個像素點進行平滑處理,當前像素顏色值差距較大的像素和周圍像素取平均值來進行平滑處理,整個圖片變得很柔和。
int offset=bmpdata.Stride-pwidth*3;
unsafe{byte*ptr=(byte*)bmpdata.Scan0;//地址指針
int[]Gauss={1,2,1,2,4,2,1,2,1};//高斯模板
try{ptr+=bmpdata.Stride+3;
for(inti=1;i<pwidth-1;i++)
{for(intj=1;j<Pheight-1;j++)
{int r=0,g=0,b=0;int index=0;
for(int col=-1;col<=1;col++)
{for(int row=-1;row<=1;row++)
{byte*temp=ptr;temp=ptr+bmpdata.Stride*row+col*3;
r+=temp[2]*Gauss[index];g+=temp[1]*Gauss[index];b+=temp[0]*Gauss[index];
index++;}}
r/=16;g/=16;b/=16;if(r>255)r=255;if(r<0)r=0;if(g>255)g=255;
if(g<0)g=0;if(b>255)b=255;//邊緣值的處理
if(b<0)b=0;
(ptr-bmpdata.Stride-3)[2]=(byte)r;(ptr-bmpdata.Stride-3)[1]=(byte)g;
(ptr-bmpdata.Stride-3)[0]=(byte)b;ptr+=3;}ptr+=offset;}}
catch(System.Exception e){MessageBox.Show(e.ToString());}}
mybmp.UnlockBits(bmpdata);this.effectPicbox.Image=mybmp;
?。?)銳化效果相關(guān)核心算法
該算法的原理與上面的柔和主要核心代碼差不多,但主要處理點不一樣,此算法主要是利用拉普拉斯模版,突出顏色值比較大的像素點。核心代碼不同處如下:
int[]Laplacian={-1,-1,-1,-1,9,-1,-1,-1,-1};
//拉普拉斯模板
r+=temp[2]*Laplacian[index];g+=temp[1]*Laplacian[index];b+=temp[0]*Laplacian[index];index++;}}
3 實驗結(jié)果
圖1~圖6為實驗效果圖。
通過上面圖片的效果可以看出,本文算法是真實有效的、可實施的。
4 結(jié)論
本文將常見的圖片效果及相應(yīng)的算法顯示出來,通過相應(yīng)的算法及實驗結(jié)果可證明算法是可實施的。
現(xiàn)實中圖片處理算法遠不止這些,這里不再一一列舉,本文列舉一些常見圖片處理算法的處理,供大家借鑒使用。其他圖片處理算法主要原理也是在圖片像素點上處理著手,可根據(jù)自己的想法,將圖片處理成更多效果。
圖片處理多種多樣,視覺效果要求也千差萬別,隨著網(wǎng)絡(luò)的發(fā)展將不斷優(yōu)化算法使其更加合理地應(yīng)用。
參考文獻
[1] 王濤.ASP動態(tài)網(wǎng)頁圖片的處理[J].佳木斯大學(xué)學(xué)報(自然科學(xué)版),2005,23(2):229-232.
[2] 余靜,馬博.基于LSB圖像水印加密技術(shù)改進及實現(xiàn)[J].煤炭技術(shù),2010,29(2):180-182.
[3] 張祖蓮,王命全,李景林.基于圖像色值轉(zhuǎn)換算法[J].微型機與應(yīng)用,2014,33(14):36-37.
[4] 王命全,張祖蓮,李景林.防Web攻擊的登錄窗口程序設(shè)計[J].微型機與應(yīng)用,2014,33(5):5-7.