2015-02-07 3 views
-1

Я изучаю теорию вейвлетов для обработки изображений. Чтобы понять теорию, я пишу одну программу Matlab для разложения одного черно-белого изображения. Программа выглядит следующим образом:Почему вейвлет-коэффициенты нули после разложения

Image = zeros(256, 256, 'uint8'); 
Image(101:200, 101:200) = 255; 
figure; imshow(Image); 
[cA1, cH1, cV1, cD1] = dwt2(Image, 'db1'); 
Image1 = [cA1, cH1; cV1, cD1]; 
figure; imshow(Image1, []); 
[cA1, cH1, cV1, cD1] = dwt2(Image, 'db2'); 
Image1 = [cA1, cH1; cV1, cD1]; 
figure; imshow(Image1, []); 

Первое разложение с использованием аргумента db1 дает нули для всех коэффициентов вейвлетов. Черно-белое изображение имеет переход от 0 до 255 по горизонтали и по вертикали и должно иметь высокочастотную составляющую. Почему генерируются нулевые вейвлет-коэффициенты? Если я изменю аргумент от db1 до db2, результат будет показывать горизонтальные и вертикальные линии в поддиапазонах.

ответ

2

Если вы помните, db1 - Haar Wavelet. Haar Wavelet принимает либо среднее значение пикселей в локальных окнах для коэффициентов аппроксимации (или полосы LL), либо разницу пикселей в локальных окнах для подробных коэффициентов (или диапазонов LH, HL и HH).

Следует иметь в виду, что только указанное входное изображение состоит из двух интенсивностей: 0 и 255. Кроме того, вы устанавливаете квадратную сетку в пределах этого изображения как 255 и равномерно сформированы.

Для замкнутости, это то, что ваше тестовое изображение выглядит следующим образом:

enter image description here

Это равномерно форма объект внутри квадрата изображения важно как часть рассуждений, почему вы не получаете вывода для подробных изображений (HL, LH и HH).

Лучший способ описать, почему вы видите вывод для db2, а не db1, можно визуально отобразить.

Это слайд из University of Toronto's CS 320: Introduction to Visual Computing course, в частности, Discrete Wavelet Transform lecture:

enter image description here

Вы хорошо знаете, что когда вы берете 2D DWT, вы производите 4 суб-изображения, которые являются наполовину разрешение из оригинальное изображение. Первый выход dwt2 - это коэффициенты аппроксимации, где каждый выходной пиксель является средним размером окна 2 x 2. Остальные выходы (второй, третий и четвертый) - это окна с деталями, которые берут два пикселя в окне и вычитают их с двумя другими пикселями в окне.

Таким образом, причина, почему вы не получать выход с db1 происходит потому, что все ваши расчеты для детализации изображения будут отменить аут. В частности, вы получите 2 x 2 окна либо полностью 0, либо полностью 255, а при вычислении подробных изображений вы получите 0s для вывода независимо. Вы должны добавить два значения 0 или два 255 значения, и вы вычтите эти два значения 0 или 255 значений соответственно, что приведет к выводу 0 независимо от.

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

Я хотел бы подчеркнуть, что если у вас есть более сложная форма, которая неоднородна, db1, конечно, не даст вам нулевой выхода. Попробуйте на любом тестовом изображении, которое поставляется с MATLAB, например, с cameraman.tif.


Надеюсь, это поможет!

Смежные вопросы