Как я могу повторно квантовать динамический диапазон изображения в MATLAB?
-
12-11-2019 - |
Вопрос
Мне нужно равномерно переквантовать динамический диапазон изображения на основе следующих преобразований значений пикселей:
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
.