二、计算机视觉(100分)
1.(20分)(特征点匹配)给定两幅图像 A A A和 B B B,要求对两幅图中的特征点 x i , i = 1 , . . , m , x_i, i=1,..,m, xi,i=1,..,m,和 x i ′ , j = 1 , . . , n x_i',j=1,..,n xi′,j=1,..,n进行匹配。特征点的结构为:{ x , y x,y x,y坐标,128 位描述子},即 x = { i n t x , i n t y , f l o a t d e s c [ 128 ] } x=\{int\,x,int\,y,float \hspace{2pt} desc[128]\} x={intx,inty,floatdesc[128]}.假设两幅图中所有特征点已经找出,并按照从左到右、从上到下的扫描顺序排序;一对特征点 x i , x j ′ x_i,x_j' xi,xj′的差异由距离函数 F ( x i , x j ′ ) F(x_i,x_j') F(xi,xj′)定义,如果 F ( x i , x k ( i ) ′ ) ≤ F ( x i , x j ′ ) , ∀ j ∈ [ 1 , n ] , F(x_i,x_{k(i)}')\leq F(x_i,x_j'),\forall j\in[1,n], F(xi,xk(i)′)≤F(xi,xj′),∀j∈[1,n],则 x i x_i xi与 x k ( i ) ′ x_{k(i)}' xk(i)′称为是一对特征点匹配对,记作 ( x i ↔ x k ( i ) ′ ) . (x_i\leftrightarrow x_{k(i)}'). (xi↔xk(i)′).试写出特征点匹配的算法(写出伪码即可),并分析时间复杂度(不考虑函数 F F F的开销)。
算法输入:按扫描顺序排序的特征点序列 x i , i = 1 , . . . , m x_i,i=1,...,m \hspace{4pt} xi,i=1,...,m和 x j ′ , j = 1 , . . . , n . x_j',j=1,...,n. xj′,j=1,...,n.
算法输出:所有特征点匹配对 ( x i ↔ x k ( i ) ′ ) , i = 1 , 2 , . . . , m . (x_i\leftrightarrow x_{k(i)}'),i=1,2,...,m. (xi↔xk(i)′),i=1,2,...,m.
数据结构定义(不可更改):
typedef struct _feature{
int x;
int y;
float desc[128];
}feature;
函数声明:
C++:void featureMatch(vector
void featureMatch(vector<feature> x, vector<feature> xprime, vector<int>& k) {
int m = x.size();
int n = xprime.size();
k.resize(m);
for (int i = 0; i < m; i++) {
int best_k = 1; // Initialize the best match index
float best_distance = distance(x[i], xprime[1]);
for (int j = 2; j <= n; j++) {
float current_distance = distance(x[i], xprime[j]);
if (current_distance < best_distance) {
best_k = j;
best_distance = current_distance;
}
}
k[i] = best_k; // Store the best match index for xi
}
}
特征点匹配的时间复杂度为 O ( m × n ) O(m\times n) O(m×n)
2.(20分)(图像矫正)试着设计一种算法可以将图 A \textnormal A A矫正成图 B \textnormal B B。 A,B \textnormal{A,B} A,B图的大小相同,宽高都为 w , h . w,h. w,h.其中 A \textnormal A A图中的 A 1 , A 2 , A 3 , A 4 A_1,A_2,A_3,A_4 A1,A2,A3,A4的坐标已知,分别为 A i = ( x i , y i ) , i = 1 , . . . , 4 , A_i=(x_i,y_i),i=1,...,4, Ai=(xi,yi),i=1,...,4,且对应 B \textnormal B B图中的四个角。并分析算法的优缺点。
要实现图像矫正的算法,将图A矫正成图B,可以按照以下步骤进行:
伪代码:
function imageCorrection(imageA, A1, A2, A3, A4, imageB):
// 计算旋转角度
angle = calculateRotationAngle(A1, A2, A3, A4)
// 旋转图像
rotatedImageA = rotateImage(imageA, -angle) // 逆时针旋转
// 扩展图像
correctedImageA = expandImage(rotatedImageA, imageB.width, imageB.height)
return correctedImageA
优缺点:
优点:
缺点:
3.(40分)(立体视觉)考虑一个典型的立体视觉系统,如下图所示。其中 C , C ′ C,C' C,C′分别为两个相机的中心,称为光心; e , e ′ e,e' e,e′分别为光心 C ′ , C C',C C′,C在另一个相机中的投影,称为对极点;X为三维空间中的一个点,其在两个相机的投影分别为 x , x ′ ; x,x'; x,x′; l ′ \ l' l′为 e ′ , x ′ e',x' e′,x′的连线,称为点 x x x对应的极线;连线 C C ′ CC' CC′称为基线。显然,上面所提到的所有点都共面,这个平面称为极平面。
用齐次坐标表示法来表示点和线(即在真实坐标后面加上一维1,例如二维坐标系 ( x , y ) (x,y) (x,y)的齐次坐标表示是 ( x , y , 1 ) , (x,y,1), (x,y,1),三维坐标 ( x , y , z ) (x,y,z) (x,y,z)的齐次坐标表示是 ( x , y , z , 1 ) (x,y,z,1) (x,y,z,1)。三维点 X X X投影到图像上的二维点可以由公式 P X = x , P ′ X = x ′ PX=x,P'X=x' PX=x,P′X=x′表示,其中 P , P ′ P,P' P,P′称为投影矩阵 ( 3 × 4 ) (3\times4) (3×4)。投影矩阵是不可逆的,因为所有射线 CX \textnormal{CX} CX上的点都投影到图像上的相同点 x x x,但可以求出他的伪逆 P + P^+ P+,并表达出射线 CX : f ( λ ) = P + x + λ C . \textnormal{CX}:f(\lambda)=P^+x+\lambda C. CX:f(λ)=P+x+λC.伪逆满足: P P + = I . PP^+=I. PP+=I.点 x x x在直线 l l l上可以表示为 x ⋅ l = x T l = 0. \mathbf{x}\cdot l=x^T\mathbf{l}=0. x⋅l=xTl=0.两点 x 1 , x 2 x_1,x_2 x1,x2所在的直线 l l l可以由他们的叉乘表示: l = x 1 × x 2 = [ x 1 ] × x 2 , l=x_1\times x_2=[x_1]_{\times}x_2, l=x1×x2=[x1]×x2,其中 [ ⋅ ] × [\cdot]_{\times} [⋅]×为反对称运算符:
[ x ] x = [ 0 − x 3 x 2 x 3 0 − x 1 − x 2 x 1 0 ] . [x]_x=\begin{bmatrix} 0 & -x_3 & x_2\\ x_3& 0& -x_1\\ -x_2&x_1&0 \end{bmatrix}. [x]x= 0x3−x2−x30x1x2−x10 .
1)(15分)试证明点 x , x ′ x,x' x,x′满足: x ′ T F x = 0 x'^TFx=0 x′TFx=0。给出 F F F的表达式,并说明它的秩是多少。
[略]
2)(25分)假设已知两幅视图中的n组匹配点对 x i , x i ′ , i = 1 , . . . , n , x_i,x_i',i=1,...,n, xi,xi′,i=1,...,n,试设计算法求出F.说明n最小为多少才能求得一个有效的F.
[略]
4.(20分)请描述你认为最重要的3个图像或视觉技术在消费类小型无人机领域的应用,并请简要说明原因以及你所能够想到的可能解决方案。
在消费类小型无人机领域,以下是三个重要的图像或视觉技术以及它们的应用和可能的解决方案:
目标检测与跟踪:
视觉导航与避障:
图像拼接与建模:
这三个技术在消费类小型无人机领域的应用,能够提升无人机的自主性、导航能力和数据采集效率,使其在各种领域发挥更大的作用。