Главная страница
    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.038 c
3-1109791777
Arazel
2005-03-02 22:29
2005.03.27
Мне например нравится VarChar иза того что он обрезает


1-1110573795
seregka
2005-03-11 23:43
2005.03.27
Как правильно пользоваться TprogressBar и/или Tgauge


14-1110291057
Knight
2005-03-08 17:10
2005.03.27
Aura Fate of the Ages


1-1110489591
GL00m
2005-03-11 00:19
2005.03.27
Не могу сконвертить 01Dec04 в TDate...


14-1110344649
Некто
2005-03-09 08:04
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский