как применить фильтр режектор для изображения, показанного в matlab [duplicate]

Самое простое решение - создать функцию JavaScript и вызвать его для обратного вызова Ajax success.

function callServerAsync(){
    $.ajax({
        url: '...',
        success: function(response) {

            successCallback(response);
        }
    });
}

function successCallback(responseObj){
    // Do something like read the response and show data
    alert(JSON.stringify(responseObj)); // Only applicable to JSON response
}

function foo(callback) {

    $.ajax({
        url: '...',
        success: function(response) {
           return callback(null, response);
        }
    });
}

var result = foo(function(err, result){
          if (!err)
           console.log(result);    
}); 
3
задан rayryeng 24 March 2015 в 17:15
поделиться

2 ответа

Если вы посмотрите на fft изображения, вы можете четко видеть сильные частоты, вызывающие рисунок на изображении.

enter image description here [/g0]

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

enter image description here [/g1]

Изображение ifft (с усилением контраста) оказывается be

enter image description here [/g2]

Вот некоторый код MATLAB, используемый для создания и применения фильтра

I = imread('YmW3f.png');
ft = fftshift(fft2(I));
[m,n] = size(ft);

% define some functions
norm_img = @(img) (img - min(img(:))) / (max(img(:)) - min(img(:)));
show_spec = @(img) imshow(norm_img(log(abs(img)-min(abs(img(:)))+1.0001)));
gNotch = @(v,mu,cov) 1-exp(-0.5*sum((bsxfun(@minus,v,mu).*(cov\bsxfun(@minus,v,mu)))));

% show spectrum before
figure();
show_spec(ft);

% by inspection
cx = 129;
cy = 129;

% distance of noise from center
wx1 = 149.5-129;
wx2 = 165.5-129;
wy  = 157.5-129;

% create notch filter
filt = ones(m,n);

% use gaussian notch with standard deviation of 5
sigma = 5;
[y,x] = meshgrid(1:n, 1:m);
X = [y(:) x(:)].';
filt = filt .* reshape(gNotch(X,[cx+wx1;cy+wy],eye(2)*sigma^2),[m,n]);
filt = filt .* reshape(gNotch(X,[cx+wx2;cy+wy],eye(2)*sigma^2),[m,n]);
filt = filt .* reshape(gNotch(X,[cx-wx1;cy-wy],eye(2)*sigma^2),[m,n]);
filt = filt .* reshape(gNotch(X,[cx-wx2;cy-wy],eye(2)*sigma^2),[m,n]);

% apply filter
ft = ft .* filt;

% show spectrum after
figure();
show_spec(ft);

% compute inverse
ifft_ = ifft2(ifftshift( ft));
img_res = histeq(norm_img(ifft_));

figure();
imshow(img_res);

Редактирование: измененные параметры для meshgrid по причине, указанной Тоддом Жиллеттом.

6
ответ дан jodag 23 August 2018 в 16:59
поделиться

Ответ jodag работает хорошо для меня, за исключением замены m и n в команде meshgrid. Он должен быть

    [y,x] = meshgrid(1:n, 1:m);

Он работал в этом примере, потому что изображение квадратное, но с прямоугольным изображением оно не работает должным образом.

[Я бы предпочел комментировать, но у меня пока нет репутации.]

2
ответ дан Todd Gillette 23 August 2018 в 16:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: