function out = wienerFilter2(G, H, s)
dim = size(G);
Gf = fft2(G);
Hf = fft2(H, dim(1), dim(2));
H2 = abs(Hf).^2;
out = ifft2(H2.*Gf./((H2+s).*Hf));
Фильтр Винера
Имеется такая задача - реализация фильтра Винера.
Сам фильтр, вроде как классика, и описан много где, но вот конкретной реализации или достаточно подробного описания алгоритма и что-то нигде не нашел.
Выглядит он и действительно несложно: G(u,v) = H*(u,v) / ( |H(u,v)|^2 + Pn(u,v)/Pf(u,v) )
Однако для человека, практически впервые подошедшего к проблеме работы с изображениями возникают некоторые вопросы.
1. Сказано, что H(u,v) - это у нас "blurring filter". Даже сказано, что в случае когда у нас расфокусировка H(u,v)=e^(-m*((u^2+v^2)^(5/6))) где m-сила размытия. Ок, а как тогда выглядит линейное ("motion blur") ?
2. H*(u,v) - это что?
3. Как считается |H(u,v)| ?
4. Ну и Pn(u,v) c Pf(u,v), про них сказано, что это мощности шума и сигнала соответственно. Как их считать?
Все, что я нашел на данный момент это вот:
Код:
Сам этот код меня несколько смущает, на пример, не совсем понятно, что есть dim(1) и dim(2). ну и запись "H2.Gf*." Тоже не совсем ясна, может просто ошибка?
Вот что более-менее понятно, что fft2 - двухмерное быстрое преобразование Фурье. Это оно?
Код:
void Filter()
{
int i,j,u,v;
double F_Re_DFT,F_Im_DFT,B_Re_DFT,B_Im_DFT;
F_Re_DFT=0;F_Im_DFT=0;
B_Re_DFT=0;B_Im_DFT=0;
for (u=0; u<w-1; u++)
for (v=0; v<h-1; v++)
{
for (i=0; i<w-1; i++)
for (j=0; j<h-1; j++)
{
F_Re_DFT=F_Re_DFT+(1/(h*w))*(buf[v]*cos(2*pi*(u*i/w+v*j/h)));
F_Im_DFT=F_Im_DFT+(1/(h*w))*(buf[v]*sin(2*pi*(u*i/w+v*j/h)));
}
new_re[v]=(int)F_Re_DFT;
new_im[v]=(int)F_Im_DFT;
}
{
int i,j,u,v;
double F_Re_DFT,F_Im_DFT,B_Re_DFT,B_Im_DFT;
F_Re_DFT=0;F_Im_DFT=0;
B_Re_DFT=0;B_Im_DFT=0;
for (u=0; u<w-1; u++)
for (v=0; v<h-1; v++)
{
for (i=0; i<w-1; i++)
for (j=0; j<h-1; j++)
{
F_Re_DFT=F_Re_DFT+(1/(h*w))*(buf[v]*cos(2*pi*(u*i/w+v*j/h)));
F_Im_DFT=F_Im_DFT+(1/(h*w))*(buf[v]*sin(2*pi*(u*i/w+v*j/h)));
}
new_re[v]=(int)F_Re_DFT;
new_im[v]=(int)F_Im_DFT;
}
Где buf - обрабатываемое изображение.
Заранее спасибо за любые ответы, советы и рекомендации.
Что, никто никогда не сталкивался? Классическая задача при обработке изображений, вроде...
VB что-ли....
imho надо было в раздел Графика идти...
Цитата: Tingo
чесна говоря я даже не понял какой это язык.
VB что-ли....
VB что-ли....
Похоже на скрипт(?) MatLab.