MaterStudiorum.ru - домашняя страничка студента.
Минимум рекламы - максимум информации.


Авиация и космонавтика
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Банковское дело
Безопасность жизнедеятельности
Биографии
Биология
Биология и химия
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Издательское дело и полиграфия
Инвестиции
Иностранный язык
Информатика
Информатика, программирование
Исторические личности
История
История техники
Кибернетика
Коммуникации и связь
Компьютерные науки
Косметология
Краткое содержание произведений
Криминалистика
Криминология
Криптология
Кулинария
Культура и искусство
Культурология
Литература и русский язык
Литература(зарубежная)
Логика
Логистика
Маркетинг
Математика
Медицина, здоровье
Медицинские науки
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Москвоведение
Музыка
Муниципальное право
Налоги, налогообложение
Наука и техника
Начертательная геометрия
Новейшая история, политология
Оккультизм и уфология
Остальные рефераты
Педагогика
Полиграфия
Политология
Право
Право, юриспруденция
Предпринимательство
Промышленность, производство
Психология
Психология, педагогика
Радиоэлектроника
Разное
Реклама
Религия и мифология
Риторика
Сексология
Социология
Статистика
Страхование
Строительные науки
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Управленческие науки
Физика
Физкультура и спорт
Философия
Финансовые науки
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика
Юриспруденция
Языковедение
Языкознание, филология
    Начало -> Информатика, программирование -> Программа фильтрации шумов

Название:Программа фильтрации шумов
Просмотров:54
Раздел:Информатика, программирование
Ссылка:Скачать(6 KB)
Описание:Программа фильтрации шумов
Задание.
Создать программу, осуществляющую фильтрацию шумов в растровых изображениях
методами усредняющего, порогового и медианного фильтров.
Программа написана на языке Object Pascal и выполняется в среде Win32.

Часть полного текста документа:

