2015-12-28 5 views
1

Я получаю значение RGB для всех пикселей впреобразование Фурье и сжатие изображения

R=[], G=[], B=[]

массивов от картины. Они представляют собой 8 бит [0-255] значений, содержащих массивы. И мне нужно использовать преобразование Фурье для сжатия изображения с помощью метода lossy.

Blockquote преобразование Фурье

N будет число пикселов. n является i для массива. Какими будут k и мнимые j?

Могу ли я реализовать это уравнение в языке программирования и получить файл сжатого изображения?

Или мне нужно использовать уравнение преобразования для другого значения вместо RGB?

+0

На каком языке вы? Если вы действительно хотите реализовать это уравнение самостоятельно, вы, вероятно, должны использовать стандартный комплексный тип номера. Значение «k», по-видимому, рассчитано для коэффициента Фурье. –

+0

Я работаю с C#. Но я мог бы также использовать Java. –

+0

Я рекомендовал несколько более подходящих тегов для вашего вопроса. Можете ли вы использовать предварительно построенный БПФ, а не строить его самостоятельно? Вы также можете выполнять БПФ на каждом канале индивидуально. FWIW, это обычное преобразование в цветовое пространство YUV и уменьшение уровня UV-каналов. –

ответ

5

Прежде всего, да, вы должны преобразовать из RGB в пространство яркости, такое как YCbCr. Человеческий глаз имеет более высокое разрешение в яркости (Y), чем в цветовых каналах, поэтому вы можете уничтожить цвета намного больше, чем яркость для того же уровня потерь. Общепринято начинать с уменьшения разрешения каналов Cb и Cr в два раза в обоих направлениях, уменьшая размер цветных каналов в четыре раза. (См. Подпрограммирование Chroma.)

Во-вторых, вы должны использовать дискретное косинусное преобразование (DCT), которое фактически является реальной частью дискретного преобразования Фурье образцов, сдвинутых на половину шага. Что сделано в JPEG, это разбиение изображения на 8x8 блоков для каждого канала и выполнение DCT для каждого столбца и строки каждого блока. Затем компонент постоянного тока находится в верхнем левом углу, а компоненты переменного тока увеличиваются по мере того, как вы опускаетесь и влево. Вы можете использовать любой размер блока, который вам нравится, хотя общее время вычисления DCT будет увеличиваться с размером, а артефакты с этапа с потерями будут иметь более широкий охват.

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

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

  • Нет связанных вопросов^_^