在 MATLAB 中识别相似三角形的方向

发布于 2024-12-13 09:39:09 字数 852 浏览 2 评论 0原文

我有一个相似三角形的黑白位图。我试图确定每个三角形所面向的方向。我所说的“面向”是指以所有三角形中恒定的方式描述方向,例如最长边中线的方向。

到目前为止,我可以单独识别三角形,但我不知道找出每个三角形方向的最佳方法是什么。

作为第一个想法,我考虑使用霍夫变换拟合每个三角形边的线。一旦我有了 3 个边,我就可以计算它们的交点,然后我就得到了 3 个顶点的坐标。从这 3 个顶点很容易找出最长边的中线。

我对这种方法的问题是,我从未使用过霍夫变换,而且我不知道编写一个找到边并以可用于计算交集的方式返回它们的函数有多难。您能否将我链接到一些文章或简要解释一下如何使用霍夫变换在表示中查找边,我可以使用什么来计算交集?

我的另一个想法是直接使用旋转不变矩,位图图像上,而不通过霍夫变换识别它们的侧面。

我对这个解决方案的问题是,当我使用时刻描述方向时,我不知道方向的“含义”是什么。 如果我使用不变矩,如何定义参考方向?

带有已识别对象的示例图像: sample

单个对象 sample1

I have a BW bitmap of similar triangles. I am trying to identify the direction each triangle is facing. By "facing" I mean describing the direction in a way what is constant across all triangles, by for example the direction of the longest side's median.

So far I could identify the triangles individually, but I don't know what would be the best way to find out the direction of each triangle.

As a first idea I thought about using Hough transform to fit lines for the sides of each individual triangle. Once I have the 3 sides, I can calculate their intersections and then I have the coordinates of the 3 vertices. From the 3 vertices it’s easy to find out the longest side's median.

My problem with this approach is that I never used Hough transforms and I don't know how hard it is to write a function which finds the sides and returns them in a way what I can use for calculating intersections. Can you link me to some article or explain briefly how to use Hough transform to find sides in a representation what I can use for calculating intersections?

My other idea is to use rotation invariant moments, directly on the bitmap images, without recognising their sides by Hough transform.

My problem with this solution is that I don't know what is the "meaning" of a direction when I describe it using moments. If I use invariant moments, how can I define a reference direction?

A sample image with the identified objects:
sample

A single object
sample1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

熊抱啵儿 2024-12-20 09:39:09

使用 houghlines 查找每个三角形中最长的,即 BW 输入应仅包含一个三角形的(例如使用 BW = edge(I,'canny') )。这将为您提供三角形最长边的方程。

如果你的三角形是等腰三角形,那么穿过其中点的最长边的法线就是中线,你就完成了。

如果没有,我猜你必须找到 3 个边,等等。

更新:

查看你的斑点,我建议尝试使用 R = Regionprops(BW,'Orientation');

Use houghlines to find the longest in each triangle i.e. the BW input should only contain the edges of one triangle (e.g. use BW = edge(I,'canny')). This will give you the equation of the longest side to your triangle.

If your triangles are isoceles, then the normal to the longest side passing through its midpoint is the median, and you're done.

If not, I guess you'll have to find the 3 edges, etc.

Update:

Looking at your blobs, I'd recommend experimenting with R = regionprops(BW,'Orientation');

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文