How to resolve the error of looping
조회 수: 3 (최근 30일)
이전 댓글 표시
Dear All,
I wrote some script looping to determine the thresh value for certain volume (26.67). But I got error like below. The set imageas data set as attached.
Can help me?
%% I131 10:1 graycutoff 100000 latest GUNA FWHM
clc
clear all
close all
[spect map]=dicomread('I-131sphere10nisbah1.dcm');
info = dicominfo('I-131sphere10nisbah1.dcm');
%gp=info.SliceThickness;
spect=(squeeze(spect));%smooth3
aa=size(spect);aa=aa(3);
imshow3D(spect)
figure, imtool3D(spect)
seedR1 = 58; seedC1 = 76; seedP1 = 45;
W = graydiffweight(spect, seedC1, seedR1, seedP1, 'GrayDifferenceCutoff', 1000000000);
for thresh =0.0001:0.0001:0.9999;
[BW, D] = imsegfmm (W, seedC1, seedR1, seedP1, thresh);
T = regionprops ('table', BW,'Area','Centroid');
if T(1)==26.67; %want to know thresh value for volume 26.67
gray_weight = thresh;
volume = T(1)
break
end
end
Error using ()
Subscripting into a table using one subscript (as in t(i)) is not supported. Specify a row
subscript and a variable subscript, as in t(rows,vars). To select variables, use t(:,i) or for
one variable t.(i). To select rows, use t(i,:).
댓글 수: 0
답변 (1개)
Image Analyst
2023년 11월 18일
T is a table with the first column being the blob area and the second column being (x,y) of the centroid. Row 1 is for blob %1, row 2 is for blob #2, and so on. T(1) doesn't make sense because T, when using numerical indexes, is a 2-D array, not a 1-D array. So if you wanted the area of blob #2, you'd reference it with 2 indexes as T{2, 1} (with braces) or as T.Area(2) (equivalent but using the variable name of the column). I don't know how many blobs you will have in your binary image.
And you should not use regionprops for volumes, you should use the 3-D version regionprops3 to get volume of blobs.
Also you should not use fractional numbers for the area or volume since regionprops returns them as integer values (the discrete number of pixels or voxels), not as floating point areas or volumes. Even if it were, you should not compare floating point numbers with ==, you should use ismembertol. See the FAQ: https://matlab.fandom.com/wiki/FAQ#Why_is_0.3_-_0.2_-_0.1_(or_similar)_not_equal_to_zero?
댓글 수: 6
Peter Perkins
2023년 11월 20일
You might find T.Area(1), or even T{1,"Area"}, easier to read than T{1,1}.
참고 항목
카테고리
Help Center 및 File Exchange에서 3-D Volumetric Image Processing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!