ОписаниеJpeg2000 2-уровневое вейвлет-преобразование-lichtenstein.png | На рисунке показано двухуровневое вейвлет-преобразование. Для фильтров нижних и верхних частот я использовал то же самое, что и JPEG2000, преобразование с потерями, так что это вейвлет, который используется в формате JPEG2000. В общем, довольно сложно правильно показать вейвлет-преобразование из-за разных диапазонов различных частей. Я сделал следующий выбор. Прежде всего, я хотел использовать картинку как с плоскими поверхностями, так и с резкими краями и деталями. Для этой цели обычно используется стандартный тестовый образ Lenna, но я не хотел его использовать, потому что он не является общедоступным. Я взглянул на большую избранную картинную галерею con Commons и выбрал изображение: Lichtenstein img processing test.png, потому что он имеет много деталей в левом нижнем углу, а в правом верхнем углу почти нет деталей из-за неба. Более того, края замка действительно резкие, поэтому их хорошо видно в вейвлет-преобразовании. Я сохранил исходное изображение в файле lichtenstein.png , чтобы упростить его. Затем я использовал следующий сценарий Matlab: очистить все % ввод должен быть 512x512img = imread ( 'lichtenstein.png' );img = im2double ( img );img = rgb2gray ( img );% фильтры в JPEG2000Lo_D = [ 0,0267 - 0,0168 - 0,0782 0,2668 0,6029 0,2668 - 0,0782 - 0,0168 0,0267 ]; Hi_D = [ 0,0912 - 0,0575 - 0,5912 1,1150 - 0,5912 - 0,0575 0,0912 ]; % вычислить двухуровневое вейвлет-преобразование[ масштабированный , вертикальный , горизонтальный , диагональный ] = dwt2 ( img , Lo_D , Hi_D ); [ масштабированный2 , вертикальный2 , горизонтальный2 , диагональный2 ] = dwt2 ( масштабированный , Lo_D , Hi_D ); % кадрирования изображений (для демонстрации)scaled2 = imcrop ( scaled2 , [ 4 4 127 127 ]); horizontal2 = imcrop ( horizontal2 , [ 4 4 127 127 ]); vertical2 = imcrop ( vertical2 , [ 4 4 127 127 ]); диагональ2 = imcrop ( диагональ2 , [ 4 4 127 127 ]); по горизонтали = imcrop (по горизонтали , [ 4 4 255 255 ]); вертикальный = imcrop ( вертикальный , [ 4 4 255 255 ]); диагональ = imcrop ( диагональ , [ 4 4 255 255 ]); % увеличения контрастности (для демонстрации)вертикальный = imadjust ( абс ( вертикальный ));горизонтальный = imadjust ( абс ( горизонтальный ));диагональ = imadjust ( абс ( диагональ ));vertical2 = imadjust ( abs ( vertical2 ));horizontal2 = imadjust ( abs ( horizontal2 ));диагональ2 = imadjust ( абс ( диагональ2 ));% сложил их все вместепреобразовать = нули ( 512 , 512 );преобразовать ( 1 : 128 , 1 : 128 ) = масштабированное2 ;преобразовать ( 1 : 128 , 129 : 256 ) = по горизонтали2 ;преобразовать ( 129 : 256 , 1 : 128 ) = vertical2 ;преобразовать ( 129 : 256 , 129 : 256 ) = диагональ2 ;преобразовать ( 1 : 256 , 257 : 512 ) = по горизонтали ;преобразовать ( 257 : 512 , 1 : 256 ) = по вертикали ;преобразование ( 257 : 512 , 257 : 512 ) = диагональ ;imwrite ( преобразование , 'Jpeg2000_2-level_wavelet_transform-lichtenstein.png' ); Если бы я поместил все преобразования одно рядом с другим, у меня было бы изображение шире, чем 512x512, с некоторым странным поведением вблизи краев. Чтобы избежать этих проблем, я обрезал преобразования, чтобы можно было легко разместить одно рядом с другим, чтобы получить изображение 512x512. В общем, отбрасывать информацию - не лучшая идея, но здесь я просто хотел создать простой и понятный пример. Чтобы показать производные, я взял абсолютные значения (я хочу показать величину производной), затем я улучшил контраст, чтобы они выглядели более четкими. |