Программа фильтрации шумов Задание. Создать программу, осуществляющую фильтрацию шумов в растровых изображениях методами усредняющего, порогового и медианного фильтров. Программа написана на языке Object Pascal и выполняется в среде Win32. Общий вид программы показан на рис. № 1. Рис. № 2. Общий вид главного окна программы c загруженным исходным изображением. 1. Усредняющий фильтp. Алгоритм работы усредняющего фильтра заключается в замене значения яркости в текущем пикселе на среднюю яркость, вычисленную по его 8 окрестностям, включая и сам элемент. Этот фильтр является самым простым. К недостаткам его можно отнести сглаживание ступенчатых и пилообразных функций. Кроме того пиксели, имеющее существенно отличное значение яркости и являющимися шумовыми могут вносить значительный вклад в результат обработки. Реализация фильтра представлена в виде процедуры: Procedure AverageFilter(Value:Integer); Данная процедура осуществляет алгоритм усредняющего фильтра применительно к объекту TBitmap. В него предварительно должна быть загружено изображение (Рис. № 2). Результат работы усредняющего фильтра можно увидеть на рис. № 3. Параметр Value - порог при котором производятся манипуляции с пикселом. Procedure TMainForm.AverageFilter; var PrevisionLine:pByteArray; CurrentLine:pByteArray; NextLine:pByteArray; I,J:Integer; Summ:Integer; begin if 9262_1.Picture.Bitmap.PixelFormat = pf8bit then begin for I := 0 to 9262_1.Picture.Bitmap.Height - 1 do begin CurrentLine := 9262_1.Picture.Bitmap.ScanLine[I]; for J := 0 to 9262_1.Picture.Bitmap.Width - 1 do begin Summ := 0; if I > 0 then begin PrevisionLine := 9262_1.Picture.Bitmap.ScanLine[I - 1]; if J > 0 then begin Summ := Summ + PrevisionLine^[J - 1]; end; Summ := Summ + PrevisionLine^[J]; if J + 1 < 9262_1.Picture.Bitmap.Width then begin Summ := Summ + PrevisionLine^[J + 1]; end; end; if J > 0 then begin Summ := Summ + CurrentLine^[J - 1]; end; Summ := Summ + CurrentLine^[J]; if J + 1 < 9262_1.Picture.Bitmap.Width then begin Summ := Summ + CurrentLine^[J + 1]; end; if I + 1 < 9262_1.Picture.Bitmap.Height then begin NextLine := 9262_1.Picture.Bitmap.ScanLine[I + 1]; if J > 0 then begin Summ := Summ + NextLine^[J - 1]; end; Summ := Summ + NextLine^[J]; if J + 1 < 9262_1.Picture.Bitmap.Width then begin Summ := Summ + NextLine^[J + 1]; end; end; if (Summ div 9) = 0) and (VertB < 9262_1.Picture.Bitmap.Height) then BoxCurrentLine := 9262_1.Picture.Bitmap.ScanLine[VertB]; for HorB := (Hor - (Value div 2)) to (Hor + (Value div 2)) do begin if (HorB >= 0) and (VertB >= 0) and (HorB < 9262_1.Picture.Bitmap.Width) and (VertB < 9262_1.Picture.Bitmap.Height) then PixelArray[Counter] := BoxCurrentLine^[HorB] else PixelArray[Counter] := 0; Inc(Counter); end; end; // Сортируем массив for VertB := 0 to Value*Value - 1 do begin for HorB := VertB to Value*Value - 1 do begin if PixelArray[VertB] > PixelArray[HorB] then begin Temp := PixelArray[VertB]; PixelArray[VertB] := PixelArray[HorB]; PixelArray[HorB] := Temp; end; end; end; // Берем то что посередине и присваиваем текущему пикселю CurrentLine^[Hor] := PixelArray[((Value*Value) div 2) + 1]; end; end; 9262_1.Visible := False; 9262_1.Visible := True; N4.Enabled := True; end else MessageBox(Handle,'Такой формат файла пока не поддерживается...', 'Слабоват я пока...',MB_OK or MB_ICONSTOP or MB_APPLMODAL); end; end; Результат работы фильтра можно увидеть на рис. № 6. Рис. № 6. Начало работы медианного фильтра - запрос на размер окна фильтра. 4. Заполнение объекта другим цветом. Для упрощения алгоритма слудующая процедура заполняет графические объекты только белым цветом, однако путем простого добавления диалогового окна с вопросом о цвете заполнения можно добиться заполнения объектов любым цветом. procedure TMainForm.9262_1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var TargetPixel:Byte; ChangeCount:Integer; CurrentLine:pByteArray; PrevLine:pByteArray; NextLine:pByteArray; YOffset, XOffset:Integer; begin if 9262_1.Picture.Bitmap.PixelFormat = pf8bit then begin // Запоминаем значение пиксела на котором щелкнули мышкой TargetPixel := pByteArray(9262_1.Picture.Bitmap.ScanLine[Y])^[X]; YOffset := 0; // Пока число замен не станет равным 0 двигаемся вверх repeat ChangeCount := 0; if Y - YOffset < 0 then Break; // Берем линию CurrentLine := 9262_1.Picture.Bitmap.ScanLine[Y - YOffset]; PrevLine := 9262_1.Picture.Bitmap.ScanLine[Y - YOffset - 1]; if PrevLine[X] TargetPixel then Break; XOffset := 0; // Заполняем влево ее пока не дойдем до границы объекта if X - 1 >= 0 then while CurrentLine^[X - XOffset - 1] = TargetPixel do begin CurrentLine^[X - XOffset] := 255; Inc(XOffset); Inc(ChangeCount); if X - XOffset - 1 < 0 then Break; end; XOffset := 0; // Заполняем вправо ее пока не дойдем до границы объекта if X + 1 < 9262_1.Picture.Bitmap.Width - 1 then while CurrentLine^[X + XOffset + 1] = TargetPixel do begin CurrentLine^[X + XOffset] := 255; Inc(XOffset); Inc(ChangeCount); if X + XOffset + 1 > 9262_1.Picture.Bitmap.Width - 1 then Break; end; Inc(YOffset); until ChangeCount = 0; YOffset := 1; // Пока число замен не станет равным 0 двигаемся вниз repeat ChangeCount := 0; if Y + YOffset > 9262_1.Picture.Bitmap.Width - 1 then Break; // Берем линию CurrentLine := 9262_1.Picture.Bitmap.ScanLine[Y + YOffset]; NextLine := 9262_1.Picture.Bitmap.ScanLine[Y + YOffset + 1]; if NextLine[X] TargetPixel then Break; XOffset := 0; // Заполняем влево ее пока не дойдем до границы объекта if X - 1 >= 0 then while CurrentLine^[X - XOffset - 1] = TargetPixel do begin CurrentLine^[X - XOffset] := 255; Inc(XOffset); Inc(ChangeCount); if X - XOffset - 1 < 0 then Break; end; XOffset := 0; // Заполняем вправо ее пока не дойдем до границы объекта if X + 1 < 9262_1.Picture.Bitmap.Width - 1 then while CurrentLine^[X + XOffset + 1] = TargetPixel do begin CurrentLine^[X + XOffset] := 255; Inc(XOffset); Inc(ChangeCount); if X + XOffset + 1 > 9262_1.Picture.Bitmap.Width - 1 then Break; end; Inc(YOffset); until ChangeCount = 0; 9262_1.Visible := False; 9262_1.Visible := True; end; end; Результаты работы программы можно увидеть на рис. ............




Нет комментариев.



Оставить комментарий:

Ваше Имя:
Email:
Антибот:  
Ваш комментарий:  



Похожие работы:

Название:Oscar Wilde "The picture of Dorian Gray"
Просмотров:221
Описание: THE STATE LINGUISTIC UNIVERSITY AFTER V. BRUSOVOSCAR WILDE: THE PICTURE OF DORIAN GRAY Yerevan 2009 Oscar Wilde Oscar Fingal O'Flahertie Wills Wilde (16 October 1854 – 30 November 1900) was an Irish playwright, poet and author of numerous short stories and one novel. Known for his biting wit, he became one of the most

Название:Museums and picture galleries
Просмотров:93
Описание:Музеи и картинные галереи.

 
     

Вечно с вами © MaterStudiorum.ru