What does this error- ''Out of range subscript'' mean during using sub2ind?

Hi! I am working with border irregularity. In my code I had to find out the diagonals of a box. In single code it works but when I used it along other code it shows this error message. I couldn't find the problem.My code is given below:
%read binary mask
mask = imread('image.bmp');
mask=mask(41:616,128:894,1)>128;
%fill all holes:
%flip mask and select everything that is not the outer area
mask= bwlabel(~mask,4) ~= 1;
%find the edge pixels with something like imerode
SE=true(3*ones(1,ndims(mask)));%structuring element
edge= mask & ~( mask & convn(mask,SE,'same')==sum(SE(:)) );
%find the bounding box with 1 px margin
colind_first=find(sum(mask,1),1,'first')-1;
colind_last =find(sum(mask,1),1,'last')+1;
rowind_first=find(sum(mask,2),1,'first')-1;
rowind_last =find(sum(mask,2),1,'last')+1;
box=false(size(mask));
box([rowind_first rowind_last], colind_first:colind_last )=true;
box( rowind_first:rowind_last ,[colind_first colind_last])=true;
%add the diagonal lines to the box
x=false(size(mask));
p=polyfit([rowind_first rowind_last],[colind_first colind_last],1);
row=rowind_first:rowind_last;
col=round(polyval(p,row));
x(sub2ind(size(x),row,col))=true;
%add other diagonal to x
p=polyfit([rowind_first rowind_last],[colind_last colind_first],1);
col=round(polyval(p,row));
x(sub2ind(size(x),row,col))=true;
In my main code I had to delete this line so I can't understand if it causes the problem:
mask=mask(41:616,128:894,1)>128;
where ''mask'' is the segmented image.The image is:

11 件のコメント

madhan ravi
madhan ravi 2020 年 6 月 16 日
Without mask how can we run the code? Upload it as .mat file.
KSSV
KSSV 2020 年 6 月 16 日
check size(z) and (roww,coll) it looks like your row and col indices are higher than the size of z.
joynob ahmed
joynob ahmed 2020 年 6 月 16 日
madhan ravi
I have edited my question. Please check it out.
KSSV
KSSV 2020 年 6 月 16 日
What you wanted to do with this line?
mask=mask(41:616,128:894,1)>128;
joynob ahmed
joynob ahmed 2020 年 6 月 16 日
編集済み: joynob ahmed 2020 年 6 月 17 日
KSSV
I have understood that this line is not a problem.
Here both roww and coll have values through column 1 to 450 but coll has the last value 768 where as the size of z is 576 by 767. Is that a problem?
Mohammad Sami
Mohammad Sami 2020 年 6 月 16 日
Can you investigate the output col value here, it maybe outside the range of your data, causing this error.
col=round(polyval(p,row));
Rik
Rik 2020 年 6 月 16 日
You still haven't removed the white border around your image. Because you insisted it wasn't there, I simply used this line of code to remove it to get to the point you claimed to be.
You need to have a binary image without a white border after that line of code. How you achieve that is up to you.
(@other readers: for context, see this thread)
joynob ahmed
joynob ahmed 2020 年 6 月 17 日
編集済み: joynob ahmed 2020 年 6 月 17 日
Rik
I am really sorry. I actually didn't notice that before and I got this after segmentation but in my real code this white border doesn't even exist. This is all my fault. I am sorry again.
joynob ahmed
joynob ahmed 2020 年 6 月 18 日
Mohammad Sami
Yes. The maximum value of col is greater than size(x). I have used ''floor'' instead of ''round'' command. But it remains same. How can I eliminate that?
KSSV
KSSV 2020 年 6 月 18 日
What exactly is your problem? You want diagonals of the bounding box of the irregular domain i.e white region in the image?
joynob ahmed
joynob ahmed 2020 年 6 月 18 日
I have solved this. Thank you all for the help.

サインインしてコメントする。

回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeOperating on Diagonal Matrices についてさらに検索

質問済み:

2020 年 6 月 16 日

コメント済み:

2020 年 6 月 18 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by