1、/ double m_Threshold; char * m_buffer;/ Dialog Data /AFX_DATA(CCFARdialog) enum IDD = IDD_DIALOG2 ; double m_pf; int m_method; BOOL m_simple; /AFX_DATA/ Overrides / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CCFARdialog) protected: virtual void DoDataExchange(CDataExchange* pDX);
2、/ DDX/DDV support /AFX_VIRTUAL/ Implementationprotected: / Generated message map functions /AFX_MSG(CCFARdialog) virtual void OnOK(); virtual BOOL OnInitDialog(); /AFX_MSG DECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previ
3、ous line.#endif / !/ CFARdialog.cpp : implementation file#include stdafx.hDIBDisplay.hCFARdialog.h#include Histogram.hstdio.hfloat.hiostreamDibImage.husing namespace std;#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif#define PI 3.1415926CCFARdialog:CCFARdialog
4、(CWnd* pParent /*=NULL*/) : CDialog(CCFARdialog:IDD, pParent) /AFX_DATA_INIT(CCFARdialog) m_pf = 0.0; m_method = 0; m_simple = FALSE; /AFX_DATA_INITvoid CCFARdialog:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CCFARdialog) DDX_Text(pDX, IDC_EDIT1, m_pf); DDX_Text(pDX
5、, IDC_EDIT3, m_method); DDX_Text(pDX, IDC_EDIT2, m_simple); /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CCFARdialog, CDialog) /AFX_MSG_MAP(CCFARdialog) /AFX_MSG_MAPEND_MESSAGE_MAP()/ CCFARdialog message handlersOnOK() / TODO: Add extra validation here UpdateData(TRUE); / Guass threshold precalculate double t1001
6、00; double temp; int k,i,m; double n; double h,g,p; double modified=1.0; double a=5.0; double b=100.0; double e1=1e-8; double e2=1e-5; LONG lLineBytes; / 图像每行的字节数 lLineBytes = WIDTHBYTES(m_lWidth * 8); do h=(double)(b-a)/2; t00=h*(exp(-a*a/2.0)/sqrt(2*PI)+exp(-b*b/2.0)/sqrt(2*PI); k=1; n=1; do /Romb
7、erg算法 g=0; for (i=1;i=int(n);i+) temp = (a+(2*i-1)*h); g=g+1/sqrt(2*PI)*exp(-temp*temp/2); tk0=(tk-10/2)+(h*g); for (m=1;me1); /自定义误差限e if(t0m modified/=2; a+=modified; else break; while(fabs(t0m-m_pf)e2); m_GaussNormThreshold=a; m_buffer = new char lLineBytes*m_lHeight; /m_lwidth*m_lHeight if(m_sim
8、ple=1) Simplify(); else if(m_simple=0) if(m_method=1) DoDetectCA(); else if(m_method=2) DoDetectOS(); AfxMessageBox(Input error); else window=NULL; m_buffer=NULL;OnOK();DoDetectCA() int i,j; int k=0; int m=0; double temp=0.0; double mu=0.0; double sigma=0.0; unsigned char * lpmodified; unsigned char
9、 * lpsave; / Normal for(i=0;m_lHeight; for(j=0;jm_lWidth;j+) lpmodified = (unsigned char *)m_lpDIBBits + lLineBytes * i + j; lpsave = (unsigned char *)m_buffer + lLineBytes * i + j; m=Pit(i,j); mu=0.0; sigma=0.0; while (km) mu+=windowk; k+; k=0; mu/=m; while(km) sigma+=pow(windowk-mu),2); sigma=sqrt
10、(sigma/m); if(m_GaussNormThreshold*sigma+mu=30 | abs(j)=30) & m_lHeight(m+i) & (m+i)=0 & m_lWidth(n+j) & (n+j)=0) /判断是否属于环心 lpSrc = (unsigned char *)m_lpDIBBits + lLineBytes * (m+i) + (n+j); if(m_method=1) / CA-CFAR directly evalue windowk=*(lpSrc); k+; else / OS-CFAR ordering temp=*(lpSrc); if(k=0)
11、 window0=temp; k+; else while(pk) if(tempq;p-) windowp=windowp-1; windowq=temp; break; else p+; if(q=-1) windowk=temp; k+; p=0; q=-1; return k;Simplify() int i,j,m,n,p; int len=0; for(i=1;i=i+3) for(j=1;j=j+3) lpSrc = (unsigned char *)m_lpDIBBits + lLineBytes * i + j; for(m=-1;=1; for(n=-1;nn+) if(*
12、(lpSrc)n+j & n+j=0) lpSrc = (unsigned char *)m_lpDIBBits + lLineBytes * (m+i) + (n+j); lpsave = (unsigned char *)m_buffer + lLineBytes * (m+i) + (n+j); *lpsave=0; else if( m_lHeight=0 ) lpSrc = (unsigned char *)m_lpDIBBits + lLineBytes * (m+i) + (n+j); len=Pit(m+i),(n+j); if(m_method=1) for(p=0;plen;p+) mu+=windowp; mu/=len; sigma+=pow(windowp-mu),2); sigma=sqrt(sigma/len); mu = window(int)len/2-1; sigma = window(int)len/4*3-1-window(int)len/4-1; if( m_GaussNormThreshold*sigma+mu(*lpSrc) ) *lpsave=255; else *lpsave=0; *lpSrc=*lpsave;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1