Уменьшение интенсивности разрешения изображения уровня серого - PullRequest
0 голосов
/ 07 февраля 2019

Я хотел бы взять изображение с разрешением уровня серого 2 ^ 8, а затем выполнить итерацию, чтобы уменьшить разрешение интенсивности каждого изображения до 2 ^ k, для k = 7, 6,…, 2, 1. Я хотел бынравится отображать исходное изображение вместе с изображениями с уменьшенным разрешением интенсивности на одном рисунке.

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

img = imread('https://i.stack.imgur.com/kP0u2.png');

k = 8
while (k > 0)
 reducedImage = uint8((single(img)/256)*2^k);
 subplot(3, 3, k);
 imshow(reducedImage, [0 255]);
 title('Grey-level resolution 2^ %s',k);
 k = k - 1;
end

Программа должна отобразить исходное изображение в верхнем левом углу, затем 2 ^ k для k = 7, 6,…, 2, 1 с правильным заголовком.Как мне этого добиться?

1 Ответ

0 голосов
/ 07 февраля 2019

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

img = imread('https://people.sc.fsu.edu/~jburkardt/data/png/lena.png'); 

Тогда первым делом необходимо убедиться, что изображение использует полный динамический диапазон uint8:

min_img = min(img(:));
max_img = max(img(:));
img_norm = (img - min_img) * (256 / double(max_img - min_img));

Чтобы быть в безопасности, давайте взглянем на изображения и их гистограммы:

figure
subplot(2,2,1)
imshow(img)
subplot(2,2,2)
hist(img(:))
subplot(2,2,3)
imshow(img_norm)
subplot(2,2,4)
hist(img_norm(:))

Поскольку изображение уже достаточно хорошо заполняет диапазон, мало что изменилось вгистограмма.Но попробуйте это с исходным источником изображения, который вы разместили, и вы поймете, что я имел в виду:

OP's Lena Version

По сравнению с альтернативной версией Lena, которую я предоставил

enter image description here

Теперь, когда мы убедились, что у нас есть разумная версия изображения для начала, давайте решим проблему шага квантования: основная идея состоит в том, чтобы

  1. преобразовать изображение в плавающее и нормализовать его к интервалу [0,1]
  2. , умножить его на количество желаемых шагов квантования (например, 128 для второго шага)
  3. округлить (пол) значения и преобразовать обратно в uint8

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

k = 8
figure
while (k > 0)
 target_levels = 2^k;
 target_compr_factor = 256 / target_levels;
 reduced_image = uint8(floor(double(img)/256 * target_levels) * target_compr_factor);
 subplot(3, 3, k);
 imshow(reduced_image, [0 255]);
 title(['Grey-level resolution 2^',num2str(k)]);
 k = k - 1;
end

lena_quantization

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...