Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Вниз

Фильтры bmp-изображения   Найти похожие ветки 

 
Angela_   (2004-12-01 21:45) [0]

Уважаемые мастера!
Подскажите, как мне написать фильтр шумов bmp-изображения,
низкочастотный и высокочастотный фильтры?
Буду благодарна, если вышлите или приведёте примерчик.
А то что-то никак!


 
programania ©   (2004-12-02 21:32) [1]

Если под низкочастотным фильтром
понимается фильтр пропускающий низкие частоты,
тогда это размытие или blur
он расчитывает среднее значение для пиксела
из тех что рядом проще всего так:

for y:=1 to h do for x:=1 to w do begin
 s:=0; q:=0;
 for yy:=y-d to y+d do for xx:=x-d to x+d do begin
    if (yy>0)and(yy<=h)and(xx>0)and(xx<=w) then begin
       inc(s,b[yy,xx]); inc(q);
    end;
 end;
 b[y,x]:=s div q;
end;
end;

h,w-размеры, d=1,2,3...- степень размытия
b массив яркостей пикселов или цветов
для больших d,h,w работает медлено,
для ускорения можно размыть сначала по строкам
потом по столбцам или есть сложнее, быстрее и качественее.

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

Шумы bmp-изображения обычно мелкие,
поэтому от них можно избавиться размыв изображение,
однако чтобы не потерять общую резкость
это нужно делать только там где нет резких
границ крупных деталей причем учитывать это плавно.
Этого можно добиться используя размытие разной силы.
Как это делается можно посмотреть в photoshop:
"фильтр,шум,пыль и помехи, smart blur", acdsee(fotocanvas), neatImage.com
Для специфических шумов и помех можно придумать
что-то посложнее.


 
Fenik   (2004-12-04 21:48) [2]

>programania ©  (02.12.04 21:32) [1]

Шумы убираются не размытием.
Просто берутся пикселы вокруг исходного (3х3, 5х5, 7х7 или 9х9), сортируются по каждому компоненты RGB и присваюется среднее значение исходному пикселу.


 
Fenik   (2004-12-04 21:50) [3]

>Fenik  (04.12.04 21:48) [2]
>присваюется среднее значение исходному пикселу.

Среднее - значит не среднеарифметическое, а среднее в отсортированном списке.


 
programania ©   (2004-12-06 02:00) [4]

>Fenik   (04.12.04 21:50) [3]
Спасибо за сведения,
испытал этот способ, действительно хорошо уменьшает шум,
хотя появляются контуры и пятна и все равно размывает.
Может что не так понял:

var x,y,d,q,xx,yy,z,n,i,j,w,h:integer; m:array[1..81] of byte;
begin
d:=1{2,3,4}; q:=d*2+1; q:=q*q-1; q:=q div 2;
for y:=d+1 to h-d do for x:=d+1 to w-d do begin
 n:=0;
 for yy:=y-d to y+d do for xx:=x-d to x+d do
 if (yy<>y)or(xx<>x) then begin
// сортировка вставкой
   z:=bw[yy,xx]; //вход
   i:=1; while (i<=n)and(z>m[i]) do inc(i);
   for j:=n downTo i do m[j+1]:=m[j];
   m[i]:=z;
   inc(n);
 end;
 br[y,x]:=m[q];  //результат
end;
end;

Можно делать только для яркости или
для 3-х цветов, для яркости и 2-ух разностных цветов,
с размером d=1,2,3..., один раз или несколько,
однако и размытие и этот способ
годятся для плотных и мелких шумов
иначе от них больше вреда.
Наверно для редких и крупных шумов нужно
выделять параметры шума, пользуясь тем что
он по всей картинке, распознавать и вычитать,
похоже так действует neatImage.
Может кто знает где есть на эту тему?


 
Sapersky   (2004-12-06 13:15) [5]

http://www.cee.hw.ac.uk/hipr/html/filtops.html



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.042 c
1-1110471877
nes
2005-03-10 19:24
2005.03.27
BRCC32.exe (Borland Resource CommandLine Compiler)


14-1110210478
Anny
2005-03-07 18:47
2005.03.27
как записать музыку с интернет-радио


3-1109253535
Alex_V
2005-02-24 16:58
2005.03.27
Доступ к базам Clarion


3-1109669846
syte_ser78
2005-03-01 12:37
2005.03.27
вычисляемое поле в дбгриде


4-1108372336
SergeyZh
2005-02-14 12:12
2005.03.27
Как определить нажатие кнопки мыши?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский