Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Выводы по эффективности предложенийСодержание книги
Поиск на нашем сайте
Экономическая эффективность использования разработанной программной модели очевидна. Затраты на разработку программы составляют 65672,11 рублей, а общая цена НИР - 108490,30 рублей, в то время как цена одного только осциллографа, необходимого для организации одного рабочего места в случае использования лабораторного макета, более С другой стороны, для аналогичных целей возможно приобретение лицензионного программного обеспечения и адаптация его для решения поставленных задач. При этом потребуется потратить значительное количество времени на адаптацию и материальных средств на приобретение лицензионного пакета программ. Так, цена лицензионного пакета MATLAB Individual составляет Таким образом, разработка данного проекта экономически целесообразна.
Заключение
Основные результаты дипломного проекта: 1. Исследована эффективность применения методов глобальной и локальной оптимизации в задачах весовой пространственно-временной фильтрации изображений. 2. Разработаны методика проведения и порядок выполнения лабораторной работы №1 «Исследование эффективности пространственно-временной обработки изображений с использованием статистик среднего ранга при наличии импульсных помех». 3. На примерах обработки набора тестовых изображений показана высокая эффективность применения оптимальной весовой пространственно-временной фильтрации изображений с использованием статистик среднего ранга. Библиографический список
1. Батищев Д.И. Поисковые методы оптимального проектирования. М.: Сов. радио, 1975. 2. Гемирштерн В.И., Коган В.М. Методы оптимального проектирования. М.: Энергоиздат. 1980. . Гуткин Л.С. Оптимизация РЭУ. М.: Сов. радио. 1975. . Рейклейтис Г., Рейвиндран А., Рэгсдел К. Оптимизация в технике. В 2-х книгах. М.: Мир. 1986. . Аоки М. Введение в методы оптимизации. Основы и приложения нелинейного программирования. М.: Наука. 1977. . Базара М., Шетти К. Нелинейное программирование. Теория и алгоритмы. М.: Мир. 1982. . Бейко И.В., Бублик Б.Н., Зинько П.Н. Методы и алгоритмы решения. Киев: Вища школа. 1983. . Васильев Ф.П. Численные методы решения экстремальных задач. М.: Наука. 1988. . Гусин С.Ю., Омельянов Г.А., Резников Г.А., Сироткин В.С. Минимизация в инженерных расчетах на ЭВМ. М.: Машиностроение, 1981. . Зангвилл У.И. Нелинейное программирование. М.: Сов. радио. 1973. . Моисеев Н.Н., Иванилов Ю.П., Столярова Е.М. Методы оптимизации. М.: Наука. 1978. . Гилл Ф., Мюррей У., Райт М. Практическая оптимизация. М.: Мир. 1985. . Пшеничный Б.Н., Данилин Ю.М. Численные методы в экстремальных задачах. М.: Наука. 1975. . Сухарев А.Г., Тимохов А.В., Федоров В.В. Курс методов оптимизации. М.: Наука. 1986. . Химмельблау Д. Прикладное нелинейное программирование: Пер. с англ. М.: Мир, 1975. . Фиакко А., Мак-Кормик Г. Нелинейное программирование. Методы последовательной безусловной минимизации. М.: Мир. 1972. . Численные методы условной оптимизации / Под ред. Ф. Гилла и У. Мюррея. М.: Мир. 1977. . Поповкин В.И., Маторин А.В. Синтез антенных решеток методом типа динамического программирования // Радиотехника и электроника, 1974. Т.19. №10. 19. Маторин А.В., Смирнов А.А. Двухэтапный численный метод решения задач синтеза многоэлементных тонкопроволочных антенн и устройств сверхвысоких частот // Радиотехника и электроника. 2001. Т. 46. №6. 20. Смирнов А.А. Исследование и разработка алгоритмов параметрического синтеза устройств СВЧ в радиотехнических системах: Автореферат дис. канд. техн. наук. Рязань: РГРТА, 2000. . Катковник В.Я. Непараметрическая идентификация и сглаживание данных: методы локальной аппроксимации. - М.: Наука, 1985. - 336 с. . Гонсалес Р., Вудс Р. Цифровая обработка изображений. М: Техносфера, 2005. . Хуанг Т.С. (ред.) Быстрые алгоритмы в цифровой обработке изображений. Преобразования и медианные фильтры. М: Радио и связь, 1984. . Прэтт В.К. Цифровая обработка изображений. М: Мир, 1982. . Ярославский Л.П. Введение в цифровую обработку изображений. М: Советское радио, 1989. . Рабинер Л.Р., Голд Б. Теория и применение цифровой обработки сигналов. М: Мир, 1988. . Под ред. Гилла Ф., Мюррея У. Численные методы условной оптимизации. М.: Мир, 1977. . Васина Л.В., Евдокимова Е.Н., Рыжкова А.В. Выполнение экономической части дипломного проекта: Методические указания. Рязань: РГРТУ, 2013. . Зайцев Ю.В. Безопасность и экологичность проекта. Рязань: РГРТУ, 2006. . СанПиН 2.2.2/2.4.1340-03. Гигиенические требования к ПЭВМ и организации работы. . ГОСТ 12.1.038-82. Электробезопасность. Предельно допустимые значения напряжений прикосновения и токов. . СНиП 23-05-95. Естественное и искусственное освещение. . ГОСТ 12.1.004-91. Пожарная безопасность. Общие требования. . НПБ 166-97. Нормы пожарной безопасности. Пожарная техника. Огнетушители. Требования к эксплуатации. . СанПиН 2.2.2.548-96. Гигиенические требования к микроклимату производственных помещений. . СанПиН 2.2.4.1191-03 «Электромагнитные поля в производственных условиях» . ГОСТ Р 50948-2001. Средства отображения информации индивидуального пользования. Общие эргономические требования и требования безопасности. Приложение
Листинг программы пространственно-временной обработки изображений
#define _Main_ /* Инициализация основных глобальных переменных */ #define _RUS_ /* Использовать русский язык в основных диалогах и кнопках */ #define _KEYS_ /* Включить определения основных клавиш на клавиатуре */
/* Определения для использования основных «классов» интерфейса */ #define Uses_ButtonBar #define Uses_Cluster #define Uses_ComboBox #define Uses_Count #define Uses_DTable #define Uses_Graph #define Uses_ImageBox #define Uses_ListBox #define Uses_FileList #define Uses_StaticText #define Uses_Table
/* Определение основных команд пользователя */ #define cmFileNew 100 #define cmFileOpen 101 #define cmFileSaveAs 102 #define cmFileView 103 #define cmResultsRun 110 #define cmResultsCalc 111 #define cmResultsSaveAs 112 #define cmHelpAbout 120 #define cmFilterWeights 130 #define cmFilterWeightsSave 131 #define cmOptParams 140 #define cmOptRun 150 #define ID_Inset1 200 #define ID_Inset2 300
#define SZI sizeof(int) #define SZF sizeof(float) #define MAX_POINTS 128 #define NIMAGE 9+2 #define IMAGE_W 360 #define IMAGE_H 240 #define PAL_SIZE 768
#include «font.h» #include «win.h» #include <conio.h> #include <dos.h> #include <fcntl.h> #include <float.h> #include <math.h> #include <io.h> #include <i86.h> #include <stdio.h> #include «histo.c» #include «filters2.c»
/* использование «класса» ImageBox */ #if defined (Uses_ImageBox)void PASCAL ImageBoxHandleEvent(LPList);void PASCAL ImageBoxRedraw(LPList);void PASCAL ImageBoxItemRedraw (LPList, LPListItem); #define HIMAGEBOX ImageBoxHandleEvent #define ImageBoxNew ButtonNew #endif #include «imagebox.c» aOf;*pImageBuff[NIMAGE],*pBuffer,*pImage;pProgName= «Обработка изображений»;aWinMainTitle[80],[80],[67]= «IMAGES\\»,[67]= «C:\\IMSS\\»,[13]= «test.pcx»; *pImageLine,*pPDF[2],*pHisto[2],[6]={0,0,20,0,255,15},[6]={0,255,15,0,0,0},[6]={0,255,15,0,0,0},[4]={2,9,1,0},[4]={0,50,1,0},[4]={0,0. 5,0. 01,0},[4]={0,0. 5,0. 01,0},[4]={-100,100,0. 01,0},=3, Var=0, Pa=0, Pb=0;float pQ,*pWF;*pWSigns;nNumPoints=33, nNP, nNumPoints2=33, nNP2,=0, nFilterationType=0, aOptions[]={1,},, nH, nSize;FilteringError[2];
/* Внешние переменные, необходимые для отображения результатов оптимизации */pImgItem[NIMAGE];pImg;pTable;
#include «opt2.c» *fp; LPSTR /* Названия параметров */[] = { «Апертура:», «СКО б.ш.:», «Pч:», «Pб:», «Параметр Q:», «Весовые коэффициенты», }, /* Виды фильтрации */[] = { «Вид фильтрации:», «Пространственная», «Временная», }, /* Типы фильтров */[] = { «Фильтр:», «Медианный», «Среднеарифметический», «Среднегеометрический», «Среднегармонический», «Среднеконтргармонический», «Модифицир. медианный», «Минимальный», «Максимальный», «Псевдомедианный», }, /* Ошибка фильтрации */[] = { «СКО на входе:», «СКО на выходе:», };
#define MASK_FPU (SW_INVALID|SW_ZERODIVIDE|SW_OVERFLOW|SW_UNDERFLOW)matherr (struct exception *e) {return 1;} /* LoadPCXFile - загружает файл в формате PCX */int PASCAL(int hFile, int *nW, int *nH, int *nSize, Boolean IsPaletteLoad) {i, j, chr, cnt;p1, p2, p3;
/* Узнаем размер файла, выделяем под него буфер памяти и читаем его туда */=(PCXHEADERPTR) (pBuffer=malloc (j=filelength(hFile)));(read (hFile, pBuffer, j)==-1) {(pBuffer);(hFile);False; }(hFile);
/* Проверяем 256 цветное ли это изображение или нет? */(pHDR->manuf!=10 || pHDR->encod!=1 || pHDR->bitpx!=8) {(pBuffer);False; }
/* Проверяем правильность размеров изображения */((i=(int) pHDR->bplin)!=IMAGE_W || (j=pHDR->y2-pHDR->y1+1)!=IMAGE_H) {(pBuffer);False; } /* Декодируем изображение по алгоритму RLE */ *nSize=(aSrv0 [1]=*nW=i)*(*nH=j); /* Распределяем память */(pImageLine==NULL) {=malloc (*nSize*sizeof(float));(i=0; i<NIMAGE; i++) pImageBuff[i]=malloc(*nSize); }=pBuffer+sizeof(PCXHEADER);(j=0; j<*nSize;) {=1;(((chr=*pImage++)&0xC0)==0xC0) {=chr&0x3F;=*pImage++; }(chr==7 || chr==15) chr -;if (chr==8) chr++;(i=0; i<cnt; i++) pImageBuff[0] [j++]=chr; } /* Декодируем и загружаем палитру, исключая системные регистры 7,8,15 */(IsPaletteLoad)(outp (0x3C8,0), i=1; i<PAL_SIZE+1; i+=3) {(i==22) p1=p2=p3=0x30;if (i==25) p1=p2=p3=0x20;if (i==46) p1=p2=p3=0xFF;{p1=pImage[i]>>2; p2=pImage [i+1]>>2; p3=pImage [i+2]>>2;}(0x3C9, p1); outp (0x3C9, p2); outp (0x3C9, p3); } /* Освобождаем буфер памяти под тестовое изображение */(pBuffer);True; }
/* GetFilterWeights - просмотр и редактирование весовых коэффициентов */int near PASCAL(void) {i, j, w=50, h=280, x=(MaxX-w)>>1, y=(MaxY-h+40)>>1, nNSS=SquareSize;**pWeights;*pNameWeights;p1;
/* Распределение памяти */=malloc (nNSS*sizeof (float *));=malloc (nNSS*sizeof(LPSTR));(i=0; i<nNSS; w+=69, i++) {[i]=malloc (nNSS*sizeof(float));[i]=calloc (nNSS, 4);(i+1, pNameWeights[i], 10);(j=0; j<nNSS; j++) pWeights[i] [j]=pWF [j*nNSS+i]; }=(MaxX-w)>>1;
/* Создание таблицы */=ListInit (TableNew(x+5, y+25,22,20,9, nNSS),, isSelected,(«N/N», NULLSTR, 40,5, OUT|COUNT),);(i=0; i<nNSS; i++)(p1, TableItemNew (pNameWeights[i], pWeights[i], 70,9, IN|FLOAT)); (pIPName[5], x, y, w, h, p1,(ListNew(), HBUTTON, isSelected,(HB_OK, x+w-141, y+h - 35,64,24, cmOk),(HB_CANCEL, x+w-69, y+h - 35,64,24, cmCancel),),); (;) {(! getEvent()); WinHandleEvent(); (event.what) {Command:(event.p1==cmOk)(i=0; i<nNSS; i++)(j=0; j<nNSS; j++) pWF [j*nNSS+i]=pWeights[i] [j];(Key, ESC, event.p1);;Key:(event.p1==ESC) {
/* Освобождение памяти и выход */(i=0; i<nNSS; i++) {(pWeights[i]);(pNameWeights[i]); }(pWeights);(pNameWeights);event.p2; } } } }
#include <fcntl.h> #include <io.h>
#ifdef _RUS_LPSTR Messages[]={ «Обзор», «Тестовые изображения:», }; #elseLPSTR Messages[]={ «Browse», «Image samples:» }; #endif
/* BrowsePCXFile - просмотр и загрузка тестового изображения */ static int near PASCAL(LPOpenFileName pF) {pFileName=pF->FileName, pBuffer,=malloc (IMAGE_W*IMAGE_H);w=550, h=380, x=(MaxX-w)>>1, y=(MaxY-h)>>1,, j, chr, cnt, hFile, nCurrFile=-1, bIsTrueFile=1;pFile, pImgItem;pButtons, pImg; ((LPSTR) Messages[0], x, y, w, h,(ListNew(), HSTATIC, 0,(Messages[1], x+10, y+28),),(ListNew(), HLISTBOX, isSelected,=ListBoxNew (pFileName, x+10, y+45,160,16,0, FAARC|FARO),),(pImg=ListNew(), HIMAGEBOX, 0,=ImageBoxNew (pImageBuffer, x+180, y+45, IMAGE_W, IMAGE_H, 0),),(pButtons=ListNew(), HBUTTON, isSelected,(HB_OK, x+180, y+h - 37,64,24, cmOk),(HB_CANCEL, x+254, y+h - 37,64,24, cmClose),),); (putEvent(Nothing, 0,0);) {(! getEvent()); WinHandleEvent(); (nCurrFile!=pFile->p1+pFile->command && qe==qb) {=pFile->p1+pFile->command;(aImagesPath, «%s % s», aImagesDir,(pFileName, (LPSTR)*((LPSTR *) pFile->name+nCurrFile))); /* Открываем файл с тестовым изображением и загружаем его */=FOpen (aImagesPath, O_RDONLY|O_BINARY); /* Узнаем размер файла, выделяем под него буфер памяти и читаем его туда */ =(PCXHEADERPTR) (pBuffer=malloc (j=filelength(hFile)));(hFile, pBuffer, j);(hFile);
/* Проверяем 256 цветное ли это изображение или нет, а тажке правильность размеров изображения */(pHDR->manuf!=10 || pHDR->encod!=1 || pHDR->bitpx!=8 ||>bplin!=IMAGE_W || (pHDR->y2-pHDR->y1+1)!=IMAGE_H) {(bIsTrueFile=j=0; j<IMAGE_W*IMAGE_H; j++) pImageBuffer[j]=15; } else { /* Декодируем изображение по алгоритму RLE */(bIsTrueFile=1, pImage=pBuffer+sizeof(PCXHEADER), j=0; j<IMAGE_W*IMAGE_H;) {=1;(((chr=*pImage++)&0xC0)==0xC0) {=chr&0x3F;=*pImage++; }(chr==7 || chr==15) chr -;if (chr==8) chr++;(i=0; i<cnt; i++) pImageBuffer [j++]=chr; } } /* Освобождаем буфер памяти под тестовое изображение */(pBuffer);
/* Перерисовываем изображение */(pImg, pImgItem); } (event.what) {cmFileListChanged:>curr=pButtons->first;(pButtons);;DOSCriticalError:(FatalError) {(Messages[4], Messages[5], x+45, y+77,350,160);=0; };Command: putEvent (Key, ESC, event.p1);;Key:(event.p1==ESC) {((i=(event.p2==cmOk && bIsTrueFile)))(j=0; j<IMAGE_W*IMAGE_H; j++) pImageBuff[0] [j]=pImageBuffer[j];(pImageBuffer);i? cmOk: cmCancel; } } } }
/* ScreenToPCXFile - сохранение копии экрана в файле формата PCX */ void(void) {int nCurrPCXFile;i, j, k, nTotal=0, nScreenSize=MaxX*MaxY;this, last=*_pLFB, runCount=1;pBuff=calloc (nScreenSize, 1),=malloc (PAL_SIZE);aFileName[67];
/* Формирование заголовка PCX файла */=calloc (sizeof(PCXHEADER), 1);>manuf=0x0A;>hard =0x05;>encod=0x01;>bitpx=0x08;>x2 =MaxX-1;>y2 =MaxY-1;>hres =0x00C8;>vres =0x00C8;>nplanes=0x01;>bplin=MaxX;>palinfo=0x01;
/* Сжатие содержимого экрана по алгоритму RLE */(i=0; i<MaxY; i++) {(last=_pLFB [k=i*MaxX], runCount=1, j=1; j<MaxX; j++) {((this=_pLFB [k+j])==last) {(++runCount==63) {[nTotal++]=runCount|0xC0;[nTotal++]=last;=0; } } else {(runCount) {(runCount==1 && (last&0xC0)!=0xC0)[nTotal++]=last;{[nTotal++]=runCount|0xC0;[nTotal++]=last; } }=this;=1; } }(runCount) {(runCount==1 && (last&0xC0)!=0xC0) pBuff [nTotal++]=last;{[nTotal++]=runCount|0xC0;[nTotal++]=last; } } }
/* Конец данных */[nTotal++]=0x0C;
/* Считывание палитры */(outp (0x3C7,0), i=0; i<PAL_SIZE; i+=3) {[i] =inp(0x3C9)<<2;[i+1]=inp(0x3C9)<<2;[i+2]=inp(0x3C9)<<2; }
/* Открытие файла на запись */(aFileName, «%sSCR % 05 d.pcx», aScreensDir,++nCurrPCXFile);=creat (aFileName, S_IWRITE|S_IREAD);
/* Запись заголовка PCX файла */(i, pHDR, sizeof(PCXHEADER));
/* Запись сжатых данных */(i, pBuff, nTotal);
/* Запись палитры */(i, pPal, PAL_SIZE);
/* Закрытие файла */(i);
/* Освобождение памяти */(pBuff); free(pPal); free(pHDR);
/* Звуковой сигнал */(1000); WaitSec(); nosound(); } /* Главная функция */main (int argc, char *argv[]) {i, j, k, l, m, n, x=-3, y=-3, w, h, chr, cnt, nMaxSS, nNSS, nCurrLine;Rnd, Rnd1;pCount, pCluster, pComboBox, pGr[2];pComboBoxItem[2], pImgCurr;aTemp[NIMAGE], aBuffText[128];
/* Устанавливаем требуемый VESA режим */(InitMode()!=VESA_OK) return;(argc>1) nCurrMode=atoi (argv[1]); else LoadCurrMode (argv[0]);(nCurrMode);(); _control87 (MASK_FPU, MASK_FPU); /*colbkg=15;*/
/* Распределяем память под весовые коэффициенты фильтров */=malloc((nMaxSS=aBuff1 [1]*aBuff1 [1])*SZF);=malloc((nMaxSS=aBuff1 [1]*aBuff1 [1])*SZI);(i=0; i<nMaxSS; i++) {pWF[i]=1.0; pWSigns[i]=0;}
/* Открываем файл с тестовым изображением и загружаем его */(aImagesPath, «%s % s», aImagesDir, aFileName);((i=open (aImagesPath, O_RDONLY|O_BINARY))==-1 || ! LoadPCXFile (i,&nW,&nH,&nSize, True)) {(«Ошибка», «Невозможно открыть файл с изображением!», (MaxX-300)>>1, (MaxY-150)>>1,300,150);exit; }(k=(nH>>1)*nW, i=0; i<nW; i++) pImageLine[i]=pImageBuff[0] [k+i];
/* Вводим белый шум и импульсный шум */(aBuff2 [3]=Var, i=0; i<nSize; i++)(j=1; j<NIMAGE; j++) {((Rnd=PulseRand())>=0) chr=(char) Rnd;chr=pImageBuff[0] [i];+=(int) (Var*NRand());(chr==7 || chr==15) chr -;if (chr==8) chr++;if (chr>255) chr=255;if (chr<0) chr=0;[j] [i]=chr; }
/* Фильтруем зашумленное изображение 2D фильтром */D[nFilterType] (pImageBuff[1], pImageBuff [NIMAGE-1], nW, nH, nNSS=aBuff1 [3]=SquareSize);
/* Вычисляем СКО ошибок */(Rnd=Rnd1=0, k=0.5*SquareSize, n=k*nW, l=nW - (k<<1), m=nH - (k<<1),=k; i<=m; i++, n+=nW)(j=k; j<=l; j++) {=((int) pImageBuff[0] [n+j]) - ((int) pImageBuff[1] [n+j]);+=chr*chr;=((int) pImageBuff[0] [n+j]) - ((int) pImageBuff [NIMAGE-1] [n+j]);+=chr*chr; }[0]=sqrt (Rnd/(l*m-1));[1]=sqrt (Rnd1/(l*m-1));
/* Оцениваем ФПВ одной строки */[1]=calloc (nNumPoints2, SZF);[1]=calloc (nNP2=(MAX_POINTS/(nNumPoints2-1))*(nNumPoints2-1)+1, SZF);(pImageBuff[0], pPDF[1], pHisto[1], aSrv2, nW, nNumPoints2, nNP2); =MaxX+6; h=MaxY+6;[3]=pQ;
/* ================================================================ */(aWinMainTitle, x, y, w, h, /* Надписи ========================= */(ListNew(), HSTATIC, 0,(pFName[0], x+10, y+30),(pOptionsText[0], x+233, y+30),(pIPName[0], x+10, y+55),(pIPName[1], x+118, y+55),(pIPName[2], x+223, y+55),(pIPName[3], x+294, y+55),(pIPName[4], x+365, y+55),(«Тестовое изображение:», x+10, y+75),(«Зашумленное изображение:», x+nW+65, y+75),(«Отфильтрованное изображение:», x+10, y+95+nH),(«Сигнал выделенной строки:», x+nW+65, y+90+nH),(«Гистограмма выделенной строки:», x+nW+65,+nH+228),), /* Выпадающий список ============================== */(pComboBox=ListNew(), HCOMBOBOX, isSelected,[0]=ListBoxNew (pFName+1, x+51, y+27,177,6, sizeof(pFName)/sizeof(LPSTR) - 1,0),[1]=ListBoxNew (pOptionsText+1, x+323, y+27,127,2, sizeof(pOptionsText)/sizeof(LPSTR) - 1,0),), /* Счетчики ======================================== */(pCount=ListNew(), HCOUNT, isSelected,(aBuff1, x+63, y+52,50),(aBuff2, x+168, y+52,50),(aBuff3, x+239, y+52,50),(aBuff4, x+310, y+52,50),(aBuff5, x+430, y+52,60),), /* Кнопки ========================================= */(ListNew(), HBUTTON, isSelected,(«[F3] Загрузить…», x+453, y+27,104,22, cmFileOpen),(«[F4] Веса…», x+560, y+27,84,22, cmFilterWeights),(«[F6] Пар.опт…», x+492, y+50,90,22, cmOptParams),(«[F9] Пуск», x+584, y+50,60,22, cmOptRun),), /* Таблица СКО ошибок ===================================== */(pTable=TableNew (x+646, y+27,0,23,2,2), HTABLE, isSelected,(NULLSTR, pErrorText, 90,0, OUT|STRING),(NULLSTR, FilteringError, 62,8, OUT|FLOAT),), /* Изображение ==================================== */(pImg=ListNew(), HIMAGEBOX, isSelected,[0]=ImageBoxNew (pImageBuff[0], x+10, y+90, nW, nH, nCurrLine=nH>>1),[1]=ImageBoxNew (pImageBuff[1], x+nW+65, y+90, nW, nH, nH>>1),[NIMAGE-1]=ImageBoxNew (pImageBuff[NIMAGE-1], x+10, y+110+nH, nW, nH, nH>>1),), /* Графики ======================================== */(pGr[0]=ListNew(), HGRAPH, 0,(x+nW+65, y+105+nH, nW, 110, nW, aSrv0,&pImageLine, 1),(x+nW+65, y+242+nH, nW, 108, nNP2, aSrv2, pPDF+1,1),),);
WinSetTitle (aFileName, pProgName, aFileName); /* =============================================================== */(pImgCurr=pImg->curr;) {/* Бесконечный цикл обработки команд */(! getEvent()); WinHandleEvent(); (SquareSize!=aBuff1 [3]||(pQ!=aBuff5 [3]&&nFilterType==4)) goto Filtering; (Var!=aBuff2 [3] || Pa!=aBuff3 [3] || Pb!=aBuff4 [3]) { /* Вводим белый шум и импульсный шум */=aBuff2 [3]; Pa=aBuff3 [3]; Pb=aBuff4 [3];(CLOCK);(i=0; i<nSize; i++)(j=1; j<NIMAGE; j++) {((Rnd=PulseRand())>=0) chr=(char) Rnd;chr=pImageBuff[0] [i];+=(int) (Var*NRand());(chr==7 || chr==15) chr -;if (chr==8) chr++;if (chr>255) chr=255;if (chr<0) chr=0;[j] [i]=chr; }(pImg, pImgItem[1]);(ARROW);Filtering; }
if (event.what==cmComboBoxChanged) {(pComboBox->curr==pComboBoxItem[0]) nFilterType=event.p1;if (pComboBox->curr==pComboBoxItem[1]) nFilterationType=event.p1;: /* Фильтруем зашумленное изображение */=SquareSize=aBuff1 [3];=aBuff5 [3];(CLOCK);
/* Пространственная фильтрация */(! nFilterationType) {D[nFilterType] (pImageBuff[1], pImageBuff [NIMAGE-1], nW, nH, nNSS);
/* Вычисляем СКО ошибок */(Rnd=Rnd1=0, k=0.5*SquareSize, n=k*nW, l=nW - (k<<1), m=nH - (k<<1),=k; i<=m; i++, n+=nW)(j=k; j<=l; j++) {=((int) pImageBuff[0] [n+j])- ((int) pImageBuff[1] [n+j]);+=chr*chr;=((int) pImageBuff[0] [n+j])- ((int) pImageBuff [NIMAGE-1] [n+j]);+=chr*chr; }[0]=sqrt (Rnd/(l*m-1));[1]=sqrt (Rnd1/(l*m-1)); } /* Временная фильтрация */{(i=0; i<nSize; i+=nW)(j=0; j<nW; j++) {(k=0; k<nNSS; k++) aTemp[k]=pImageBuff [k+1] [i+j];[NIMAGE-1] [i+j]= Filters1D[nFilterType] (aTemp, nNSS); }
/* Вычисляем СКО ошибок */(Rnd=Rnd1=0, i=0; i<nSize; i++) {=((int) pImageBuff[0] [i]) - ((int) pImageBuff[1] [i]);+=chr*chr;=((int) pImageBuff[0] [i]) - ((int) pImageBuff [NIMAGE-1] [i]);+=chr*chr; }[0]=sqrt (Rnd/(nSize-1));[1]=sqrt (Rnd1/(nSize-1)); } (pTable, pTable->first->prev);(pImg, pImgItem [NIMAGE-1]);(pImgCurr==pImgItem [NIMAGE-1]) pImgCurr=NULL;(ARROW); }(pImgCurr!=pImg->curr || nCurrLine!=pImgCurr->command) {(pImgCurr=pImg->curr, i=0; i<NIMAGE; i++) if (pImgCurr==pImgItem[i]) {l=i; break;}(k=(nCurrLine=pImgCurr->command)*nW, j=0; j<nW; j++)[j]=pImageBuff[l] [k+j];(pImageBuff[l]+k, pPDF[1], pHisto[1], aSrv2, nW, nNumPoints2, nNP2);();(pGr[0]); } (event.what==Command) {(event.p1) {cmFileOpen: /* Загружаем файл с тестовым изображением */(aOf. FileName, «%s % s», aImagesDir, «*.pcx»);(BrowsePCXFile(&aOf)==cmOk) { (aFileName, pProgName, aOf. FileName);
/* Вводим белый шум и импульсный шум */(CLOCK);(nCurrLine=-1, i=0; i<nSize; i++)(j=1; j<NIMAGE; j++) {((Rnd=PulseRand())>=0) chr=(char) Rnd;chr=pImageBuff[0] [i];+=(int) (Var*NRand());(chr==7 || chr==15) chr -;if (chr==8) chr++;if (chr>255) chr=255;if (chr<0) chr=0;[j] [i]=chr; }(pImg, pImgItem[0]);(pImg, pImgItem[1]);(ARROW);
/* Фильтруем зашумленное изображение 2D фильтром */Filtering; }; /* Просмотр и редактирование весов */cmFilterWeights:(GetFilterWeights()==cmOk) goto Filtering;;
/* Ввод параметров оптимизации */ case cmOptParams: GetOptParams();;
/* Оптимизация весовых коэффициентов */cmOptRun: /* Пространственная фильтрация */(! nFilterationType) { /* Вычисляем размерность вектора параметров X */(i=k=l=0; i<nNSS; i++, l+=nNSS)(j=0; j<nNSS; j++) if (pWSigns [l+j]) k++;
/* Если размерность задачи меньше двух, то выход */(k<2) break;
/* Перераспределяем память под вектор параметров X */(k!=MX) {(X!=NULL) {free(X); free(Xl); free(Xh);}=malloc((MX=k)*SZF);=malloc (MX*SZF);=malloc (MX*SZF); }
/* Задаем начальное значение вектора параметров X */(i=k=l=0; i<nNSS; i++, l+=nNSS)(j=0; j<nNSS; j++)(pWSigns [l+j]) { Xl[k]=XL; Xh[k]=XH; X [k++]=pWF [l+j];} } /* Временная фильтрация */{ /* Вычисляем размерность вектора параметров X */(i=k=0; i<nNSS; i++) if (pWSigns[i]) k++;
/* Если размерность задачи меньше двух, то выход */(k<2) break;
/* Перераспределяем память под вектор параметров X */(k!=MX) {(X!=NULL) {free(X); free(Xl); free(Xh);}=malloc((MX=k)*SZF);=malloc (MX*SZF);=malloc (MX*SZF); }
/* Задаем начальное значение вектора параметров X */(i=k=0; i<nNSS; i++)(pWSigns[i]) { Xl[k]=XL; Xh[k]=XH; X [k++]=pWF[i];} }
/* Выбираем барьерную функцию */=BFuncs[nSelBFunc];
/* Запускаем оптимизацию */=nInterpolCounter=nItrCounter=n=0;
/* Метод 1-го этапа - глобальный */(nSelGlobalMethod) n=GlobalMethods [nSelGlobalMethod-1]();
/* Метод 2-го этапа - локальный */[1]=rx;[nSelMethod]();=aBegData[1];
/* Получаем оптимальные веса из вектора параметров X */(X);(0); (aBuffText, «Число итераций:%d\n» «Число вычислений\nцелевой функции:%d»,+n, nFuncCounter);(«Статистика», aBuffText, (MaxX-280)>>1, (MaxY-140)>>1,280,140); ;cmQuit: goto exit; } /* switch */; } /* if command */if (event.what==Key) {=0;(event.p1) {F2: i=cmFilterWeightsSave;;F3: i=cmFileOpen;;F4: i=cmFilterWeights;;F6: i=cmOptParams;;F9: i=cmOptRun;;F10: /* Сохранение копии экрана в формате PCX */();; }(i) {CountResetCursor(pCount); putEvent (Command, i, 0);} } } /* for */
exit: /* Освобождаем память */(i=0; i<NIMAGE; i++) free (pImageBuff[i]);(pImageLine);(pHisto[0]); free (pPDF[0]);(pHisto[1]); free (pPDF[1]);(pWF); free(pWSigns);(X!=NULL) {free(X); free(Xl); free(Xh);}
/* Восстанавливаем вектора прерываний и видеорежим */();(argv[0]);(); }
/* файл opt2.c */ #include «opt2.h»
#define EPS_X 1e-8
/* Барьерные функции */ /* 1) Логарифмическая */float PASCAL(void) {i;x1, x2, z=0; (i=0; i<MX; i++) {((x1=(X[i] - Xl[i]))<0.0 || (x2=(Xh[i] - X[i]))<0.0) return -1.0;+=-log (x1/(Xh[i] - Xl[i])+EPS_X) - log (x2/(Xh[i] - Xl[i])+EPS_X); }z; } /* 2) Обратная */float PASCAL(void) {i;x1, x2, z=0; (i=0; i<MX; i++) {((x1=(X[i] - Xl[i]))<0.0 || (x2=(Xh[i] - X[i]))<0.0) return -1.0;+=(fabs (Xl[i])/(x1+EPS_X)+fabs (Xh[i])/(x2+EPS_X)); }z; }
/* Целевая функция */PASCAL(float *X) {i, j, k, l, m, n, chr, nNSS=SquareSize;Var=0;aTemp[NIMAGE];
/* Фильтруем зашумленное изображение */ /* Пространственная фильтрация */(! nFilterationType) { /* Получаем новые веса из вектора параметров X */(i=k=l=0; i<nNSS; i++, l+=nNSS)(j=0; j<nNSS; j++) if (pWSigns [l+j]) pWF [l+j]=X [k++]; D[nFilterType] (pImageBuff[1], pImageBuff [NIMAGE-1], nW, nH,);
/* Вычисляем СКО ошибок */(k=0.5*SquareSize, n=k*nW, l=nW - (k<<1), m=nH - (k<<1),=k; i<=m; i++, n+=nW)(j=k; j<=l; j++) {=((int) pImageBuff[0] [n+j])- ((int) pImageBuff [NIMAGE-1] [n+j]);+=chr*chr; }[1]=sqrt (Var/(l*m-1)); }
/* Временная фильтрация */{ /* Получаем новые веса из вектора параметров X */(i=k=0; i<nNSS; i++) if (pWSigns[i]) pWF[i]=X [k++]; (i=0; i<nSize; i+=nW)(j=0; j<nW; j++) {(k=0; k<nNSS; k++) aTemp[k]=pImageBuff [k+1] [i+j];[NIMAGE-1] [i+j]=Filters1D[nFilterType] (aTemp, nNSS); }
/* Вычисляем СКО ошибок */(i=0; i<nSize; i++) {=((int) pImageBuff[0] [i]) - ((int) pImageBuff [NIMAGE-1] [i]);+=chr*chr; }[1]=sqrt (Var/(nSize-1)); } ++; sqrt(Var); }
/* Функция, отображающая текущие результаты оптимизации */PASCAL(int nItrCounter) {();(pTable, pTable->first->prev);(pImg, pImgItem [NIMAGE-1]);nItrCounter<100*MX; }
/* Функция ввода параметров оптимизации */int near PASCAL(void) {w=428, h=480, x=(MaxX-w)>>1, y=(MaxY-h)>>1, i, j, nOff, nNSS=SquareSize;*pTmp;tcb1, tcb2, tcb3;pCombo=ListInit (ListNew(), HCOMBOBOX, isSelected,=ListBoxNew (pOptText1+1, x+119, y+30,220,4,4,0),=ListBoxNew (pOptText2+1, x+119, y+53,220,4,4,0),=ListBoxNew (pBFuncText+1, x+119, y+76,220,2,2,0),);**pSigns;*pNameSigns;p1;
/* Распределение памяти */=malloc (nNSS*sizeof (int *));=malloc (nNSS*sizeof(LPSTR));(i=0; i<nNSS; i++) {[i]=malloc (nNSS*sizeof(int));[i]=calloc (nNSS, 4);(i+1, pNameSigns[i], 10);(j=0; j<nNSS; j++) pSigns[i] [j]=pWSigns [j*nNSS+i]; } /* Создание таблицы */=ListInit (DTableNew(x+10, y+268, w - 37,20,20,9, nNSS, nNSS+1),, isSelected,(«N/N», NULLSTR, 40,0, OUT|COUNT),);(i=0; i<nNSS; i++)(p1, DTableItemNew (pNameSigns[i], pSigns[i], 40,0, IN|INT));->command=nSelGlobalMethod;->command=nSelMethod;->command=nSelBFunc;[0]=dx; aBegData[1]=rx; aBegData[2]=qf; aBegData[3]=hg;[4]=nIterations; aBegData[5]=N;[6]=XL; aBegData[7]=XH; («Параметры оптимизации», x, y, w, h,(ListNew(), HSTATIC, 0,(pOptText1 [0], x+10, y+33),(pOptText2 [0], x+10, y+56),(pBFuncText[0], x+10, y+79),(pBegDataText[8], x+10, y+253),),,(TableNew(x+10, y+99,0,20,8,8), HTABLE, isSelected,(NULLSTR, pBegDataText, 260,5, OUT|STRING),(NULLSTR, aBegData, 70,9, IN|FLOAT),),,(ListNew(), HBUTTON, isSelected,(HB_OK, x+w-80, y+30,70,24, cmOk),(HB_CANCEL, x+w-80, y+60,70,24, cmCancel),),);(;) {(! getEvent()); WinHandleEvent();(event.what) {Command:(event.p1==cmOk) {(aBegData[0]<=0 || aBegData[1]<0 ||[2]<0 || aBegData[3]<=0 ||[4]<=0 || aBegData[5]<=1 ||[6] >= aBegData[7]) {(«Ошибка», «Некорректный ввод данных!», (MaxX-240)>>1, (MaxY-120)>>1,240,120);; }=aBegData[0]; rx=aBegData[1];=aBegData[2]; hg=aBegData[3];=aBegData[4]; N=aBegData[5];=aBegData[6]; XH=aBegData[7];=tcb1->command;=tcb2->command;=tcb3->command;(i=0; i<nNSS; i++)(j=0; j<nNSS; j++) pWSigns [j*nNSS+i]=pSigns[i] [j]; }(Key, ESC, event.p1);;Key:(event.p1==ESC) { /* Освобождение памяти и выход */(i=0; i<nNSS; i++) {(pSigns[i]);(pNameSigns[i]); }(pSigns);(pNameSigns);event.p2; } } } }
|
||
|
Последнее изменение этой страницы: 2020-03-13; просмотров: 222; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.176 (0.012 с.) |