Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Выводы по эффективности предложений↑ ⇐ ПредыдущаяСтр 13 из 13 Содержание книги
Поиск на нашем сайте
Экономическая эффективность использования разработанной программной модели очевидна. Затраты на разработку программы составляют 65672,11 рублей, а общая цена НИР - 108490,30 рублей, в то время как цена одного только осциллографа, необходимого для организации одного рабочего места в случае использования лабораторного макета, более рублей. А при стандартном оснащении, по минимуму 10 рабочих мест, это будет стоить 500000 рублей. К тому же, разработка и установка лабораторных макетов для организации подобной лабораторной работы потребует не только на порядок больших финансовых вложений, но и времени, затраченного на разработку, а также на обслуживание лабораторных макетов и измерительных приборов. Но в связи с заменой лабораторного оборудования на программный блок, установленный в ПК, осуществляется значительная экономия средств университета при закупке лабораторных макетов и оборудования. Дополнительных затрат на покупку новых ПЭВМ не потребуется, так как разработанная программа не требует больших ресурсов и может использоваться на имеющихся машинах. С другой стороны, для аналогичных целей возможно приобретение лицензионного программного обеспечения и адаптация его для решения поставленных задач. При этом потребуется потратить значительное количество времени на адаптацию и материальных средств на приобретение лицензионного пакета программ. Так, цена лицензионного пакета MATLAB Individual составляет , вместе с приложением Statistics Toolbox Individual стоимость в пересчете по курсу около 112200 руб. Таким образом, разработка данного проекта экономически целесообразна.
Заключение
Основные результаты дипломного проекта: 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; просмотров: 155; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.184.207 (0.009 с.) |