我在图像中检测到一个显著的区域,对该区域进行了一系列操作,其中最重要的是仿射归一化(将椭圆形转换为圆形,将梯形转换为等边矩形)。
仿射归一化是剪切和缩放的组合,其矩阵如下:
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
我对编程的想法涉及到
X
和 Y
:通过 L
和 W
来表示主轴和次轴的大小(通常在形状变化范围内大约为5到50)。X=(1+L/(L+W));
Y=(1+W/(L+W));
仅在从Chol
剪切不太大的情况下才有效。根据形状,S
在5到30之间表现良好。
S
、X
和Y
的值是多少?您能否在示例中发布使用的Chol
矩阵的值? - Shai