Как я могу пересчитать динамический диапазон изображения в MATLAB? - PullRequest
1 голос
/ 13 мая 2011

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

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

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

1 Ответ

3 голосов
/ 13 мая 2011

Одним из способов является использование логического индексирования .Учитывая матрицу изображения 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.

...