Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Выводы по эффективности предложений

Поиск

 

Экономическая эффективность использования разработанной программной модели очевидна. Затраты на разработку программы составляют 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 с.)