我在图像中检测到一个显着区域,我执行了一系列操作,最重要的是仿射归一化(将椭圆转换为圆形,将梯形转换为等边矩形).
仿射归一化是矩阵中剪切和缩放的组合,如下所示:
Chol=[a,b
0,c]
a,[0,1]中的c和[-1,1]中的b(对于那些感兴趣的人,它是检测到的区域的协方差矩阵的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之间做得很好.