Как я могу повторно квантовать динамический диапазон изображения в MATLAB?

StackOverflow https://stackoverflow.com/questions/5984178

Вопрос

Мне нужно равномерно переквантовать динамический диапазон изображения на основе следующих преобразований значений пикселей:

Pixel Value: Quantized Value
0 - 64     : 31
65 - 128   : 95
129 - 192  : 159
193 - 255  : 223

Я хочу заменить все значения пикселей в приведенных выше диапазонах квантованными значениями.Как я могу закодировать это в MATLAB?

Это было полезно?

Решение

Один из способов - использовать логическая индексация.Дана матрица изображений img (что могло бы быть 2-D оттенки серого или 3-D RGB), это заменит все ваши значения:

img(img >= 0 & img <= 64) = 31;
img(img >= 65 & img <= 128) = 95;
img(img >= 129 & img <= 192) = 159;
img(img >= 193 & img <= 255) = 223;

Другой вариант - создать таблицу поиска из 256 элементов и использовать значения в вашем изображении в качестве индексов в этой таблице:

lookupTable = [31.*ones(1,65) 95.*ones(1,64) 159.*ones(1,64) 223.*ones(1,63)];
img = uint8(lookupTable(double(img)+1));

Обратите внимание, что при использовании этого решения вам придется учитывать класс вашей матрицы изображений.Многие изображения классные uint8, охватывающий значения от 0 до 255.Чтобы использовать эти значения в качестве индекса, вы должны преобразовать их в класс, который может хранить большие целые числа (например double) чтобы избежать насыщения при максимальном значении 255, затем добавьте единицу, так как вам нужен индекс от 1 до 256.Затем вы хотели бы преобразовать полученную матрицу изображений обратно в класс uint8.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top