Реферат: Программа фильтрации шумов - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Программа фильтрации шумов

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Архив Zip, 404 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

Программа фильтрации шумов Задание. Создать программу , осуществляю щую фильтрацию шумов в растровых изображениях методами усредняющего , порогового и медианного фильтров. Программа написана на языке 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 Image1.Picture.Bitmap.PixelFormat = pf8bit then begin for I := 0 to Image1.Picture.Bitmap.Height - 1 do begin CurrentLine := Image1.Picture.Bitmap.ScanLin e[I]; for J := 0 to Image1.Picture.Bitmap.Width - 1 do begin Summ := 0; if I > 0 then begin PrevisionLine := Image1.Picture.Bitmap.ScanLine[I - 1]; if J > 0 then begin Summ := Summ + PrevisionLine^[J - 1]; end; Summ := Summ + PrevisionLine^[J]; if J + 1 < Image1.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 < Imag e1.Picture.Bitmap.Width then begin Summ := Summ + CurrentLine^[J + 1]; end; if I + 1 < Image1.Picture.Bitmap.Height then begin NextLine := Image1.Picture.Bitmap.ScanLine[I + 1]; if J > 0 then begin Summ := Summ + NextLine^[J - 1]; end; Summ := Summ + NextLine^[J]; if J + 1 < Image1.Picture.Bitmap.Width then begin Summ := Summ + NextLine^[J + 1]; end; end; if (Summ div 9) <= Value then CurrentLine^[J] := Summ div 9; end; end; Image1.Visible := False; Image1.Visible := True; N4.Enabled := True; end else MessageBox(Handle,' Такой формат файла пока не подерживается ...', ' Слабоват я пока ...',MB_OK or MB_ICONSTOP or MB_APPLMODAL); end; Рис . № 3. Результат работы усредняющего фильтра. 2. Пороговый фильтр. Пороговый фильтр является модификацией усредняющего , и отличие заключается том , что замена значения яркости на среднее производится только в том случае , если разность между значением яркости и полученным средним превышает установленный порог . Выбор порога осуществляется в специальном диалоговом окне (Рис . 4). Для произведения фильтрации используется процедура AverageFilter, показанная в пункте 1. Рис . № 4.Выбор коэффициента усреднения порогового фильтра. Рис . № 5. Результат работы порогового фильтра. 3. Медианный фильтр. Одномерный медианный фильтр представляет собой скользящее окно охватывающее нечетное число элементов изображения . Центральный элемент заменяется медианой элементов изображения в окне . Медианой дискретной последовательности М элементов при нечетном 1 называют элемент, для которого существует (М -1)/2 элементе меньших или равных ему по величине и (М -1)/2 элементов больших или равных ему по величине . Медианный фильтр в одних случаях обеспечивает подавление шума , а в других - вызывает нежелательное подавление сигнала . Мед ианный фильтр не влияет на пилообразные и ступенчатые функции , что обычно является полезным свойством , однако он подавляет импульсные сигналы , длительность которых составляет менее половины ширины окна . Фильтр также вызывает уплощение вершины треугольной ф ункции . Возможны различные стратегии применения медианного фильтра для подавления шумов . Одна из них рекомендует начинать с медианного фильтра , окно которого охватывает три элемента изображения . Если ослабление сигнала незначительно , то окно расширяется д о пяти элементов . Так поступают до тех пор , пока медианная фильтрация начнет приносить больше вреда , чем пользы . Другая возможность состоит в каскадной медианной фильтрации сигнала с использованием фиксированной или изменяемой ширины окна . В общем случае т е области , которые остаются без изменения после однократной обработки , не меняются и после повторной обработки . Области , в которых длительность импульсных сигналов составляет менее половины ширины окна , будут подвергаться изменениям после каждого цикла об р аботки . Концепцию медианного фильтра можно легко обобщить на два измерения , применяя окно прямоугольной или близкой к круговой формы . Для реализации медианного фильтра используется следующий код : procedure TMainForm.N16Click(Sender: TObject); var PixelA rray:array of Byte; Value:Byte; CurrentLine:pByteArray; BoxCurrentLine:pByteArray; Vert,Hor:Integer; VertB,HorB:Integer; Counter:Integer; Temp:Byte; begin ValueForm.Caption := ' Размер окна фильтра n X n'; ValueForm.TrackBar1.Min := 3; ValueForm.TrackBar1.Max := 9; ValueForm.TrackBar1.Frequency := 2; ValueForm.Edit1.ReadOnly := True; if ValueForm.Execute(Value) then begin SetLength(PixelArray,Value*Value); if Image1.Picture.Bitmap.PixelFormat = pf8bit then begin for Vert := 0 t o Image1.Picture.Bitmap.Height - 1 do begin CurrentLine := Image1.Picture.Bitmap.ScanLine[Vert]; for Hor := 0 to Image1.Picture.Bitmap.Width - 1 do begin // Заносим все пиксели окошка в массив Counter := 0; for VertB := (Vert - (Value div 2)) to ( Vert + (Value div 2)) do begin if (VertB >= 0) and (VertB < Image1.Picture.Bitmap.Height) then BoxCurrentLine := Image1.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 < Image1.Picture.Bitmap.Width) and (VertB < Image1.Picture.Bitmap.Height) then PixelArray[Counter] := BoxCurrentLine^[HorB] else PixelArray[Counter] := 0; Inc(Counter); end; end; // Сортируем массив fo r 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; Image1.Visible := False; Image1.Visible := True; N4.Enabled := True; end else MessageBox(Handle,'Такой формат файла пока не поддерживается ...', ' Слабоват я пока ...',MB_OK or MB_ICONSTOP or MB_APPLMODAL); end; end; Результат работы фильтра можно увидеть на рис . № 6. Рис . № 6. Начало раб оты медианного фильтра – запрос на размер окна фильтра. 4. Заполнение объекта другим цветом. Для упрощения алгоритма слудующая процедура заполняет графические объекты только белым цветом , однако путем простого добавления диалогового окна с вопросом о цве те заполнения можно добиться заполнения объектов любым цветом. procedure TMainForm.Image1MouseDown(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 Image1.Picture.Bitmap.PixelFormat = pf8bit then begin // Запоминаем значение пиксела на котором щелкнули мышкой TargetPixel := pByteArray(Image1.Picture.Bitmap.ScanLine[Y]) ^[X]; YOffset := 0; // Пока число замен не станет равным 0 двигаемся вверх repeat ChangeCount := 0; if Y - YOffset < 0 then Break; // Берем линию CurrentLine := Image1.Picture.Bitmap.ScanLine[Y - YOffset]; PrevLine := Image1.Picture.Bitmap.Sc anLine[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 < Image1.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 > Image1.Picture.Bitmap.Width - 1 then Break; end; Inc(YOffset); until ChangeCount = 0; YOffset := 1; // Пока число з амен не станет равным 0 двигаемся вниз repeat ChangeCount := 0; if Y + YOffset > Image1.Picture.Bitmap.Width - 1 then Break; // Берем линию CurrentLine := Image1.Picture.Bitmap.ScanLine[Y + YOffset]; NextLine := Image1.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(XO ffset); Inc(ChangeCount); if X - XOffset - 1 < 0 then Break; end; XOffset := 0; // Заполняем вправо ее пока не дойдем до границы объекта if X + 1 < Image1.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 > Image1.Picture.Bitmap.Width - 1 then Break; end; Inc(YOffset); until ChangeCount = 0; Image1.Visible := False; Image1.Visible := True; end; end; Результаты работы программы можно увидеть на рис . № 8 и № 9. Рис . № 8. Исходное изображение для заполнения. Рис . № 9. Результат заполнения. 5. Инверсия. Ну и напоследок сделаем инверсию нашего изображения (Рис . 10, 11): procedure TMainForm.N7Click(Sender: TObject); var Line:pByteArray; I,J:Integer; Bits:Byte; begin Bits := 1; for I :=0 to Image1.Picture.Bitmap.Height - 1 do begin Line := Image1.Picture.Bitmap.ScanLine[I]; case Image1.Picture.Bitmap.PixelFormat of pf4bit:Bits := 1; pf8bit:Bits := 1; pf15bit:Bits := 2; pf16bit:Bits := 2; pf24bit:Bits := 3; pf32bit:Bits := 4; end; for J :=0 to Image1.Picture.Bitmap.Width * Bits - 1 do Line^[J] := 255 - Line^[J]; end; Image1.Visible := False; Image1.Visible := True; N4.Enabled := True; end; Рис . № 10. Исходное изображение для инверсии. Рис . № 11. Результат инверсии изображения .
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
- Деньги есть?
- Нет.
- А если найду?
- Буду вам весьма признателен.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по программированию "Программа фильтрации шумов", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru