回答
好的,这里有一些代码让你开始。这绝不是完美的,但这很有趣,我希望它能帮助你。代码中最重要的部分实际上是由@Amro在这个伟大的答案中编写的:check me!。我加入了Amro的代码来绘制椭圆(谢谢Amro!)。
正如我在我的评论中提到的,您可以使用带有几个参数的regionprops来估计符合某种形状的椭圆。名称不言自明,可用于描述椭圆。下面是我看起来像一个马铃薯虚拟形状:
我们将在regionprops
使用的参数是:
'Centroid'
'MajorAxisLength'
'MinorAxisLength'
'Orientation'
和'PixelList'
像素列表用于绘制图像的原始形状。快速和肮脏的方式来看看适合多好。
所以这里是代码:
1)阅读的图像,将其转换为黑色和白色(即二进制),并应用regionprops:
clear all
clc
A = im2bw(imread('DummyEllipse.jpg'));
s = regionprops(A,'Centroid','MajorAxisLength','MinorAxisLength','Orientation','PixelList')
2)从S结构恢复参数。请注意,我从结构进入第二个元素,因为第一个1对应于绘图区的边缘(我不知道如何称呼它不好意思):
PixList = s(2).PixelList;
x = s(2).Centroid(1);
y = s(2).Centroid(2);
a = s(2).MajorAxisLength/2;
b = s(2).MinorAxisLength/2;
angle = s(2).Orientation;
steps = 50;
3)提供这些参数AMRO码来计算椭圆:
%# @param x X coordinate
%# @param y Y coordinate
%# @param a Semimajor axis
%# @param b Semiminor axis
%# @param angle Angle of the ellipse (in degrees)
beta = angle * (pi/180);
sinbeta = sin(beta);
cosbeta = cos(beta);
alpha = linspace(0, 360, steps)' .* (pi/180);
sinalpha = sin(alpha);
cosalpha = cos(alpha);
X = x + (a * cosalpha * cosbeta - b * sinalpha * sinbeta);
Y = y + (a * cosalpha * sinbeta + b * sinalpha * cosbeta);
4)画出的结果:
figure
plot(PixList(:,1),rot90(PixList(:,2),2),'-r') % flip the y coordinates because indexing in Matlab starts form the top of the image.
hold on
plot(X,Y,'k','LineWidth',2)
hold off
这使我:
所以它不是完美的,但希望它能帮助你开始。
非常感谢您的详细解答。我刚刚在这行中遇到了一个错误:'PixList = s(2).PixelList;',提及:'索引超出了矩阵的维度。这是为什么?谢谢 – productive 2014-10-03 16:22:20
哦,在这种情况下,你想使用s(1)。像我上面写的PixelList和s(1).Centroid(等)而不是s(2)。在我的情况下,regionprops输出2个“区域”,包括位置1中数字的实际边界,所以我用2作为索引。如果你得到这个错误,图形边界可能不被考虑,并且这个结构的大小是1而不是2,就像我的情况一样。我会检查一下,看看它是如何发生的,但这应该可以解决你的问题。 – 2014-10-03 17:52:00
所以@生产它可以帮助你吗? – 2014-10-06 00:02:21
- 1. 将不规则形状拟合成圆形
- 2. Python Tkinter。来自数据点的最佳拟合椭圆
- 3. CSS定义形状椭圆
- 4. 椭圆拟合对MATALB
- 5. 呈现不规则的按钮形状 - 最佳做法
- 6. 不规则形状
- 7. 使用不规则形状的CSS圆形菜单
- 8. 圆柱形表面上的点的最佳拟合轴
- 9. 在不规则形状多边形内获取纬度/深度
- 10. 椭圆几何自定义形状
- 11. android椭圆形状对话框
- 12. 安卓:椭圆形不妙
- 13. InkCanvas表面可以是圆形/椭圆形状吗?
- 14. 椭圆拟合瞳孔中心
- 15. Python将椭圆拟合到图像
- 16. 从分散点评估/拟合椭圆
- 17. OpenGL绘制椭圆而不是圆形
- 18. 不规则的矩形形状
- 19. jQuery获取椭圆文本
- 20. 计算最适合椭圆的线条
- 21. 寻找一种方式来模拟形状不规则的DIV
- 22. 椭圆形的线索
- 23. 算法以适应矩形最少到不规则形状
- 24. 沿着圆形的Qt动画椭圆
- 25. 最佳拟合方到四边形
- 26. 如何绘制一些形状(椭圆形或椭圆形)并计算其面积?
- 27. 造型不规则形状的按钮
- 28. CSS中的不规则形状
- 29. 形状不规则的UIBezierPath填充
- 30. PDF中的不规则形状区域
请问您可以添加这些省略的例子。 – kkuilla 2014-10-03 13:30:08
如果你想使用regionprops,那么这些参数可能是要走的路:Centroid,MajorAxisLength,MinorAxisLength,定位 – 2014-10-03 13:47:12