void CSpectrumFrame::OnDefokus() { char str[300]; if(m_type_spectr == SPECTR) { if(this->m_type_plant == PAM) { CDialogDefokus dialog; dialog.m_apertura = m_apertura; dialog.m_length_wave = m_length_wave; dialog.m_iDem = this->m_iDem; dialog.m_k_ap_diaf = pow((6.0 / (dialog.m_Ccf * pow(10.0,7.0) * pow(dialog.m_length_wave, 3.0))), 0.25); dialog.UpdateD(); if(dialog.DoModal() == IDOK) { LLayer = m_length_wave; DLayer = dialog.m_apertura; CObjectFrameDefokus *m_object; CDialogInfo* DialogInfo = new CDialogInfo(NULL); DialogInfo->Create(IDD_INFO,NULL); DialogInfo->ShowWindow(SW_SHOW); DialogInfo->m_str.Format("Идет расчет дефокусировки..."); DialogInfo->UpdateData(FALSE); m_object = new CObjectFrameDefokus(m_fArroy, m_iDem, dialog.m_D, dialog.m_Ccf, dialog.m_Cxp, dialog.m_k_ap_diaf); m_object->Kvadrant = 0; m_object->GetOptimumCoefficient(); m_object->m_fPos_Const *= 0.8; m_object->ScaleView(); sprintf(str, "Визуализация Дефокусировка [%dx%d]", m_iDem, m_iDem); if (!m_object->Create(NULL,_TEXT(str),0, rectDefault, NULL)) return; m_object->MoveWindow(80,80,10000,10000); DialogInfo->CloseWindow(); delete DialogInfo; } } } else { AfxMessageBox("Визуализация находится только со спектра!!!",MB_OK); } }
void CMainFrame::ProcessingPAM() { //m_length_wave -> длина волны //m_distance_layer -> расстояние между слоями //m_apertura ->размер аппертуры CDialogInfo* DialogInfo = new CDialogInfo(NULL); DialogInfo->Create(IDD_INFO,NULL); LLayer=m_length_wave; DLayer=m_apertura; CSpectrumFrameLayers *m_image; CSpectrumFrameLayers *m_spectr; int i, j, k, Flag = 0; double a, u, v, fi, ph; int ImageSize=m_iDem_fasa; double step = 222./ImageSize; struct Complex z1, z2; char str[300]; // массив изображения BYTE *Image_R =new BYTE[ImageSize*ImageSize]; // спектр конечной реализации struct Complex *R=new struct Complex[ImageSize*ImageSize]; // массив ЧХ struct Complex *W=new struct Complex[ImageSize*ImageSize]; // временный комплексный массив struct Complex *TempComp=new struct Complex[ImageSize*ImageSize]; for(i=0; i<ImageSize; i++) { for(j=0; j<ImageSize; j++) { R[i*ImageSize+j].re=1; R[i*ImageSize+j].re=0; Image_R[i*ImageSize+j] = 1; } } //вывод коментария sprintf(str,"Погодтовка частотной характеристики"); m_wndStatusBar.SetPaneText(0,str,TRUE); DialogInfo->ShowWindow(SW_SHOW); DialogInfo->m_str.Format("Погодтовка частотной характеристики"); DialogInfo->UpdateData(FALSE); //подготовка частотной характеристики a = (M_PI*m_length_wave*m_distance_layer*(-1))/(m_apertura*m_apertura); for(i=0; i<ImageSize; i++) { if (i<(int)ImageSize/2) u = i*i; else u = (ImageSize-i)*(ImageSize-i); for(j=0; j<ImageSize; j++) { if(j<(int)ImageSize/2) v = j*j; else v = (ImageSize-j)*(ImageSize-j); fi = a*(u+v); cexp(fi, W[i*ImageSize+j]); } } //------------------------------------------------------------------------ // Начало реализации "слоевого" метода //------------------------------------------------------------------------ //PntLayer количество слоев for(k=0; k<PntLayer; k++) { sprintf(str,"Идет расчет слоя #%d из %d",k+1,PntLayer); m_wndStatusBar.SetPaneText(0,str,TRUE); DialogInfo->ShowWindow(SW_SHOW); DialogInfo->m_str.Format("Идет расчет слоя #%d из %d",k+1,PntLayer); DialogInfo->UpdateData(FALSE); //DifPhaseModul глубина фазовой модуляции m_fasa->ReModeling(m_iDem_fasa,m_type_fasa,m_cd_fasa,0); m_ampl->ReModeling(m_iDem_ampl,m_type_ampl,m_cd_ampl,0); ph = 2.*M_PI*DifPhaseModul/(double)ImageSize; for(i=0; i<ImageSize; i++) { for(j=0; j<ImageSize; j++) { fi = (m_fasa->m_bArroy[i*ImageSize+j])*ph; z1.re =(float)(m_ampl->m_bArroy[i*ImageSize+j]*cos(fi)/(float)ImageSize); z1.im = (float)(m_ampl->m_bArroy[i*ImageSize+j]*sin(fi)/(float)ImageSize); z2 = R[i*ImageSize+j]; cmul(z1, z2, R[i*ImageSize+j]); TempComp[i*ImageSize+j] = R[i*ImageSize+j]; } } //преобразование фурье 1-ое Fft_forward(TempComp); // Умножение на частотную характеристику свободного пространства if (k != PntLayer-1) { for(i=0; i<ImageSize; i++) { for(j=0; j<ImageSize; j++) { cmul(TempComp[i*ImageSize+j], W[i*ImageSize+j], z1); TempComp[i*ImageSize+j] = z1; } } } else { for(i=0; i<ImageSize; i++) { for(j=0; j<ImageSize; j++) { z2 = TempComp[i*ImageSize+j]; cmul(TempComp[i*ImageSize+j], W[i*ImageSize+j], z1); TempComp[i*ImageSize+j] = z1; W[i*ImageSize+j] = z2; } } sprintf(str,"Спектр изображения:"); m_wndStatusBar.SetPaneText(0,str,TRUE); DialogInfo->ShowWindow(SW_SHOW); DialogInfo->m_str.Format("Погодтовка cпектра изображения."); DialogInfo->UpdateData(FALSE); m_spectr = new CSpectrumFrameLayers(m_iDem_ampl,TempComp); m_spectr->m_apertura=m_apertura; m_spectr->m_length_wave=m_length_wave; m_spectr->GetOptimumCoefficient(); m_spectr->m_fPos_Const*=100000; m_spectr->ScaleView(); m_spectr->m_type_spectr=SPECTR; m_spectr->m_type_plant=PAM; sprintf(str,"Спектр изображения [%dx%d]",m_iDem_ampl,m_iDem_ampl); if (!m_spectr->Create(NULL,_TEXT(str),0, rectDefault, NULL)) return; m_spectr->MoveWindow(120,120,10000,10000); } // Обратное преобразование Фурье Fft_back(TempComp); } sprintf(str,"Изображение:"); m_wndStatusBar.SetPaneText(0,str,TRUE); DialogInfo->ShowWindow(SW_SHOW); DialogInfo->m_str.Format("Погодтовка изображения."); DialogInfo->UpdateData(FALSE); m_image = new CSpectrumFrameLayers(m_iDem_ampl,TempComp); m_image->Kvadrant=0; m_image->m_fPos_Const=0.00000000001; m_image->ScaleView(); m_image->m_type_spectr=IMAGE; sprintf(str,"Изображение [%dx%d]",m_iDem_ampl,m_iDem_ampl); if (!m_image->Create(NULL,_TEXT(str),0, rectDefault, NULL)) return; DialogInfo->DestroyWindow(); m_image->MoveWindow(80,80,10000,10000); m_spectr->BringWindowToTop(); delete[] W; delete[] R; delete[] TempComp; }