フィルターのクリア

How to find greatest and smallest diameter of an irregular shape

21 ビュー (過去 30 日間)
anastasia
anastasia 2017 年 3 月 17 日
コメント済み: Surbhi Dhingra 2019 年 6 月 14 日
I have an irregular shape in which I need to find the Greatest diameter and the smallest diameter.
Greatest diameter(GD): is The length of the line which connects the two farthest boundary points and passes across the lesion centroid (C), which is given by:
where n is the number of pixels inside the lesion, and (xi, yi) is the coordinates of the i-th lesion pixel.
Shortest Diameter (SD): The length of the line which connects the two nearest boundary points and passes across the lesion centroid.
I used regionprops to find out the centroid and equidiameter. How do I find the greatest and smallest diameter? Please help with the code.
Thank You.
  4 件のコメント
Matt J
Matt J 2017 年 3 月 17 日
編集済み: Matt J 2017 年 3 月 17 日
From the regionprops documentation, equivdiameter gives the diameter of a circle with the same area as the region . I don't see any direct relationship between that and what you define as SD and GD.
You have defined a shape property that regionprops does not seem to handle. You must complete the definitions to that we all know how to compute it. Rounding the centroid won't ensure colinearity with any of the other pairs of points.
anastasia
anastasia 2017 年 3 月 17 日
Okay I tried another method. I traced all the boundary points of my shape using bwboundaries
This gives me an array of all the boundary points. Now, can I use euclidean distance to determind the smallest and largest distance for the points? I can run a for loop and determine the distance between the points maybe? Is this correct? I am confused as to how to run a for loop for determining the distance for the boundary points.
If that's the right approach, how to code it? Please guide.

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

採用された回答

Image Analyst
Image Analyst 2017 年 3 月 17 日
The problem is, because youre image is digitized, there will be cases where no pixel lies on a line with the other two pixels, so you have to find the closest.
Find the centroid with regionprops. The equivDiameter doesn't matter.
Then find the boundaries with bwboundaries().
For each point on the boundary...
Those two points define a line.
For all other points, use the point-to-line formula to find the point on the other side that has the minimum point-to-line distance.
Compute the distance from that third point to the first point, keeping track of if it's the max or min length encountered so far.
It's not hard but will take a bit of programming, maybe a half hour or so. Give it a try.
  6 件のコメント
anastasia
anastasia 2017 年 3 月 19 日
編集済み: anastasia 2017 年 3 月 19 日
Oh! Now I understand. My radius part is right. But when I double the radius, the diameter may either exceed/fall short of the lesion area. Since my lesion is not a perfect circle, twice the radius is not equal to the diameter of the lesion like you have shown in your example.
But I still have a doubt in the algorithm you have suggested. I run a for loop for all the boundary points that form a line passing through the centroid. After this, you want me to find the minimum point to line distance. I do not understand this. Could you maybe phrase it in a simpler way so that I can code it up. Also what is the "third point"? and if possible, could you guide me with the code too (not the whole code, just enough to help me do it on my own)
Thank You so much for your clear explanation. I have attached my image I am working on for your reference. It is a skin lesion image.
Image Analyst
Image Analyst 2017 年 3 月 19 日
I'm working on something but I'm not done yet. It's taking a lot of time. Attached is a partially working version. I'll work more on it tomorrow and delete this one if I can get an update.
Actually I hesitate to upload it because you'll say it doesn't work. I know it doesn't work yet, but if you want to try to finish it yourself, go ahead.

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

その他の回答 (2 件)

Diwakar  Gautam
Diwakar Gautam 2017 年 3 月 19 日
編集済み: Image Analyst 2017 年 3 月 19 日
Hello dear,
I had also come to your issue. The solution that I came up with is to detect all the boundary elements, and also identify the centroid of the shape. Now choose every possible pair of boundary elements and check it for its collinearity with the centroid (I opted for PCA here). That may help to filter out the largest and smallest diameter. But the issue is its computational load . . . so can anyone suggest me a faster approach to perform it?

Abshaya N
Abshaya N 2017 年 3 月 25 日
編集済み: Abshaya N 2017 年 3 月 25 日
Can anyone give me the java code to find the largest and smallest diameter for the labeled objects in an image please....... I use bounding box but its not work well for the irregular shapes.
  3 件のコメント
Reza Pahlevi Bahruddin
Reza Pahlevi Bahruddin 2018 年 6 月 11 日
Sorry, may I know the reference or journal from the above program code. Thank you, sorry for my bad english
Surbhi Dhingra
Surbhi Dhingra 2019 年 6 月 14 日
Hi, were you able to solve it, i have to write this in C#, request you direct me to the algorithm. Thanks!

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

Community Treasure Hunt

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

Start Hunting!

Translated by