Фильтр Хемминга для уменьшения артефактов в изображении

У меня есть изображение с низким разрешением (sLR), которое генерируется путем выбора центральной части эталонного изображения с высоким разрешением (sHR) в частотной области (в k-пространстве) в направлении строк. Когда я обнуляю это изображение с низким разрешением в частотной области, я получаю вызывающий артефакт в пространственной области, как и ожидалось. Я пытаюсь удалить этот артефакт, фильтруя изображение с помощью окна Хэмминга. Пожалуйста, смотрите мой код ниже. У меня есть сомнения по поводу применения fft и ifft к изображению, а также процесса фильтрации, и я был бы благодарен, если бы кто-то мог, пожалуйста, просмотреть мой код и подтвердить его правильность.

% sHR: HR reference image
n = size(sHR,1);
kspHR = fftshift(fft(sHR,n,1),1)/n; % HR image in k-space

% Generating LR image (LR in row-direction)
kspLR = kspHR((n/2)-(n/4)+1:(n/2)+(n/4),:); 
sLR = real(ifft(ifftshift(kspLR,1),n,1)))*n; 

% Zero-padding
a = floor(size(kspLR,1)/2);
kspZP = padarray(kspLR, a ,'both');
sZP = real(ifft(ifftshift(kspZP,1),n,1)))*n;% image with Ringing artifact

% Apply Hamming filter to Zero-padded kspace image (kspZP)
[r,c]=size(abs(kspZP));
w = hamming(r);
W = repmat(w,[1,c]);
kspHM = W.*kspZP
sHM = real(ifft(ifftshift(kspHM,1),n,1)))*n; % Filtered image in spatial domain

Мой второй вопрос: когда я использую iffft, выходное изображение обычно имеет отрицательную интенсивность. Для дальнейшей обработки в Пространственной области это нормально, если я нормализую интенсивность изображения таким образом, чтобы минимальная интенсивность изображения была 0? или я должен использовать абсолют изображения?

1 ответ

Решение
  1. Это не стандартное использование окна Хэмминга, но, будучи своего рода гауссовой формой, это может помочь. Попробуйте применить окно (или другую частотную характеристику) вместо того, чтобы вырезать центральную часть спектра, или вписать его в центральную часть. В противном случае резкое отключение сохранится, как и звон.

  2. Я бы предложил обрезать эти отрицательные значения до нуля, используя max(0,..., так как они представляют звуки, которые вы не хотите. Может также обрезать неожиданно большие значения 1,

Другие вопросы по тегам