Этот пример показывает, как эффекты ребра могут привести к коэффициентам shearlet с ненулевыми мнимыми частями даже в реальной системе shearlet. В примере также рассматриваются две стратегии смягчения этих эффектов границы: изменение размера или заполнение изображения и изменение количества шкал.
Полосное конусно-адаптированное конечное преобразование шестерни, реализованное в shearletSystem
объект разработан в [1] и [2]. Проблема потенциальных эффектов ребра в этой системе подробно обсуждается в [1].
Шипованные конусообразные шестерни выполнены в частотный диапазон, для получения дополнительной информации см. Shearlet Systems. Шестеренчатые фильтры в shearletSystem
используйте незначительное изменение пространственной внутренней системы координат, описанной в Image Coordinate Systems (Image Processing Toolbox). Если вы знакомы с соглашениями MATLAB для упорядоченного расположения пространственных частот в 2-D дискретном преобразовании Фурье, можно пропустить этот раздел примера.
В MATLAB 2-D преобразование Фурье упорядочивает частоты в направлении X и Y, начиная с (X, Y) = (0,0) в верхнем левом углу изображения. Чтобы увидеть это, создайте изображение, состоящее только из DC или среднего компонента.
imMean = 10*ones(5,5); imMeanDFT = fft2(imMean)
imMeanDFT = 5×5
250 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Пространственные частоты увеличиваются вниз по размерности строки (Y) и поперек столбцов (X) до достижения частоты Найквиста и затем снова уменьшаются. В приведенном выше примере в изображении нет колебаний, поэтому вся энергия сконцентрирована в imMeanDFT(1,1)
, что соответствует (0,0) в пространственных частотах. Теперь создайте изображение, состоящее из ненулевого среднего значения и синусоиды с низкой отрицательной частотой в обоих направлениях X и Y.
x = 0:15; y = 0:15; [X,Y] = meshgrid(x,y); Z = 5+4*exp(2*pi*1j*(12/16*X+12/16*Y)); Zdft = fft2(Z); imagesc(abs(Zdft))
Средний компонент находится в верхнем левом углу ДПФ 2-D, и низкая отрицательная частота в направлении X и Y находится в правом нижнем углу изображения, как и ожидалось.
Теперь применить fftshift
, который для матриц (изображений) меняет первый квадрант на третий, а второй квадрант на четвертый. Это означает, что высокие отрицательные пространственные частоты в X и Y теперь находятся в верхнем левом углу. Пространственная частота уменьшается в направлении Y до нуля и затем снова увеличивается до Nyquist, когда вы перемещаетесь вниз по изображению. Точно так же пространственные частоты в X уменьшаются, когда вы перемещаетесь вдоль изображения вправо до нуля, а затем увеличиваетесь до Nyquist. (0,0) пространственная частотная составляющая перемещается в центр изображения.
imagesc(abs(fftshift(Zdft)))
Частотное упорядоченное расположение резьбовых фильтров, возвращаемых filterbank
функция следует этому сдвинутому соглашению для пространственных частот в X, но соглашение перевернуто для пространственных частот в Y. Пространственные частоты в Y большие и положительные в верхнем левом углу, уменьшаются к нулю, когда вы движетесь вниз по строкам и снова увеличиваетесь к большим отрицательным пространственным частотам. Соответственно, пространственные частоты Y перевернуты относительно fftshift
MATLAB
выход. Это не влияет на расчет коэффициентов shearlet. Это необходимо учитывать только при визуализации фильтров резьбы в 2-D частотные диапазоны.
Получите реальную систему шестеренок с размером изображения по умолчанию 128 на 128. Визуализируйте три горизонтальных адаптированных к конусам сдвига для коэффициентов сдвига -1,0,1, соответственно, в самой грубой пространственной шкале (самое лучшее пространственное разрешение частоты).
sls = shearletSystem; [psi,scale,shear,cone] = filterbank(sls); omegax = -1/2:1/128:1/2-1/128; omegay = -1/2:1/128:1/2-1/128; figure subplot(2,2,1) surf(omegax,flip(omegay),psi(:,:,2),'EdgeColor',"none") view(0,90) title('Horizontal Cone — Shear = -1') xlabel('$\omega_x$','Interpreter',"latex",'FontSize',14) ylabel('$\omega_y$','Interpreter',"latex","FontSize",14) subplot(2,2,2) surf(omegax,flip(omegay),psi(:,:,3),'EdgeColor',"none") xlabel('$\omega_x$',"Interpreter","latex",'FontSize',14) ylabel('$\omega_y$',"Interpreter","latex","FontSize",14) view(0,90) title('Horizontal Cone — Shear = 0') subplot(2,2,3) surf(omegax,flip(omegay),psi(:,:,4),'EdgeColor',"none") xlabel('$\omega_x$',"Interpreter","latex","FontSize",14) ylabel('$\omega_y$',"Interpreter","latex","FontSize",14) view(0,90) title('Horizontal Cone — Shear = 1')
Как ожидалось и требовалось для того, чтобы шестерни были реальными в пространственной области, их реальные преобразования Фурье должны быть симметричными относительно положительных и отрицательных X и Y пространственных частот. Повторите шаги для адаптированных к конусам вертикальных сдвигов при самой мелкой пространственной шкале частоты.
figure subplot(2,2,1) surf(omegax,flip(omegay),psi(:,:,5),'EdgeColor',"none") view(0,90) title('Vertical Cone — Shear = -1') xlabel('$\omega_x$','Interpreter',"latex",'FontSize',14) ylabel('$\omega_y$','Interpreter',"latex","FontSize",14) subplot(2,2,2) surf(omegax,flip(omegay),psi(:,:,6),'EdgeColor',"none") xlabel('$\omega_x$',"Interpreter","latex",'FontSize',14) ylabel('$\omega_y$',"Interpreter","latex","FontSize",14) view(0,90) title('Vertical Cone — Shear = 0') subplot(2,2,3) surf(omegax,flip(omegay),psi(:,:,7),'EdgeColor',"none") xlabel('$\omega_x$',"Interpreter","latex","FontSize",14) ylabel('$\omega_y$',"Interpreter","latex","FontSize",14) view(0,90) title('Vertical Cone — Shear = 1')
В квадратном изображении легче гарантировать необходимую симметрию для всех факторов сдвига и расширений, чем в изображении, где соотношение сторон отличается от единицы. Чем более выражена разница между высотой и размерностями ширины изображения, тем сложнее становится обеспечить необходимую симметрию. Обеспечение совершенной симметрии в плоскости 2-D частоты также сложнее, когда шестерня перекрывает ребра изображения.
В shearletSystem
количество шкал определяет поддержку lowpass. Чем больше количество шкал, тем больше концентрирована поддержка частоты lowpass вокруг (0,0). Для реальной системы срезов шесть срезов шкалы-0 (3 горизонтальных и 3 вертикальных срезов) заполняют поддержку частоты вокруг фильтра lowpass. Соответственно, в то время как количество срезов постоянно в заданном масштабе, фактическая частотная поддержка срезов не имеет значения. Чтобы увидеть это, создайте другую систему срезов только с одним масштабом и постройте график срезов шкалы 0 вертикального конуса.
sls1 = shearletSystem('NumScales',1); psi1 = filterbank(sls1); figure subplot(2,2,1) surf(omegax,flip(omegay),psi1(:,:,5),'EdgeColor',"none"); view(0,90) title('Vertical Cone — Shear = -1') xlabel('$\omega_x$','Interpreter',"latex",'FontSize',14) ylabel('$\omega_y$','Interpreter',"latex","FontSize",14) subplot(2,2,2) surf(omegax,flip(omegay),psi1(:,:,6),'EdgeColor',"none"); xlabel('$\omega_x$',"Interpreter","latex",'FontSize',14) ylabel('$\omega_y$',"Interpreter","latex","FontSize",14) view(0,90) title('Vertical Cone — Shear = 0') subplot(2,2,3) surf(omegax,flip(omegay),psi1(:,:,7),'EdgeColor',"none"); xlabel('$\omega_x$',"Interpreter","latex","FontSize",14) ylabel('$\omega_y$',"Interpreter","latex","FontSize",14) view(0,90) title('Vertical Cone — Shear = 1')
В этой системе шестеренок шкала-0 имеют всю свою энергию в самых высоких пространственных частотах X и Y. На этих ребрах 2-D плоскости частот симметрия, необходимая для чисто вещественных коэффициентов шестеренки, может страдать численными нестабильностями. Важной точкой является то, что шкала, при которой это может произойти, зависит от количества шкал в системе shearlet, а также соотношения сторон анализируемого изображения.
Постройте график частотных характеристик lowpass и шести срезающих фильтров, чтобы показать, как 2-D плоскость частот заполнена, что обеспечивает совершенную систему реконструкции.
figure for ns = 1:size(psi1,3) surf(omegax,flip(omegay),psi1(:,:,ns),'edgecolor','none'); xlabel('$\omega_x$','Interpreter',"latex","FontSize",14) ylabel('$\omega_y$','Interpreter',"latex",'FontSize',14) view(0,90); hold on; end title('One-Scale Shearlet Transform Filters')
При наличии только одной шкалы в системе срезных отверстий шесть срезов должны заполнять любую область 2-D, разнос частот не покрывается фильтром lowpass. Соответственно, разбивка симметрии, требуемой для чисто действительных коэффициентов шестеренки, может происходить, когда присутствует только одна шкала, потому что эти шестерни имеют поддержку, перекрывающую ребра. В следующем разделе рассматриваются два способа защиты от внешнего вида комплексных коэффициентов в реальном преобразовании шестеренки.
По возможности используйте квадратные изображения. Легче гарантировать совершенную симметрию в частотной характеристике shearlet, когда соотношение сторон одно. Это верно, даже когда фильтры шестеренки перекрывают ребро изображения. Если у вас есть Image Processing Toolbox™, можно использовать imresize
. Прочтите на следующем изображении и отобразите изображение и его размер.
im = imread('pout.tif');
size(im)
ans = 1×2
291 240
figure imshow(im)
Изображение 291 на 240. Количество шкал по умолчанию в преобразовании shearlet для этого размера изображения 4. Получите реальное преобразование шестеренки для количества шкал по умолчанию. Проверяйте, имеет ли какой-либо из коэффициентов ненулевую мнимую часть.
sls = shearletSystem('ImageSize',size(im));
cfs = sheart2(sls,double(im));
max(imag(cfs(:)))
ans = 0
~any(imag(cfs(:)))
ans = logical
1
Коэффициенты shearlet являются чисто реальными, как и ожидалось. Повторите шаги с максимальным количеством шкал, равным 2.
sls = shearletSystem('ImageSize',size(im),'NumScales',2); cfs = sheart2(sls,double(im)); max(imag(cfs(:)))
ans = 9.7239e-05
~any(imag(cfs(:)))
ans = logical
0
Теперь коэффициенты shearlet не являются чисто реальными. Идеальное свойство реконструкции преобразования не затронуто.
imrec = isheart2(sls,cfs); max(abs(imrec(:)-double(im(:))))
ans = 2.1316e-13
Однако наличие комплексных коэффициентов шиповника может быть нежелательным.
Одна стратегия смягчить это, если Вы хотите преобразование с двумя шкалами, состоит в том, чтобы изменить размеры изображения к 291 на 291.
imr = imresize(im,[291 291]); imshow(imr)
sls = shearletSystem('ImageSize',size(imr),'NumScales',2); cfs = sheart2(sls,double(imr)); max(imag(cfs(:)))
ans = 0
~any(imag(cfs(:)))
ans = logical
1
Путем простого изменения размера изображения, чтобы иметь соотношение сторон, равную единице, вы можете получить чисто реальное преобразование шестеренки с желаемым количеством шкал.
В качестве альтернативы изменению размеров можно просто дополнить изображение нужным размером. Используйте wextend
функция для обнуления столбцов изображений равной 291. Получите преобразование shearlet изображения с нулевым заполнением и проверьте, что коэффициенты чисто действительны. Если вас интересуют только коэффициенты анализа, можно отменить любое заполнение после получения преобразования shearlet. Это связано с тем, что изображения коэффициента шестеренки имеют такое же пространственное разрешение, как и оригинальное изображение.
impad = wextend('ac','zpd',im,51,'r'); cfs = sheart2(sls,double(impad)); max(imag(cfs(:)))
ans = 0
~any(imag(cfs(:)))
ans = logical
1
Существуют случаи, когда достаточно просто увеличить или уменьшить количество шкал на единицу, чтобы исключить любые эффекты ребра в симметрии преобразования шестеренки. Для примера с помощью оригинального изображения простое увеличение количества шкал на один приводит к чисто вещественным коэффициентам.
sls = shearletSystem('ImageSize',size(im),'NumScales',3); cfs = sheart2(sls,double(im)); max(imag(cfs(:)))
ans = 0
~any(imag(cfs(:)))
ans = logical
1
[1] Häuser, Sören, and Gabriele Steidl. «Fast Finite Shearlet Transform: A Tutorial». arXiv preprint arXiv:1202.1773 (2014).
[2] Voigtlaender, Felix, and Anne Pein. "Разность анализа и синтеза для -Shearlets ". arXiv preprint arXiv:1702.03559 (2017).
isheart2
| shearletSystem
| sheart2