Удалить высокочастотные коэффициенты из изображения JPG - PullRequest
1 голос
/ 29 декабря 2011

Основываясь на ответе этого *1001* вопроса, мне нужно удалить высокочастотные коэффициенты DCT из моего изображения во время декомпрессии, чтобы получить уменьшенное изображение.

Я искал способсделать это, и кажется, что это не так просто.У меня есть следующие два цикла, которые выполняют IDCT в моем коде, и выполнение циклов над подмножеством блоков 8 × 8 дает только очень искаженные изображения.

 for (coef = 0;  coef < 64;  coef +=8)
        njRowIDCT(&nj.block[coef]); //Inverse Discrete Cosine Transform
    for (coef = 0;  coef < 8;  ++coef)
        njColIDCT(&nj.block[coef], &out[coef], c->stride);  // Inverse Discrete Cosine Transform

block - это массив из 64 int

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

1 Ответ

0 голосов
/ 29 декабря 2011

Я думаю, простое отбрасывание высокочастотных компонентов не сработает. Ваше наблюдение также доказывает это. Потому что, когда вы усредняете блок 2x2 или 4x4, вы не будете полностью отбрасывать определенный высокочастотный компонент. Вместо этого вы уменьшаете их уровень энергии по отношению к низким частотам. Таким образом, уменьшение до нуля не очень хорошая идея.

Я думаю, вы не обратили достаточно внимания на то, что на самом деле означает высокая частота. Пожалуйста, примените Sobel или Prewitt Edge к вашему изображению и оцифруйте его. Затем запросите каждый пиксель в этом двоичном изображении, независимо от того, является ли он частью ребра или отброшен. Если это часть края, примените средний фильтр к исходному изображению, «исключив» текущий пиксель. Теперь угадайте, как это выглядит?

...