Исследование эффективности пространственно-временной обработки изображений с использованием статистик среднего ранга при наличии импульсных помех

Задача пространственно-временной обработки изображений при наличии шумов и помех. Методы оптимизации при пространственно-временной обработке изображений. Структура специализированной программы, описание ее пользовательского интерфейса. Смета затрат.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.06.2013
Размер файла 957,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

for (pImgCurr=pImg->curr;) {/* Бесконечный цикл обработки команд */

while (! getEvent()); WinHandleEvent();

if (SquareSize!=aBuff1 [3]||(pQ!=aBuff5 [3]&&nFilterType==4))

goto Filtering;

if (Var!=aBuff2 [3] || Pa!=aBuff3 [3] || Pb!=aBuff4 [3]) {

/* Вводим белый шум и импульсный шум */

Var=aBuff2 [3]; Pa=aBuff3 [3]; Pb=aBuff4 [3];

MsSetGraphCursor(CLOCK);

for (i=0; i<nSize; i++)

for (j=1; j<NIMAGE; j++) {

if ((Rnd=PulseRand())>=0) chr=(char) Rnd;

else chr=pImageBuff[0] [i];

chr+=(int) (Var*NRand());

if (chr==7 || chr==15) chr -;

else if (chr==8) chr++;

else if (chr>255) chr=255;

else if (chr<0) chr=0;

pImageBuff[j] [i]=chr;

}

ImageBoxItemRedraw (pImg, pImgItem[1]);

MsSetGraphCursor(ARROW);

goto Filtering;

}

if (event.what==cmComboBoxChanged) {

if (pComboBox->curr==pComboBoxItem[0]) nFilterType=event.p1;

else if (pComboBox->curr==pComboBoxItem[1])

nFilterationType=event.p1;

Filtering: /* Фильтруем зашумленное изображение */

nNSS=SquareSize=aBuff1 [3];

pQ=aBuff5 [3];

MsSetGraphCursor(CLOCK);

/* Пространственная фильтрация */

if (! nFilterationType) {

Filters2D[nFilterType] (pImageBuff[1], pImageBuff [NIMAGE-1],

nW, nH, nNSS);

/* Вычисляем СКО ошибок */

for (Rnd=Rnd1=0,

k=0.5*SquareSize, n=k*nW, l=nW - (k<<1), m=nH - (k<<1),

i=k; i<=m; i++, n+=nW)

for (j=k; j<=l; j++) {

chr=((int) pImageBuff[0] [n+j])-

((int) pImageBuff[1] [n+j]);

Rnd+=chr*chr;

chr=((int) pImageBuff[0] [n+j])-

((int) pImageBuff [NIMAGE-1] [n+j]);

Rnd1+=chr*chr;

}

FilteringError[0]=sqrt (Rnd/(l*m-1));

FilteringError[1]=sqrt (Rnd1/(l*m-1));

}

/* Временная фильтрация */

else {

for (i=0; i<nSize; i+=nW)

for (j=0; j<nW; j++) {

for (k=0; k<nNSS; k++) aTemp[k]=pImageBuff [k+1] [i+j];

pImageBuff [NIMAGE-1] [i+j]=

Filters1D[nFilterType] (aTemp, nNSS);

}

/* Вычисляем СКО ошибок */

for (Rnd=Rnd1=0, i=0; i<nSize; i++) {

chr=((int) pImageBuff[0] [i]) - ((int) pImageBuff[1] [i]);

Rnd+=chr*chr;

chr=((int) pImageBuff[0] [i]) - ((int) pImageBuff [NIMAGE-1] [i]);

Rnd1+=chr*chr;

}

FilteringError[0]=sqrt (Rnd/(nSize-1));

FilteringError[1]=sqrt (Rnd1/(nSize-1));

}

TableItemDraw (pTable, pTable->first->prev);

ImageBoxItemRedraw (pImg, pImgItem [NIMAGE-1]);

if (pImgCurr==pImgItem [NIMAGE-1]) pImgCurr=NULL;

MsSetGraphCursor(ARROW);

}

if (pImgCurr!=pImg->curr || nCurrLine!=pImgCurr->command) {

for (pImgCurr=pImg->curr, i=0; i<NIMAGE; i++)

if (pImgCurr==pImgItem[i]) {l=i; break;}

for (k=(nCurrLine=pImgCurr->command)*nW, j=0; j<nW; j++)

pImageLine[j]=pImageBuff[l] [k+j];

HistogramSetUp (pImageBuff[l]+k, pPDF[1], pHisto[1], aSrv2, nW,

nNumPoints2, nNP2);

WaitVRT();

GraphsRedraw (pGr[0]);

}

if (event.what==Command) {

switch (event.p1) {

case cmFileOpen:

/* Загружаем файл с тестовым изображением */

sprintf (aOf. FileName, «%s % s», aImagesDir, «*.pcx»);

if (BrowsePCXFile(&aOf)==cmOk) {

WinSetTitle (aFileName, pProgName, aOf. FileName);

/* Вводим белый шум и импульсный шум */

MsSetGraphCursor(CLOCK);

for (nCurrLine=-1, i=0; i<nSize; i++)

for (j=1; j<NIMAGE; j++) {

if ((Rnd=PulseRand())>=0) chr=(char) Rnd;

else chr=pImageBuff[0] [i];

chr+=(int) (Var*NRand());

if (chr==7 || chr==15) chr -;

else if (chr==8) chr++;

else if (chr>255) chr=255;

else if (chr<0) chr=0;

pImageBuff[j] [i]=chr;

}

ImageBoxItemRedraw (pImg, pImgItem[0]);

ImageBoxItemRedraw (pImg, pImgItem[1]);

MsSetGraphCursor(ARROW);

/* Фильтруем зашумленное изображение 2D фильтром */

goto Filtering;

}

break;

/* Просмотр и редактирование весов */

case cmFilterWeights:

if (GetFilterWeights()==cmOk) goto Filtering;

break;

/* Ввод параметров оптимизации */

case cmOptParams: GetOptParams();

break;

/* Оптимизация весовых коэффициентов */

case cmOptRun:

/* Пространственная фильтрация */

if (! nFilterationType) {

/* Вычисляем размерность вектора параметров X */

for (i=k=l=0; i<nNSS; i++, l+=nNSS)

for (j=0; j<nNSS; j++) if (pWSigns [l+j]) k++;

/* Если размерность задачи меньше двух, то выход */

if (k<2) break;

/* Перераспределяем память под вектор параметров X */

if (k!=MX) {

if (X!=NULL) {free(X); free(Xl); free(Xh);}

X=malloc((MX=k)*SZF);

Xl=malloc (MX*SZF);

Xh=malloc (MX*SZF);

}

/* Задаем начальное значение вектора параметров X */

for (i=k=l=0; i<nNSS; i++, l+=nNSS)

for (j=0; j<nNSS; j++)

if (pWSigns [l+j]) {

Xl[k]=XL; Xh[k]=XH; X [k++]=pWF [l+j];}

}

/* Временная фильтрация */

else {

/* Вычисляем размерность вектора параметров X */

for (i=k=0; i<nNSS; i++) if (pWSigns[i]) k++;

/* Если размерность задачи меньше двух, то выход */

if (k<2) break;

/* Перераспределяем память под вектор параметров X */

if (k!=MX) {

if (X!=NULL) {free(X); free(Xl); free(Xh);}

X=malloc((MX=k)*SZF);

Xl=malloc (MX*SZF);

Xh=malloc (MX*SZF);

}

/* Задаем начальное значение вектора параметров X */

for (i=k=0; i<nNSS; i++)

if (pWSigns[i]) {

Xl[k]=XL; Xh[k]=XH; X [k++]=pWF[i];}

}

/* Выбираем барьерную функцию */

BFunc=BFuncs[nSelBFunc];

/* Запускаем оптимизацию */

nFuncCounter=nInterpolCounter=nItrCounter=n=0;

/* Метод 1-го этапа - глобальный */

if (nSelGlobalMethod)

n=GlobalMethods [nSelGlobalMethod-1]();

/* Метод 2-го этапа - локальный */

aBegData[1]=rx;

LocalMethods[nSelMethod]();

rx=aBegData[1];

/* Получаем оптимальные веса из вектора параметров X */

Func(X);

GetOptInfo(0);

sprintf (aBuffText,

«Число итераций:%d\n»

«Число вычислений\nцелевой функции:%d»,

nItrCounter+n, nFuncCounter);

MessageBox («Статистика», aBuffText, (MaxX-280)>>1,

(MaxY-140)>>1,280,140);

break;

case cmQuit: goto exit;

} /* switch */;

} /* if command */

else if (event.what==Key) {

i=0;

switch (event.p1) {

case F2: i=cmFilterWeightsSave;

break;

case F3: i=cmFileOpen;

break;

case F4: i=cmFilterWeights;

break;

case F6: i=cmOptParams;

break;

case F9: i=cmOptRun;

break;

case F10:

/* Сохранение копии экрана в формате PCX */

ScreenToPCXFile();

break;

}

if (i) {CountResetCursor(pCount); putEvent (Command, i, 0);}

}

} /* for */

