Я новичок в Matlab и пытаюсь взять tif, найти и применить несколько пороговых значений. Я сохранил tif, используя I=imread('full_file_directory')
, и использовал multithresh, чтобы найти пороговые значения. Однако, когда я пытаюсь использовать imquantize(image,threshold)
, он продолжает возвращать полностью белое изображение (все). Есть что-то, что мне не хватает?
функция imquantsize в матлабе
Ответы (2)
Я подозреваю, что проблема заключается не в использовании самого imquantize
, а в том, как вы потом показываете результаты (чтобы перепроверить, проверьте максимальное и минимальное значения new
).
По умолчанию, если вы вызываете new=imquantize(Image,thresh);
, а thresh
содержит 3 значения, матрица new
будет содержать значения от 1 до 4, как описано в документация. Кроме того, вывод imquantize
, когда заданы пороги, но нет значений, имеет тип double.
Поэтому, если вы попытаетесь показать это изображение new
с помощью imshow
, оно отобразит полностью белое изображение, так как по умолчанию предполагается, что изображения типа double будут иметь диапазон [0 1].
Решение. Используйте ввод values
в imquantize
для определения выходных значений. Это должно иметь дополнительное преимущество, заключающееся в сохранении того же типа вывода, что и ввод.
Для количества порогов N вам нужно значение N + 1, поэтому, например, попробуйте:
Image=imread('P:\1\Image_2788.tif');
thresh=multithresh(Image,3);
new=imquantize(Image,thresh, [0 thresh]);
Это устанавливает любые пиксели в выходном изображении, которые ≤ вашего первого порогового значения, равными 0 (черный), значения между первым и вторым пороговыми значениями равны thresh(1)
и так далее.
Вы показываете его с предела мин-макс? Возможно, вы не правильно показываете. Используйте imshow(new,[]);
, чтобы увидеть свое изображение. Вы можете понять, почему мы это делаем, здесь: /а>
multithresh
и вызовimquantize
)? Не понятно в чем дело. - person nkjt   schedule 21.01.2014