【发布时间】:2014-09-28 02:07:09
【问题描述】:
我在图像中检测到一个显着区域,我对其执行了一系列操作,其中最重要的是仿射归一化(将椭圆转换为圆形,将梯形转换为等边矩形)。
仿射归一化是矩阵中剪切和缩放的组合,如下所示:
Chol=[a,b
0,c]
a,c 在 [0,1] 中,b 在 [-1,1] 中(对于那些感兴趣的人,它是检测区域协方差矩阵的 Cholesky 分解的逆)。
直到这里一切正常,但是当我将转换应用于原始框架时
AffineFrame=cv.warpAffine(RealFrame,[Chol,[0;0]],...
'DSize',[RealFrameSize(1),RealFrameSize(2)]);
% that's dst=cv.warpAffine(src,trafo) with trafo: 2x3 Matrix (here Chol and [0,0] translation)
我得到了一个未缩放的图像,无论是变换还是图像大小:。
我真正想要的 - 并且仅通过这一行的反复试验来实现这一特定框架
AffineFrame=cv.warpAffine(RealFrame,[Chol,[0;0]]*S,...
'DSize',[RealFrameSize(1)*X,RealFrameSize(2)*Y]);
看起来像这样:
.
我知道问题在于S、X 和Y 的缩放。如果有人知道如何计算这个,你会为我节省回到学校几何的漫长旅程! (我已经拥有了可以从第二个图像矩中提取的所有几何信息,例如长轴和短轴,具有各自的大小、偏心率等。)
编辑:一些典型值(不一定是这种情况):
Chol = 0.43 -0.23
0 0.67
我对@987654330@ 和Y 的想法:使用L 和W 的主要和次要轴的大小(根据形状变化很大,通常在5 和50 左右):
X=(1+L/(L+W));
Y=(1+W/(L+W));
仅当来自Chol 的剪切不是很大时才有效。 S 在 5 到 30 之间做得很好,具体取决于形状。
【问题讨论】:
-
SX和Y的值是多少?您还可以发布您的示例中使用的Chol矩阵的值吗? -
刚刚做了,不是我的例子,但应该非常相似。
标签: matlab opencv math image-processing affinetransform