Главная страница
    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
Время: 3.445 c
14-1110019398
Хинь
2005-03-05 13:43
2005.03.27
Эмуляция Drag n Drop


1-1110810251
Chrom
2005-03-14 17:24
2005.03.27
Можно ли заблокировать клавиатуру и мышь программно?


14-1109945890
Vlad Oshin
2005-03-04 17:18
2005.03.27
В предверии 8 марта. Нет ли у кого красивых поздравлялок?


1-1110804922
starik30
2005-03-14 15:55
2005.03.27
Обработка нажатия клавиш ALT+ в Application.OnMessage


9-1104873227
Tankist
2005-01-05 00:13
2005.03.27
Как менять гамму в Direct3D





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