exit:

/* Освобождаем память */

for (i=0; i<NIMAGE; i++) free (pImageBuff[i]);

free(pImageLine);

free (pHisto[0]); free (pPDF[0]);

free (pHisto[1]); free (pPDF[1]);

free(pWF); free(pWSigns);

if (X!=NULL) {free(X); free(Xl); free(Xh);}

/* Восстанавливаем вектора прерываний и видеорежим */

ByeHandlers();

SaveCurrMode (argv[0]);

ReleaseMode();

}

/* файл opt2.c */

#include «opt2.h»

#define EPS_X 1e-8

/* Барьерные функции */

/* 1) Логарифмическая */

static float PASCAL

BarrierFunc1 (void) {

int i;

float x1, x2, z=0;

for (i=0; i<MX; i++) {

if ((x1=(X[i] - Xl[i]))<0.0 || (x2=(Xh[i] - X[i]))<0.0) return -1.0;

z+=-log (x1/(Xh[i] - Xl[i])+EPS_X) - log (x2/(Xh[i] - Xl[i])+EPS_X);

}

return z;

}

/* 2) Обратная */

static float PASCAL

BarrierFunc2 (void) {

int i;

float x1, x2, z=0;

for (i=0; i<MX; i++) {

if ((x1=(X[i] - Xl[i]))<0.0 || (x2=(Xh[i] - X[i]))<0.0) return -1.0;

z+=(fabs (Xl[i])/(x1+EPS_X)+fabs (Xh[i])/(x2+EPS_X));

}

return z;

}

/* Целевая функция */

float PASCAL

GoalFunc (float *X) {

int i, j, k, l, m, n, chr, nNSS=SquareSize;

float Var=0;

char aTemp[NIMAGE];

/* Фильтруем зашумленное изображение */

/* Пространственная фильтрация */

if (! nFilterationType) {

/* Получаем новые веса из вектора параметров X */

for (i=k=l=0; i<nNSS; i++, l+=nNSS)

for (j=0; j<nNSS; j++) if (pWSigns [l+j]) pWF [l+j]=X [k++];

Filters2D[nFilterType] (pImageBuff[1], pImageBuff [NIMAGE-1], nW, nH,

nNSS);

/* Вычисляем СКО ошибок */

for (k=0.5*SquareSize, n=k*nW, l=nW - (k<<1), m=nH - (k<<1),

i=k; i<=m; i++, n+=nW)

for (j=k; j<=l; j++) {

chr=((int) pImageBuff[0] [n+j])-

((int) pImageBuff [NIMAGE-1] [n+j]);

Var+=chr*chr;

}

FilteringError[1]=sqrt (Var/(l*m-1));

}

/* Временная фильтрация */

else {

/* Получаем новые веса из вектора параметров X */

for (i=k=0; i<nNSS; i++) if (pWSigns[i]) pWF[i]=X [k++];

for (i=0; i<nSize; i+=nW)

for (j=0; j<nW; j++) {

for (k=0; k<nNSS; k++) aTemp[k]=pImageBuff [k+1] [i+j];

pImageBuff [NIMAGE-1] [i+j]=Filters1D[nFilterType] (aTemp,

nNSS);

}

/* Вычисляем СКО ошибок */

for (i=0; i<nSize; i++) {

chr=((int) pImageBuff[0] [i]) - ((int) pImageBuff [NIMAGE-1] [i]);

Var+=chr*chr;

}

FilteringError[1]=sqrt (Var/(nSize-1));

}

nFuncCounter++;

return sqrt(Var);

}

/* Функция, отображающая текущие результаты оптимизации */

int PASCAL

GetOptInfo (int nItrCounter) {

WaitVRT();

TableItemDraw (pTable, pTable->first->prev);

ImageBoxItemRedraw (pImg, pImgItem [NIMAGE-1]);

return nItrCounter<100*MX;

}

/* Функция ввода параметров оптимизации */

static int near PASCAL

GetOptParams(void) {

int w=428, h=480, x=(MaxX-w)>>1, y=(MaxY-h)>>1, i, j, nOff,

nNSS=SquareSize;

float *pTmp;

LPListItem tcb1, tcb2, tcb3;

LPList pCombo=ListInit (ListNew(), HCOMBOBOX, isSelected,

tcb1=ListBoxNew (pOptText1+1, x+119, y+30,220,4,4,0),

tcb2=ListBoxNew (pOptText2+1, x+119, y+53,220,4,4,0),

tcb3=ListBoxNew (pBFuncText+1, x+119, y+76,220,2,2,0),

NULL);

int **pSigns;

LPSTR *pNameSigns;

LPDTable p1;

/* Распределение памяти */

pSigns=malloc (nNSS*sizeof (int *));

pNameSigns=malloc (nNSS*sizeof(LPSTR));

for (i=0; i<nNSS; i++) {

pSigns[i]=malloc (nNSS*sizeof(int));

pNameSigns[i]=calloc (nNSS, 4);

itoa (i+1, pNameSigns[i], 10);

for (j=0; j<nNSS; j++) pSigns[i] [j]=pWSigns [j*nNSS+i];

}

/* Создание таблицы */

p1=ListInit (DTableNew(x+10, y+268, w - 37,20,20,9, nNSS, nNSS+1),

HDTABLE, isSelected,

DTableItemNew («N/N», NULLSTR, 40,0, OUT|COUNT),

NULL);

for (i=0; i<nNSS; i++)

ListAdd (p1, DTableItemNew (pNameSigns[i], pSigns[i], 40,0, IN|INT));

tcb1->command=nSelGlobalMethod;

tcb2->command=nSelMethod;

tcb3->command=nSelBFunc;

aBegData[0]=dx; aBegData[1]=rx; aBegData[2]=qf; aBegData[3]=hg;

aBegData[4]=nIterations; aBegData[5]=N;

aBegData[6]=XL; aBegData[7]=XH;

WinCreate («Параметры оптимизации», x, y, w, h,

ListInit (ListNew(), HSTATIC, 0,

StaticTextNew (pOptText1 [0], x+10, y+33),

StaticTextNew (pOptText2 [0], x+10, y+56),

StaticTextNew (pBFuncText[0], x+10, y+79),

StaticTextNew (pBegDataText[8], x+10, y+253),

NULL),

pCombo,

ListInit (TableNew(x+10, y+99,0,20,8,8), HTABLE, isSelected,

TableItemNew (NULLSTR, pBegDataText, 260,5, OUT|STRING),

TableItemNew (NULLSTR, aBegData, 70,9, IN|FLOAT),

NULL),

p1,

ListInit (ListNew(), HBUTTON, isSelected,

ButtonNew (HB_OK, x+w-80, y+30,70,24, cmOk),

ButtonNew (HB_CANCEL, x+w-80, y+60,70,24, cmCancel),

NULL),

NULL);

for(;) {

while (! getEvent()); WinHandleEvent();

switch (event.what) {

case Command:

if (event.p1==cmOk) {

if (aBegData[0]<=0 || aBegData[1]<0 ||

aBegData[2]<0 || aBegData[3]<=0 ||

aBegData[4]<=0 || aBegData[5]<=1 ||

aBegData[6] >= aBegData[7]) {

MessageBox («Ошибка», «Некорректный ввод данных!»,

(MaxX-240)>>1, (MaxY-120)>>1,240,120);

break;

}

dx=aBegData[0]; rx=aBegData[1];

qf=aBegData[2]; hg=aBegData[3];

nIterations=aBegData[4]; N=aBegData[5];

XL=aBegData[6]; XH=aBegData[7];

nSelGlobalMethod=tcb1->command;

nSelMethod=tcb2->command;

nSelBFunc=tcb3->command;

for (i=0; i<nNSS; i++)

for (j=0; j<nNSS; j++)

pWSigns [j*nNSS+i]=pSigns[i] [j];

}

putEvent (Key, ESC, event.p1);

break;

case Key:

if (event.p1==ESC) {

/* Освобождение памяти и выход */

for (i=0; i<nNSS; i++) {

free (pSigns[i]);

free (pNameSigns[i]);

}

free(pSigns);

free(pNameSigns);

return event.p2;

}

}

}

}

