функция imquantsize в матлабе

Я новичок в Matlab и пытаюсь взять tif, найти и применить несколько пороговых значений. Я сохранил tif, используя I=imread('full_file_directory'), и использовал multithresh, чтобы найти пороговые значения. Однако, когда я пытаюсь использовать imquantize(image,threshold), он продолжает возвращать полностью белое изображение (все). Есть что-то, что мне не хватает?


person user2906979    schedule 21.01.2014    source источник
comment
Сколько пороговых значений вы пытались найти и какие значения были возвращены?   -  person nkjt    schedule 21.01.2014
comment
Я пытался найти три порога и получил 60 122 192   -  person user2906979    schedule 21.01.2014
comment
Можете ли вы показать свой полный код (загрузка изображения, запуск multithresh и вызов imquantize)? Не понятно в чем дело.   -  person nkjt    schedule 21.01.2014
comment
››Image=imread('P:\1\Image_2788.tif'); ›› thresh=multthresh(Image,3); ›› new=imquantize(Image,thresh);   -  person user2906979    schedule 22.01.2014


Ответы (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) и так далее.

person nkjt    schedule 22.01.2014

Вы показываете его с предела мин-макс? Возможно, вы не правильно показываете. Используйте imshow(new,[]);, чтобы увидеть свое изображение. Вы можете понять, почему мы это делаем, здесь: /а>

person Shubham Tripathi    schedule 07.07.2015