我正在尝试用给出的解来寻找二维给出的两点。
。
给出了连接两组点y和x的仿射变换的一种方法,其中变换由矩阵A和向量b表示(即矩阵方程y =Ax+b<code>E 212</code>)。
在二维中,有6个未知数,4个定义2x2 A矩阵,2个定义b。
然而,在示例脚本和描述它的文章中,它们有未知数t=n^2+n,其中n是点的数目,这意味着您需要6个点,对于2D情况,这实际上是12个已知值(即图像上每个点的x和y值)。
他们通过以下方式对此进行测试:
def solve(point_list):
"""
This function s
我被要求写一个函数,生成一个随机对称正定二维矩阵。以下是我的尝试:
import numpy as np
from numpy import linalg as la
def random_spd(n):
"""Generates random 2D SPD matrix (symmetric positive definite)"""
while True:
S = np.random.rand(n,n)
if la.matrix_rank(S)==n: #Make sure that S ha
由于我的坐标系不是标准的数学坐标系,我的平面有一个倒y轴,这意味着屏幕上较高的y值,所以我在二维平面上如何旋转矩阵有一些问题。我也想顺时针旋转矩阵,而不是标准的逆时针。
因此,如果我试图说明我希望它是如何工作的:
O=原点X=点旋转
然后0度看起来是这样的:
XXX
O
我希望90度看起来像这样:
X
OX
X
180度应该是这样的:
O
XXX
270度应该是这样的:
X
XO
X
对于如何计算在这个平面上旋转后的点的新x和y,有什么想法吗?
假设我有一个2x2矩阵,其中充满了表示平面的值。现在我想让飞机以三维的方式旋转,在“z-方向”。要获得更好的理解,请参见以下图像:
我想知道这是否可以通过一个简单的仿射矩阵来实现,因此我创建了以下简单脚本:
%Create a random value matrix
A = rand*ones(200,200);
%Make a box in the image
A(50:200-50,50:200-50) = 1;
现在,我可以简单地通过这样的旋转矩阵在二维房间中应用转换:
R = affine2d([1 0 0; .5 1 0; 0 0 1])
tform = affine3d
我的代码中有一个bug,我想知道这是不是不正确。
我的代码中有一个2D视图矩阵,但要在屏幕上显示我的世界,我需要将2D视图矩阵转换为3D视图矩阵。这是我正在使用的过程:
| a b c | | a b c 0 |
| d e f | => | d e f 0 |
| g h i | | g h i 0 |
| 0 0 0 1 |
当我对2D矩阵使用单位矩阵时,它就会起作用,但一旦我对2D矩阵应用任何变换,我绘制的所有对象都会消失。
对于使用3D在2D中绘制,我使用此投影矩阵:
_basicEffect.Projection = Mat
在使用Matlab2D滤波函数filter2(B,X)和卷积函数conv(X,B,'')时,我发现filter2函数本质上是二维卷积,但是滤波器系数矩阵的旋转是180度。就filter2和conv2的输出而言,我看到以下关系成立:
output matrix of filter2 = each element negated of output of conv2
编辑:我是不正确的;上述关系一般不成立,但我看到了一些情况。通常,这两个输出矩阵是不相关的,因为在这两个矩阵中都得到了两个完全不同的核,用于卷积。
我知道二维卷积是如何进行的。我想了解的是这在图像处理方面的含义。我怎
理论上,让我们假设我们要对3D同质(4x4)变换矩阵的每个不同组合(平移、旋转、缩放)的矩阵乘法进行硬编码,然后对这些(平移-旋转、平移-缩放、缩放-旋转)的每个可能的结果进行硬编码。
假设我们像这样处理矩阵乘法,每个矩阵类型组合都有一个不同的函数,其中每个矩阵都有一个额外的变量( type ),并且使用的特定函数是在运行时确定的(使用函数指针数组)。如果我们应用这种矩阵乘法,理论上它会比基本的、标准的4x4齐次矩阵乘法更快吗(不可否认,它仍然比一般的4x4矩阵乘法快)?
我现在就在做这件事,这对编码来说有点像地狱。最后,我将使用标准矩阵乘法对其进行测试,并比较结果。我只是想看看其他人认为结果
在opencv和C++中,如果我以前在两个图像之间找到了一个转换矩阵,我为什么要这样做?
Mat affineTransform=getAffineTransform(coordinates_1.data(),coordinates_2.data()) ;
Mat perspectiveTransform=Mat::eye(3,3,CV_64FC1);
for(unsigned int y=0; y<2; ++y){
for(unsigned int x=0; x<3; ++x){
perspectiveTransform.at<double>(