2013-07-30 7 views
-4

Я преобразовал изображение в binary (0 & 1) изображение, основанное на некотором критерии. И, для некоторых пикселей, я назначил им значение -1 в качестве флага. Когда я запускаю свою программу, результат будет таким, как ожидалось. Но, когда я получил результат (изображение), я получаю значения как (0 & 255), а пикселей, которые имели значение -1, больше не существует. Это связано с imwrite? Как я могу сохранить свои значения, как при записи изображения?Почему, когда я «пишу» изображение, меняются значения?

Спасибо.

ответ

1

при imwrite каждый пиксель преобразуется в 8 бит (в зависимости от формата файла, но это обычно так). Эти 8-биты имеют unsigned int8, поэтому любые отрицательные значения усекаются до 0.

Чтобы преодолеть эту проблему, вы можете использовать только значения в диапазоне [0..255] для пикселей, выбирающих конкретный значение из этого диапазона быть вашим «флагом».

+0

@hai. Спасибо за ваш ответ. Я сделал это и присвоил, например, значение '33'. Когда я «imwrite», такое значение также не отображалось. Итак, я вернулся только с значениями «0» и «255». Почему это? – Simplicity

+0

@ Med-SWEng звучит странно. Можете ли вы добавить ** короткий фрагмент кода к вашему вопросу? – Shai

+0

нет «отрицательных значений» в логическом массиве – Serg

1

Вы не можете поместить -1 в логический массив. Предположим, мы создаем логический массив

x = true(2,2); 

уступка

x(1) = -1; 

равно

x(1) = (-1 ~= 0); 

поэтому любое ненулевое значение преобразуется в true;

Что касается решения, перед установкой flags преобразовать логический массив в uint8.

img = uint8(255 * img_logical); 
img(3,10) = 254; % secret flag 
imwrite(img, 'img.jpg'); 
+0

, так почему «когда я запускаю свою программу, результат такой, как ожидалось»? Если проблема такая, как вы описали, она должна была быть очевидна во время работы программы ... – Shai

+0

'imwrite()' преобразует логический '{false, true}' в uint8 '{0, 255}'. Если вы установите '-1' или' 5' в логический массив, он будет преобразован в 'true', а затем в' 255' = белый – Serg

+0

@Serg. Спасибо за ваш ответ. Что означает 'img (3,10)'? Почему «(3,10)»? – Simplicity

1

Вы не упоминаем какие параметры вы используете с imwrite или формат файла вы используете, но я подозреваю, что это один-битный формат. Это означает, что единственные значения, которые могут иметь каждый пиксель, равны 0 или 1. Когда вы читаете изображение назад, 1 преобразуется в 255, но у вас все еще есть две возможности. Пока изображение находится в памяти, вы можете установить нужные значения, но все они будут преобразованы снова, когда файл будет записан.

Смежные вопросы