摘 要: 數(shù)字圖片在人們生活中越來越普遍,隨時隨地拍照即可,,已經(jīng)成為人們生活中很重要的一部分,,同時對圖片處理的需求也越來越多。如何更好地處理圖片,,已經(jīng)成為更多相關(guān)研究的重點,。總結(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)核心算法
原理:利用高斯模板,將其每個像素點進行平滑處理,,當(dāng)前像素顏色值差距較大的像素和周圍像素取平均值來進行平滑處理,,整個圖片變得很柔和。
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.