How to find the angle of object by using other function instead of using minFeretProperties because it is not supported for code generation.

I need to deploy my algorithm to NVIDIA Jetson and I have created my coding and ready for code generation using MATLAB Coder. Unfortunately, the process for code generation is unsuccessful as the minFeretProperties is not supported for code generation. Can anyone help me to detect the angle of object using other way or function?. I am running out of time. Thank you

Réponses (4)

Matt J
Matt J le 4 Jan 2023
Modifié(e) : Matt J le 4 Jan 2023
What about regionprops(____"Orientation')?

9 commentaires

If possible, can you show me the example coding using picture below?
And produce output like image below (with angle on it) *ignore the green line
You already seem to have code that does that.
Yes sir but that is the output when i use minFeretProperties. Can you help me with using the regionprops(____"Orientation')? Can you provide me a simple coding that use the input image above. I really need help. Thank you sir.
My idea was that you simply modify the line of code you've highlighted in your post to use regionprops(____"Orientation') instead.
Thank you sir. I have done that but it doesn't work. Is there anyone have any idea on it?
Not without seeing what you did and the actual result.
I have tried this simple code, it produce error. If I modify the highlighted line in the above image, i need to also modify the code below that line, so i just try with this simple code. I also tried to use coder.extrinsic but the minferetproperties function affected my output so i cannot use that.
I2 needs to be a 2D matrix.
I2=any( imbinarize(I1),3);
Thank you sir, it works but the angles are sometimes not correct but i will try. Sir, how can I display the output image with the angle on it?

Connectez-vous pour commenter.

Here is possibly another way to compute the MinFeretAngle, based on radon. According to the documentation, the Coder does support it.
load('BWImage');
BW=imrotate(BW0,-30,'crop');
immontage({BW0,BW},'Border',5,'Back','w');
minferetAngle(BW)
ans = -30
function out=minferetAngle(BW)
t=linspace(0,180,1000); t(end)=[];
[~,i]=min(max(radon(BW,t)));
out=t(i)-90;
end

2 commentaires

Thank you sir but the minferetAngle is not supported for code generation
That seems unlikely. The only function it uses is radon(), linspace(), min(), and max(), as you can see. All of those are supported for Code Generation according to the documentation. Have you tried to compile it? If so, which command is it complaining about? You should always display results of things of you've tried so the discussion can progress more briskly.

Connectez-vous pour commenter.

See attached demo.

2 commentaires

This will not give the min feret angle because it looks at the global max over the radon transform. I think you need the min(max()) which ist what my version proposes.
@Matt J yes, true it won't solve the problem and the feret diameter is the way to go. This (radon) suffers from the same problem as regionprops in that it tends to get the axis angled along a diagonal for a rectangle rather than along the axis parallel to the long edge. I just thought this might be a related topic that he might want to know about.

Connectez-vous pour commenter.

Produits

Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by