Я использую изображение clown.jpg, чтобы иметь возможность избавиться от очевидного шаблона/шума, который он имеет.Удаление рисунка и шума в изображении с использованием FFT в matlab
Первый шаг, который я сделал, прежде чем принимать FFT этого изображения, чтобы изменить масштаб ему квадратное изображение полномочий двух (т.е. 256 х 256). Использование FFT и fftshift в matlab дает быстрое преобразование Фурье с интенсивностями, центрированными в изображении. Следующее изображение является результатом использования предыдущих упомянутых функций.
Я был успешным, чтобы удалить шаблон/шум обнуления «звезды» вручную на изображении FFT, как показано ниже:
Принимая IFFT я получаю гораздо лучше качество изображения (не показано).
Вопрос, который у меня есть, заключается в автоматическом способе обнуления «звезд»? Я создал интервал, где нулевые изображения, поскольку мы не хотим удалять самую яркую «звезду», компонент постоянного тока или низкие значения. Такой порог приведен ниже:
filter = (fLog > .7*max(fLog(:))) | (fLog < .25*max(fLog(:)))
where fLog is the log(1+abs(Fourier image)) and .7 and .25 are the corresponding
interval percentages.
Маска вывода (которую я буду умножать на изображение Фурье) находится ниже. Черный соответствует значению 0, а белый соответствует 1. Обратите внимание, что фильтрация этой маски удаляет некоторые «звезды» и удерживает часть компонента постоянного тока. Очевидно, что этот метод не самый лучший.
Я читал о выполнении фильтра высоких частот, но это, кажется, чтобы удалить все внешние значения в изображении Фурье. Это основано на моем предыдущем тестировании (я не включил эти изображения).
Есть ли что-то, что вы рекомендуете выделять значениями высокой интенсивности, за исключением компонента постоянного тока. В идеале я хотел бы получить маску, чтобы выглядеть следующим образом:
Источник: http://users.accesscomm.ca/bostrum/Imaging/tips/tip1.html
В другом месте, было упомянуто использование «ФВЧ и уровень коррекции данных FFT сохранить только заблудших точки, которые представляют растровый рисунок ». Я не понимаю, как это сделать.
источник: http://www.robotplanet.dk/graphics/raster_removal/
Ваша помощь будет принята с благодарностью.
Вот мой исходный код, чтобы помочь:
I = imread('clown.jpg'); % Read Image
% convert to grayscale
I = rgb2gray(I);
% normalize the image and conver to doubleI
I = double(mat2gray(I));
% Resize the image
I = imresize(I, [256 256]);
% get the size of the image
[rows,cols] = size(I);
% apply FFT
f = fftshift(fft2(I));
% used to plot the image
fLog = log(1 + abs(f));
% filter by a range based on fLog
filter = (fLog > .7*max(fLog(:))) | (fLog < .25*max(fLog(:)));
B = abs(ifft2(f.*filter));
colormap(gray)
subplot(2,2,1),imagesc(I); title('Original Image')
subplot(2,2,2),imagesc(fLog); title('Fourier Image')
subplot(2,2,3),imagesc(filter); title('Zeroed Fourier Image')
subplot(2,2,4),imagesc(B); title('Cleaned Image')
annotation('textbox', [0 0.9 1 0.1], ...
'String', 'Fourier Analysis on Clown Image', ...
'EdgeColor', 'none', ...
'HorizontalAlignment', 'center', ...
'FontSize', 15, ...
'FontWeight', 'bold')
Вы знаете, где компоненты постоянного тока, почему бы не исключить их явно? –
Это, кстати, довольно известный метод. См. Например, http://books.google.com/books?id=gxXXRJWfEsoC&pg=PA364&lpg=PA364#v=onepage&q&f=false Я еще не видел, как люди удаляют «звезды», но просто диск рядом с соответствующим место в fft. – tom10
@MarkRansom Да, это правда, однако мне было интересно, есть ли какой-то код, который автоматизировал все. –