Medical Image Processing: X and Y coordinates switched around after using find and ind2sub?

4 ビュー (過去 30 日間)
I am trying to extract the non-zero points from a mask made from a medical image. These points will be used for an orthogonal projection onto a plane.
I will describe my problem below.
The mask consists of a matrix of zeros (undesired pixels) and ones (desired pixels). The mask can be visualised with for example sliceViewer or orthosliceViewer. I show you orthosliceViewer in Figure 1. The attached .mat file contains one of these masks.
You can observe that the middle of the mask is more or less
X = 239
Y = 207
Z = 85
In the next step I want to extract the coordinates of all the non-zero points (white on Figure 1). I use the following code:
index = find(mask);
[ori_x, ori_y, ori_z] = ind2sub([size(mask,1),size(mask,2),size(mask,3)], index);
This code makes sense to me. Next, I check the range of values in ori_x, ori_y, ori_z with the unique function.
This function show me that :
  • X values vary between 199 and 215
  • Y values vary between 233 and 248
  • Z values vary between 77 and 93
When we compare these values to the "middle point of the mask" above. It seems that the Z value is fine, but the X and Y value seems to be switched.
I confirmed this suspision by extracting the centroid and bounding box of the mask using bwlabeln and regionprops3.
I know the quick fix would be to switch the X and Y value back, but I want to know what fundamental mistake I'm making. Can somebody help me?
Thanks in advance for your advice!
Sam
  2 件のコメント
Sam Donche
Sam Donche 2020 年 7 月 30 日
Thank you for your answer.
This helps me out a lot.
Maybe you should post it as an answer?

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

採用された回答

Roger J
Roger J 2020 年 7 月 30 日
Sam,
This is a common misunderstanding.
Please see if this link answers your question:
If this is helpful, please mark as the answer.

その他の回答 (1 件)

Image Analyst
Image Analyst 2020 年 7 月 31 日
ind2sub gives [row, column, slice], which is [y, x, z].
It does not give [ori_x, ori_y, ori_z] = ind2sub(...) like you had. Try
[ori_y, ori_x, ori_z] = ind2sub(....

カテゴリ

Help Center および File ExchangeDetection についてさらに検索

製品


リリース

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by