2015-07-07 3 views
0

Я загрузил стек tiff в MATLAB и пытаюсь подсчитать количество вокселей в пределах определенного порога. Максимальные значения изображения от 0 до 255, а мой порог - от 75 до 255. Изображение было разделено цветом, так что оно теперь просто красное и черное. Мой код выглядит следующим образом:Подсчет количества вокселей выше порогового значения из стека tiff

FileTif='ImageStack.tif'; 
InfoImage=imfinfo(FileTif); 
mImage=InfoImage(1).Width; 
nImage=InfoImage(1).Height; 
NumberImages=length(InfoImage); 
FinalImage=zeros(nImage,mImage,NumberImages,'uint16'); 
for i=1:NumberImages 
    FinalImage(:,:,i)=imread(FileTif,'Index',i,'Info',InfoImage); 
end 
idx = find(FinalImage >= 75 & FinalImage <= 255); 
length(idx) 

Мой вопрос в том, отражает ли это то, что я сказал, что я пытаюсь сделать. Вернее, при загрузке tiff-стека таким образом, являются ли элементы моей 3D-матрицы FinalImage значениями цвета от 0 до 255? Я уверен, что я прав, как

max(FinalImage(:)) 
min(FinalImage(:)) 

возвращает 255 и 0 соответственно, хотя путаница возникает, когда я использую воксельную счетчик плагину на ImageJ и получить другое значение. Я не уверен, что расхождение связано с методом подсчета вокселей в плагине или способом, которым ImageJ порождает стек изображений. Любой свет, пролитый на несоответствие, будет очень признателен!

+0

Почему вы инициализируете 'FinalImage' как uint16, если интенсивность пикселей составляет от 0 до 255 (т. Е. Uint8)? И какие значения вы получаете с помощью imageJ? –

+0

Я не слишком разбираюсь в различиях между uint8 и uint16 и не уверен, когда кто-то предпочитает другого. Я нашел образец кода для загрузки tiff-стека в MATLAB и использовал uint16. Значение, полученное мной из моего кода в Matlab, равно 1469144 (проверено как с uint16, так и с uint8 и получено одинаковое число), а ImageJ дал мне значение 1136671 –

+1

Ok. Что такое плагин, который вы использовали в ImageJ? Разница между uint8 и uint16 связана со значениями, которые могут иметь пиксели. С uint8 это от 0 до 2^8 (т. Е. 255), тогда как с uint16 его 2^16 (т. Е. 65535), поэтому диапазон намного больше. Я думаю, что ImageJ преобразует все в uint8 для обработки (проверьте [здесь] (http://rsbweb.nih.gov/ij/docs/guide/146-28.html)) –

ответ

0

Я решил свою проблему, и я отправляю ответ здесь, если кому-то еще это нужно. Я нажал «применить» после установки порога, который изменил бы его на двоичный, и таким образом приведет к ошибочному результату. Если я установил порог, а затем использовал плагин voxel counter, я бы получил тот же результат, что и мой код в MATLAB.

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