用MATLAB进行图像处理

图像处理概念,算法和MATLAB

登记手持图片

如下图所示,典型的现代法国圆号有大约23英尺的管材。在开始和结束时,油管是锥形的。在中间,管子是圆柱形的。
IMG_4910.jpeg
根据所按压的阀门杠杆,玩家可能会嗡嗡地进入9英尺到17英尺长的单个管道。对于一个个人项目,我想为这些不同的长度创建一个视觉插图。我用了一个延长杆,并得到了一些帮助,拍了几张照片。我的助手用的是手持电话。
A = imread(“A.jpg”);
B = imread(“B.jpg”);
C = imread(“C.jpg”);
tiledlayout (2, 2)
nexttile
imshow (,“插值”双线性的
标题(“图A (F喇叭长度,12英尺)”
nexttile
imshow (B,“插值”双线性的
标题(“图片B (B型喇叭长度,9英尺)”
nexttile
imshow (C,“插值”双线性的
标题(图C(角B的长度,17英尺)
我想用这些图片来做一个合成,让你直观地比较三个极点的长度。问题是这三张图片没有对齐,这使得创建一个准确的合成具有挑战性。
让我用一下 imshowpair 用图像A和B来说明我的意思。
clf
imshowpair (A, B)
看起来这两幅图像之间的区别是平移和小旋转。
为了实现我的目标,我首先需要让这三张图片彼此对齐。然后我可以裁剪它们并创建我的合成。
听起来像是一个图像配准和空间引用问题!
计划如下:
  1. 推断将图像B与图像a对齐的几何变换。
  2. 推断将图像C与图像a对齐的几何变换。
  3. 使用上面发现的变换,将图像B和C扭曲到与图像A相同的空间参考。
  4. 把这三张图片紧紧围绕着我,把杆子放在中间。
  5. 创建三个图像的合成。
我将使用图像处理工具箱和计算机视觉工具箱中的工具。

将图像B注册到图像A

将图像转换为灰度的配准过程。
Ag = rgb2gray(A);
Bg = rgb2gray(B);
在两个图像中使用SURF特征检测(来自计算机视觉工具箱)。
检测SURF特征
A_points = detectsurffatures (Ag);
B_points = detectsurffatures (Bg);
从检测到的特征点提取特征信息。
[A_features,A_valid_points] = extractFeatures(Ag,A_points);
[B_features,B_valid_points] = extractFeatures(Bg,B_points);
把两张图像的特征点匹配起来。
index_pairs_B_A = matchFeatures(A_features,B_features);
A_matched_points = A_valid_points(index_pairs_B_A(:,1));
B_matched_points = B_valid_points(index_pairs_B_A(:,2));
推断一个投影几何变换,将图像B与图像a对齐。
tform_B_A = estimateGeometricTransform(B_matched_points,A_matched_points,“射影”);
tform_B_A。T
ans = 3×3单矩阵
1.0211 0.0346 0.0000 -0.0196 1.0139 0.0000 31.3027 47.2352 1.0000
将图像B与图像a对齐,特别注意 OutputView 选择 imwarp ;用于在图像A所占用的空间矩形内计算图像的扭曲结果。
A_ref = imref2d(size(Ag));
B_reg = imwarp(B, tform_B_A,“OutputView”, A_ref);
目视检查结果。
数字
imshowpair (B_reg,“插值”双线性的

使用相同的过程将映像C注册到映像A

Cg = rgb2gray(C);
C_points = detectsurffatures (Cg);
[C_features,C_valid_points] = extractFeatures(Cg,C_points);
index_pairs_C_A = matchFeatures(A_features,C_features);
A_matched_points = A_valid_points(index_pairs_C_A(:,1));
C_matched_points = C_valid_points(index_pairs_C_A(:,2));
tform_C_A = estimateGeometricTransform(C_matched_points,A_matched_points,“射影”);
(C, tform_C_A,“OutputView”, A_ref);
imshowpair (C_reg,“插值”双线性的

将图像裁剪为一个公共矩形

现在图像A、B和C都已注册到图像A的空间引用,可以在相同位置使用相同的矩形裁剪它们。
R = [1100 450 600 1600];
A_c = imcrop(A,r);
B_reg_c = imcrop(B_reg,r);
C_reg_c = imcrop(C_reg,r);

制作一个平铺复合材料

最后,我会用 imtile 来制作可保存为JPEG文件的平铺合成图像。
ABC = imtile({B_reg_c,A_c,C_reg_c},...
“BorderSize”, 50岁,...
“写成BackgroundColor”“白色”);
imshow (ABC,“插值”双线性的
这让我很惊讶,我可以把这个仪器放在我的腿上,它真的可以像右边图中的杆子一样长。
这种现代乐器并非起源于法国,所以 法国号 严格来说是用词不当。许多演奏者把这种乐器简称为琴 角, 这是国际号角协会的建议。然而,在美国,大多数不是管弦乐演奏家的人都会对这个术语感到困惑 ,所以我使用 法国号 在这里。
|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。