Форум: "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.033 c