




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村一二三產(chǎn)業(yè)融合對(duì)農(nóng)村農(nóng)業(yè)產(chǎn)業(yè)國(guó)際競(jìng)爭(zhēng)力的提升報(bào)告
- 《我要做好孩子》讀后感(集錦15篇)
- 瀝青混合料生產(chǎn)項(xiàng)目初步設(shè)計(jì)(僅供參考)
- 家居科技產(chǎn)業(yè)園項(xiàng)目建議書(參考模板)
- 共享自習(xí)室項(xiàng)目規(guī)劃設(shè)計(jì)方案(參考范文)
- 2025年浙江省麗水市龍泉市中考數(shù)學(xué)一模試卷
- 2025年中央機(jī)關(guān)及其直屬機(jī)構(gòu)錄用公務(wù)員考試+申論(地市級(jí))
- 醫(yī)療廢物信息平臺(tái)建設(shè)與管理
- 兒童心理教育課
- 四川省雅安市名山中學(xué)2023-2024學(xué)年高一上學(xué)期12月月考物理題 含解析
- 景區(qū)安全生產(chǎn)管理規(guī)章制度大全
- 消防司機(jī)交通安全課件
- 災(zāi)害風(fēng)險(xiǎn)評(píng)估模型-第5篇-全面剖析
- 廣東2025年03月資本市場(chǎng)學(xué)院(廣東)招考工作人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 前庭大腺炎膿腫護(hù)理教學(xué)
- 2025云南省安全員《A證》考試題庫(kù)及答案
- 腦梗合并肺炎患者的護(hù)理
- 腦出血手術(shù)護(hù)理查房
- 消毒供應(yīng)中心手工清洗操作流程
- 發(fā)電量管理考核辦法
- 面食節(jié)活動(dòng)方案
評(píng)論
0/150
提交評(píng)論