Размещено на Allbest.ru


Подобные документы

  • Изучение современных методик компьютерной обработки биомедицинских изображений с целью улучшения изображений для их наилучшего визуального восприятия врачом-диагностом и эффективного сжатия изображений – для надежного хранения и быстрой передачи данных.

    курсовая работа [2,3 M], добавлен 15.04.2019

  • Описание математических методов представления и обработки графических изображений. Описание разработанного программного дополнения. Описание функций и их атрибутов. Представление и обработка графических изображений. Результаты тестирования программы.

    курсовая работа [1,7 M], добавлен 27.01.2015

  • Обработка изображений на современных вычислительных устройствах. Устройство и представление различных форматов изображений. Исследование алгоритмов обработки изображений на базе различных архитектур. Сжатие изображений на основе сверточных нейросетей.

    дипломная работа [6,1 M], добавлен 03.06.2022

  • Цифровые рентгенографические системы. Методы автоматического анализа изображений в среде MatLab. Анализ рентгеновского изображения. Фильтрация, сегментация, улучшение изображений. Аппаратурные возможности предварительной нормализации изображений.

    курсовая работа [890,9 K], добавлен 07.12.2013

  • История появления и основные понятия графического дизайна. Выявление главных преимуществ и недостатков недеструктивной обработки изображений. Сравнение деструктивной и недеструктивной обработки изображений. Сущность и особенности двухмерной графики.

    реферат [5,2 M], добавлен 05.05.2023

  • Обзор существующего программного обеспечения для автоматизации выделения границ на изображении. Разработка математической модели обработки изображений и выделения контуров в оттенках серого и программного обеспечения для алгоритмов обработки изображений.

    дипломная работа [1,7 M], добавлен 27.03.2013

  • Основные категории изображений: растровые и векторные. Программы, работающие с растровыми изображениями. Инструменты для работы с обоими типами графики в программе Photoshop. Обзор современных программ обработки и просмотра графических изображений.

    курсовая работа [49,0 K], добавлен 20.09.2010

  • Методы обработки растровых изображений (кластеризация, пороговая и интерактивная сегментация). Разработка программного модуля для системы мониторинга биосферы и дистанционного зондирования. Создание пользовательского интерфейса программного модуля.

    курсовая работа [2,2 M], добавлен 29.04.2015

  • Определение характеристик входного воздействия во временной и частотной области. Синтез системы временным и частотным методами. Переход от частотного коэффициента передачи к передаточной функции. Оценка степени подавления помех и эффективности работы.

    курсовая работа [580,2 K], добавлен 23.04.2013

  • Изучение и программная реализация в среде Matlab методов обработки, анализа, фильтрации, сегментации и улучшения качества рентгеновских медицинских изображений. Цифровые рентгенографические системы. Разработка статически обоснованных алгоритмов.

    курсовая работа [4,7 M], добавлен 20.01.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.