圖像處理算法_第1頁(yè)
圖像處理算法_第2頁(yè)
圖像處理算法_第3頁(yè)
圖像處理算法_第4頁(yè)
圖像處理算法_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1. 直方圖.if(m_Image.IsNull()return;int h=m_Image.GetHeight();int w=m_Image.GetWidth();int count256;OnGray();memset(count,0,sizeof(int)*256);/數(shù)組初始化for (int i=0;ih;i+)/統(tǒng)計(jì)數(shù)據(jù)for (int j=0;jw;j+)(countm_Image.m_pBits0ij)+; double p256=0.00; /統(tǒng)計(jì)概率for (int i=0;i256;i+)pi=(double)counti/a; /*很重要,先轉(zhuǎn)換,后賦值。/上面為直方

2、圖,加上下面為均衡化/double s256=0.0; /變換函數(shù)for(int i=0;i256;i+)if (i=0)si=pi;elsesi=si-1+pi; int b=0; /變換灰度等級(jí)for (int i=0;ih;i+)for (int j=0;jw;j+)int c=m_Image.m_pBits0ij;b=256*sc;m_Image.m_pBits0ij=b;m_Image.m_pBits1ij=b;m_Image.m_pBits2ij=b;Invalidate(1);2. 直方圖規(guī)格化int h=m_Image.GetHeight();int w=m_Image.Get

3、Width();size=w*h;int count256=0;/統(tǒng)計(jì)灰度值for (int i=0;ih;i+)for (int j=0;jw;j+)(countm_Image.m_pBits0ij)+;double p0256=0.0;/統(tǒng)計(jì)每個(gè)灰度級(jí)概率for (int i=0;i256;i+)p0i=(double)counti/(size);double s0256=0.0;/均衡概率和for(int i=0;i256;i+)if (i=0)s0i=p0i; elses0i=s0i-1+p0i;double p1256=0.0;/規(guī)定灰度級(jí)概率for(int i=0;i256;i+)

4、p1i=(double)(i+128)/(256*256);double s1256=0.0;for(int i=0;i256;i+)/規(guī)定灰度級(jí)概率和 if (i=0)s1i=p1i; elses1i=s1i-1+p1i;double count0256=0.0;for (int i=0;i256;i+)/找最小的規(guī)定灰度級(jí)與原灰度級(jí)對(duì)應(yīng)double min0=2,minj=0;for (int j=0;j256;j+)if (abs(s0i-s1j)min0)min0=abs(s0i-s1j);minj=j;count0i=minj;for (int i=0;ih;i+)for (int

5、j=0;jw;j+)m_Image.m_pBits0ij=count0m_Image.m_pBits0ij;m_Image.m_pBits1ij=count0m_Image.m_pBits0ij;m_Image.m_pBits2ij=count0m_Image.m_pBits0ij; Invalidate(1);3. 自適應(yīng)均值濾波 int max_template=dlg.m_max_template; int min_template=dlg.m_min_template; int copy_min_template=min_template; int val=0;/中間值 m_Image

6、.m_nBits= (BYTE*)new BYTE*3;/開辟三維空間 for (int i=0;i3;i+) m_Image.m_nBitsi=(BYTE*)new BYTE*h; for (int i=0;i3;i+) for (int j=0;jh;j+) m_Image.m_nBitsij=new BYTEw; OnGray();/轉(zhuǎn)灰度圖像 int *Green=new intmax_template*max_template;/開辟數(shù)組空間 int *Blue=new intmax_template*max_template; int *Red=new intmax_templat

7、e*max_template; CCommon com;/調(diào)用公共類中函數(shù) for (int i=(max_template-1)/2;ih-(max_template-1)/2;i+) for (int j=(max_template-1)/2;jw-(max_template-1)/2;j+) loop1: int Gcount=0, Bcount=0, Rcount=0;/數(shù)組清零 for (int m=i-(min_template-1)/2;m=i+(min_template-1)/2;m+) for (int n=j-(min_template-1)/2;n0&A020&B020)

8、/判斷此點(diǎn)是否為最大最小值 val=GreenGcount/2; else val=com.Middle(Green,min_template,min_template); else if (min_templatemax_template)/判斷是否小于最大模板 min_template+=2; goto loop1; else val=com.Middle(Green,min_template,min_template); m_Image.m_nBits0ij=val;m_Image.m_nBits1ij=val;m_Image.m_nBits2ij=val;min_template=co

9、py_min_template; 4. 椒鹽噪聲 double para2=dlg.m_pepper,dlg.m_salt;CCommon com;for (int i=0;ih;+i)for (int j=0;jw;+j)int temp=0;if (com.Random()=1-para1)temp=500;elsetemp=0;m_Image.m_pBits0ij=(m_Image.m_pBits0ij+temp)255?255:(m_Image.m_pBits0ij+temp)255?255:(m_Image.m_pBits1ij+temp)255?255:(m_Image.m_pBi

10、ts2ij+temp)0?0:(m_Image.m_pBits2ij+temp);5. 傅里葉變換 CCommon com;int h_extend=1;/圖像進(jìn)行擴(kuò)展,尋找2的冪次方int w_extend=1;int h_index=0;int w_index=0; while(h_extend=h) h_extend*=2;h_index+; while(w_extend=w)w_extend*=2;w_index+;complex*pTD=new complexsizeof(complex)*w_extend*h_extend;/分配內(nèi)存空間complex*pFD=new comple

11、xsizeof(complex)*w_extend*h_extend;for (int i=0;ih_extend*w_extend;i+)/把圖像補(bǔ)零pTDi=complex(0,0);for (int i=0;ih;i+)/把圖像的值傳給pTDfor (int j=0;jw;j+)pTDi*w_extend+j=m_Image.m_pBits0ij*(pow(-1.0,(i+j);/把頻譜搬移到中心for (int i=0;ih_extend;i+)com.FFT(&pTDw_extend*i,&pFDw_extend*i,w_index);/對(duì)w方向進(jìn)行快速傅立葉變換for (int i

12、=0;ih_extend;i+)/把pFD進(jìn)行轉(zhuǎn)置,即進(jìn)行行列變換,即使不是矩形for (int j=0;jw_extend;j+)pTDh_extend*j+i=pFDw_extend*i+j;/錯(cuò)誤點(diǎn)!for (int i=0;iw_extend;i+)com.FFT(&pTDh_extend*i,&pFDh_extend*i,h_index);/對(duì)w方向進(jìn)行快速傅立葉變換,實(shí)質(zhì)是對(duì)h方向進(jìn)行快速傅立葉變換for (int i=0;ih_extend;i+)/對(duì)變換結(jié)果進(jìn)行轉(zhuǎn)置,變回原圖形for (int j=0;jw_extend;j+)pTDw_extend*i+j=pFDh_exte

13、nd*j+i;for (int i=0;ih_extend;i+)for (int j=0;j255)?255:temp;m_Image_temp.m_pBits0ij=temp;m_Image_temp.m_pBits1ij=temp;m_Image_temp.m_pBits2ij=temp;6. HIS變換CCommon com;CHSI Dlg;/剛開始一直蹦,原因onInitDialog用CComboBoxEx*if (Dlg.DoModal()!=IDOK)return;for (int i=0;ih;i+)for (int j=0;jw;j+)double R=m_Image.m_

14、pBits0ij;double G=m_Image.m_pBits1ij;double B=m_Image.m_pBits2ij;double H,S,I;I=(R+G+B)/3;double num=(2*R-G-B)/2;double den=sqrt(R-G)*(R-G)+(R-B)*(G-B);if (den=0)den=0.01;double cosThita=acos(num/den);if (B=G) /規(guī)劃的0-1之間H=cosThita/2*pi;elseH=(2*pi-cosThita)/2*pi;int a3=R,G,B;int minrgb=com.Min(a,1,3)

15、;den =R+G+B;if (den=0)den=0.01;S=1-3*minrgb/den;switch(Dlg.m_index)case 0:m_Image.m_pBits0ij=(H*255+0.5);/將分量都擴(kuò)展的0到255區(qū)間,以便顯示。+0.5是為了四舍五入m_Image.m_pBits1ij=(H*255+0.5);m_Image.m_pBits2ij=(H*255+0.5);break;case 1:m_Image.m_pBits0ij=(S*255+0.5);/將分量都擴(kuò)展的0到255區(qū)間,以便顯示。+0.5是為了四舍五入m_Image.m_pBits1ij=(S*255

16、+0.5);m_Image.m_pBits2ij=(S*255+0.5);break;case 2:m_Image.m_pBits0ij=I+0.5;/將分量都擴(kuò)展的0到255區(qū)間,以便顯示。+0.5是為了四舍五入m_Image.m_pBits1ij=I+0.5;m_Image.m_pBits2ij=I+0.5;break;case 3:m_Image.m_pBits0ij=(H*255+0.5);/將分量都擴(kuò)展的0到255區(qū)間,以便顯示。+0.5是為了四舍五入m_Image.m_pBits1ij=(S*255+0.5);m_Image.m_pBits2ij=I+0.5;break;defau

17、lt: /要考慮全面break;Invalidate(TRUE);7. 灰度圖像降級(jí)byte max1=0,max2=0,max3=0,min1=0,min2=0,min3=0;float a;for (int j=0;jh;j+)for (int k=0;kw;k+)BYTE b=m_Image.m_pBits0jk;/B BYTE g=m_Image.m_pBits1jk;/GBYTE r=m_Image.m_pBits2jk;/GBYTE ave=(b+g+r)/3;/變灰度ave=ave/8; /降級(jí)m_Image.m_pBits0jk=ave;/不能少,為了圖像升級(jí)255做準(zhǔn)備。m_

18、Image.m_pBits1jk=ave;m_Image.m_pBits2jk=ave;for(int m=0;mh;m+)/最大值for(int n=0;n=max1)max1=m_Image.m_pBits0mn;for(int m=0;mh;m+)/最小值 for(int n=0;nw;n+) if(m_Image.m_pBits0mn=min1) min1=m_Image.m_pBits0mn; for(int m=0;mh;m+)/升級(jí)到255for(int n=0;nw;n+)a=255*(m_Image.m_pBits0mn-min1)/(max1-min1);m_Image.m

19、_pBits0mn=a;m_Image.m_pBits1mn=a;m_Image.m_pBits2mn=a;8. 均值濾波m_Image.m_nBits= (BYTE*)new BYTE*3; for(int i=0;i3;i+) m_Image.m_nBitsi = (BYTE*)new BYTE*h; for (int i=0; i3; i+) for (int j=0; jh; j+) m_Image.m_nBitsij=new BYTEw; int templates9= 1,1,1, 1,1,1, 1,1,1;for (int i=1;ih-1;i+)/高斯平滑for (int j=

20、1;jw-1;j+)int sum3=0,0,0;int index3=0,0,0;for (int m=i-1;m=i+1;m+)for (int n=j-1;n=j+1;n+)sum0+=m_Image.m_pBits0mn*templatesindex0+;sum1+=m_Image.m_pBits1mn*templatesindex1+;sum2+=m_Image.m_pBits2mn*templatesindex2+;sum0/=9;sum1/=9;sum2/=9;m_Image.m_nBits0ij=sum0;m_Image.m_nBits1ij=sum1;m_Image.m_nB

21、its2ij=sum2;for (int i=1;ih-1;i+)for (int j=1;jw-1;j+)m_Image.m_pBits0ij=m_Image.m_nBits0ij;m_Image.m_pBits1ij=m_Image.m_nBits1ij;m_Image.m_pBits2ij=m_Image.m_nBits2ij;9. 中值濾波m_Image.m_gits=(BYTE*)new BYTE*3;/定義三個(gè)二維數(shù)組(三維數(shù)組);分配三維動(dòng)態(tài),創(chuàng)建一個(gè)空?qǐng)D像。for(int i=0;i3;i+)m_Image.m_gitsi=(BYTE*)new BYTE*h;for(int i

22、=0;i3;i+)for(int j=0;jh;j+)m_Image.m_gitsij=new BYTEw;for (int i=1;ih-1;i+)/取均值for (int j=1;jw-1;j+)int Rsum9=0,0,0;int Gsum9=0,0,0;int Bsum9=0,0,0;int index3=0,0,0;for (int m=i-1;m=i+1;m+)for (int n=j-1;n=j+1;n+)Rsumindex0+=m_Image.m_pBits0mn;Gsumindex1+=m_Image.m_pBits1mn;Bsumindex2+=m_Image.m_pBi

23、ts2mn;sort(Rsum,Rsum+8);sort(Gsum,Gsum+8);sort(Bsum,Bsum+8);m_Image.m_gits0ij=Rsum4;m_Image.m_gits1ij=Gsum4;m_Image.m_gits2ij=Bsum4;10.CCommon com;for (int i=0;ih;+i)for (int j=0;jw;+j)int a=64;/是把高斯噪聲值放大64倍,但沒平移,方差為0,,均值為1;如灰度值為負(fù)值,則灰度值=255+負(fù)值。m_Image.m_pBits0ij=(m_Image.m_pBits0ij+com.Gauss()*a);m_

24、Image.m_pBits1ij=(m_Image.m_pBits1ij+com.Gauss()*a);m_Image.m_pBits2ij=(m_Image.m_pBits2ij+com.Gauss()*a);11. Common 文件void CCommon:FFT(complex * TD,complex * FD,int index)int dotcount=0;/傅立葉變換點(diǎn)數(shù)int bfsize=0,p=0;/中間變量double angle;/角度complex *W,*X1,*X2,*X;/定義四個(gè)復(fù)數(shù)dotcount=1index;/傅立葉變換總點(diǎn)數(shù)。W=new comple

25、xsizeof(complex)*dotcount/2;/分配內(nèi)存空間X1=new complexsizeof(complex)*dotcount;X2=new complexsizeof(complex)*dotcount;for (int i=0;idotcount/2;i+)/計(jì)算加權(quán)系數(shù)angle=-i*2*pi/dotcount;Wi=complex(cos(angle),sin(angle);memcpy(X1,TD,sizeof(complex)*dotcount);/要標(biāo)準(zhǔn)for (int k=0;kindex;k+)/采用蝶形運(yùn)算進(jìn)行快速傅立葉變換,共index級(jí)for (i

26、nt j=0;j1k;j+)/蝶形節(jié)排序,從0開始排序bfsize=1(index-k);/每個(gè)蝶形節(jié)的點(diǎn)數(shù)for (int i=0;ibfsize/2;i+)/排序后蝶形節(jié)的一半,運(yùn)用周期性p=j*bfsize;/j個(gè)蝶形節(jié)的總點(diǎn)數(shù)。X2p+i=X1p+i+X1p+i+bfsize/2;X2p+i+bfsize/2=(X1p+i-X1p+i+bfsize/2)*Wi*(1k);/按頻域抽選的基-2 FFT算法,加權(quán)系數(shù)僅挑選一部分X=X1;X1=X2;X2=X;for (int j=0;jdotcount;j+)/倒序 變 順序p=0;for (int i=0;iindex;i+)if (j

27、&(1i)p+=1(index-i-1);/p=p+1(index-i-1)?FDj=X1p;delete W;delete X1;delete X2;int CCommon:Middle(int s,int a,int b)sort(s,s+a*b);return s(a*b-1)/2;double CCommon:Random(void)/0到1之間的隨機(jī)數(shù)/srand(unsigned)time(NULL); double rand1=rand()/(double)RAND_MAX);return rand1;int CCommon:Min(int s,int a,int b)sort(

28、s,s+a*b);return s0;double CCommon:Gauss(void)/Box-Muller變換:把0-1之間的隨機(jī)數(shù),變成均值為0,方差為1,高斯分布的隨機(jī)數(shù)static bool hasSpare = false;static double rand1, rand2;if(hasSpare)hasSpare = false;return sqrt(rand1) * sin(rand2);hasSpare = true;rand1 = rand() / (double) RAND_MAX);/RAND_HAX=32767if(rand1 1e-100) rand1 = 1

29、e-100;rand1 = -2 * log(rand1);rand2 = (rand() / (double) RAND_MAX) * TWO_PI;return sqrt(rand1) * cos(rand2);12. /RGB空間轉(zhuǎn)換到 HIS空間void CImage_ProcessingView:OnRgbexchangeHsi() ?if(m_Image.IsNull() return;int w=m_Image.GetWidth();int h=m_Image.GetHeight();m_Image.m_NBits=(BYTE*)new BYTE*3; for (int i=0;

30、i3;i+) m_Image.m_NBitsi=(BYTE*)new BYTE*h; for (int i=0;i3;i+)for (int j=0;jh;j+)m_Image.m_NBitsij=new BYTEw; double H,S,I; double Up,Down,Angle; BYTE B,G,R,Min; CRgbEXChsiDlg hDlg;if (hDlg.DoModal()!=IDOK)return;for (int j=0;jh;j+)for (int k=0;kw;k+)B=m_Image.m_pBits0jk;G=m_Image.m_pBits1jk;R=m_Ima

31、ge.m_pBits2jk;Up=(2*R-G-B)/2.0;Down=sqrt(double(R-G)*(R-G)+(R-B)*(G-B);if (Down=0)Down=0.01;Angle=acos(Up/Down);if (B=G)H=Angle/(2*PI1); elseH=(2*PI1-Angle)/(2*PI1);Min=RG?R:G;Min=BMin?B:Min;S=1-3.0*Min/(B+G+R);I=(B+R+G)/3.0;switch(hDlg.index)case 0:m_Image.m_NBits0jk=int(H*255);m_Image.m_NBits1jk=i

32、nt(H*255);m_Image.m_NBits2jk=int(H*255);break;case 1:m_Image.m_NBits0jk=int(S*255);m_Image.m_NBits1jk=int(S*255);m_Image.m_NBits2jk=int(S*255);break;case 2:m_Image.m_NBits0jk=int(I);m_Image.m_NBits1jk=int(I);m_Image.m_NBits2jk=int(I);break;case 3:m_Image.m_NBits0jk=int(H*255);m_Image.m_NBits1jk=int(

33、S*255);m_Image.m_NBits2jk=int(I);break; for (int j=0;jh;j+)for (int k=0;kw;k+)m_Image.m_pBits0jk=m_Image.m_NBits0jk;m_Image.m_pBits1jk=m_Image.m_NBits1jk;m_Image.m_pBits2jk=m_Image.m_NBits2jk;Invalidate(1);delete m_Image.m_NBits;13/設(shè)置矩形框void CImage_ProcessingView:OnLButtonUp(UINT nFlags, CPoint poin

34、t)CClientDC dc(this);CBrush *pBrush=CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH);CBrush *pOldBrush=dc.SelectObject(pBrush);dc.Rectangle(CRect(m_ptOrigin,point);dc.SelectObject(pOldBrush);Rtopx=m_ptOrigin.x;Rtopy=m_ptOrigin.y;Rbottomx=point.x;Rbottomy=point.y;CScrollView:OnLButtonUp(nFlags, po

35、int);/彩色分割void CImage_ProcessingView:OnColorsegment() if(m_Image.IsNull() return;int w=m_Image.GetWidth();int h=m_Image.GetHeight();int Rw=Rbottomx-Rtopx; int Rh=Rbottomy-Rtopy; int D;/int D0=50;double a3=0,0,0; m_Image.m_NBits=(BYTE*)new BYTE*3; for (int i=0;i3;i+) m_Image.m_NBitsi=(BYTE*)new BYTE*

36、h; for (int i=0;i3;i+)for (int j=0;jh;j+)m_Image.m_NBitsij=new BYTEw; for(int j=Rtopy;jRbottomy;j+) for(int k=Rtopx;kRbottomx;k+)a0+=m_Image.m_pBits0jk;a1+=m_Image.m_pBits1jk;a2+=m_Image.m_pBits2jk;a0=a0/(Rw*Rh);a1=a1/(Rw*Rh);a2=a2/(Rw*Rh);for (int j=0;jh;j+) for (int k=0;k=2000) / 2000 閾值m_Image.m_

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論