如何在 MATLAB 中测量图像的旋转?

2023-12-08

我有两个图像。一个是原始的,另一个是旋转的。

Original Image

现在,我需要找出图像旋转的角度。到目前为止,我考虑过发现每种颜色的质心(因为我将使用的每个图像都有带有颜色的正方形)并用它来发现图像旋转了多少,但我失败了。

我用它来发现图像中较高方块的质心和颜色:

i = rgb2gray(img);
bw = im2bw(i,0.01);
s = regionprops(bw,'Centroid');
centroids = cat(1, s.Centroid);
colors = impixel(img,centroids(1),centroids(2));
top = max(centroids);
topcolor = impixel(img,top(1),top(2));

您可以检测图像和旋转版本中的彩色矩形之一的角点,并使用这些作为控制点来推断两个图像之间的变换(就像在图像配准中),使用CP2TFORM功能。然后我们可以根据仿射变换矩阵计算旋转角度:

这是一个示例代码:

%# read first image (indexed color image)
[I1 map1] = imread('https://i.stack.imgur.com/LwuW3.png');

%# constructed rotated image
deg = -15;
I2 = imrotate(I1, deg, 'bilinear', 'crop');

%# find blue rectangle
BW1 = (I1==2);
BW2 = imrotate(BW1, deg, 'bilinear', 'crop');

%# detect corners in both
p1 = corner(BW1, 'QualityLevel',0.5);
p2 = corner(BW2, 'QualityLevel',0.5);

%# sort corners coordinates in a consistent way (counter-clockwise)
p1 = sortrows(p1,[2 1]);
p2 = sortrows(p2,[2 1]);
idx = convhull(p1(:,1), p1(:,2)); p1 = p1(idx(1:end-1),:);
idx = convhull(p2(:,1), p2(:,2)); p2 = p2(idx(1:end-1),:);

%# make sure we have the same number of corner points
sz = min(size(p1,1),size(p2,1));
p1 = p1(1:sz,:); p2 = p2(1:sz,:);

%# infer transformation from corner points
t = cp2tform(p2,p1,'nonreflective similarity');    %# 'affine'

%# rotate image to match the other
II2 = imtransform(I2, t, 'XData',[1 size(I1,2)], 'YData',[1 size(I1,1)]);

%# recover affine transformation params (translation, rotation, scale)
ss = t.tdata.Tinv(2,1);
sc = t.tdata.Tinv(1,1);
tx = t.tdata.Tinv(3,1);
ty = t.tdata.Tinv(3,2);
translation = [tx ty];
scale = sqrt(ss*ss + sc*sc);
rotation = atan2(ss,sc)*180/pi;

%# plot the results
subplot(311), imshow(I1,map1), title('I1')
hold on, plot(p1(:,1),p1(:,2),'go')
subplot(312), imshow(I2,map1), title('I2')
hold on, plot(p2(:,1),p2(:,2),'go')
subplot(313), imshow(II2,map1)
title(sprintf('recovered angle = %g',rotation))

screenshot

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 MATLAB 中测量图像的旋转? 的相关文章

  • 如何将二进制值列表转换为int32类型?

    我在 MATLAB 工作区中有一个小端格式的二进制数列表 我想将它们转换为 int32 a是由 0 和 1 组成的双向量 如下所示 a 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1
  • Matlab:如何更改矩阵的存储方式?从 1x1x3 到 1x3?

    我目前有 val 1 0 7216 val 2 0 7216 val 3 0 7216 但我想要 0 7216 0 716 0 721 我可以做什么样的操作来做到这一点 The reshape函数将在这里解决问题 Arrange the e
  • Haar训练时正样本和负样本使用多少张图片?

    我已经阅读了大量有关 Haar 训练的内容 但我不清楚应该为正样本集和负样本集使用多少图像 我看到建议使用很多图像 有些人推荐数千张 我也不清楚正负样本图像的数量是否应该相同 这是关于 Haar 训练的最佳教程 你试过这个吗 http no
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • 使用 OpenCV VideoWriter 将 RTSP 流存储为视频文件

    我正在使用 OpenCV 开发一个 Python 模块 该模块连接到 RTSP 流以对视频执行一些预处理 主要是降低 fps 和分辨率 然后将其存储在文件系统中 但是 即使在尝试了几种编解码器 寻找类似的开发之后 我总是得到一个空的视频 我
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • 找到图像特征宽度的正确方法和Python包

    输入是一个在黑色背景上带有彩色 抱歉 垂直线的光谱 给定该带的近似 x 坐标 用 X 标记 我想找到该带的宽度 我对图像处理不熟悉 请引导我前往正确的方法图像处理和Python图像处理package也能起到同样的作用 我认为 PIL Ope
  • 图像处理:什么是遮挡?

    我正在开发一个图像处理项目 我遇到了这个词闭塞在许多科学论文中 遮挡在图像处理中意味着什么 字典只是给出了一般的定义 谁能使用图像作为上下文来描述它们 遮挡意味着您想看到某些内容 但由于传感器设置的某些属性或某些事件而无法看到 它到底如何表
  • 如何在文本集中创建所有字符组合?

    例如 我有这样的文本集 第 1 栏 a b 第 2 栏 l m n 第 3 栏 v w x y 我想将它们组合起来以获得如下输出 alv alw alx aly amv amw amx amy 这将输出 24 种文本组合 如果我只使用前两列
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • 从开始/结束索引列表创建向量化数组

    我有一个两列矩阵M包含一堆间隔的开始 结束索引 startInd EndInd 1 3 6 10 12 12 15 16 如何生成所有区间索引的向量 v 1 2 3 6 7 8 9 10 12 15 16 我正在使用循环执行上述操作 但我想
  • 如何将复杂的 csv 文件导入到 Matlab 中的数值向量

    我想知道我们应该如何读取由字符串 双精度数和字符等组成的复杂 csv 文件 例如 您能否提供一个可以在此 csv 文件中提取数值的成功命令 Click here http www ecb europa eu stats money yc d
  • Matlab Builder JA - 将 Matlab 编译成 Java jar - 免费版本?

    请记住 我对 Matlab 一无所知 Matlab Builder JA 允许开发人员构建 Matlab 应用程序并将其导出到 Java jar 中 太棒了 我只需要生成一个 jar 然后就可以从其他 java 代码中使用它 有谁知道单罐包
  • 如何褪色

    我想将像素的颜色淡化为白色 但显然保持相同的颜色 如果我有一个像素 200 120 40 将每个值加上 10 以使 210 130 50 使其颜色相同 只是颜色更浅 还是会完全改变颜色 例如 我知道 100 100 100 即将 110 1
  • matlab中求和函数句柄

    Hi我试图对两个函数句柄求和 但它不起作用 例如 y1 x x x y2 x x x 3 x y3 y1 y2 我收到的错误是 对于 function handle 类型的输入参数 未定义函数或方法 plus 这只是一个小例子 实际上我实际
  • 从 numpy 数组中删除连续的 RGB 值

    我最初根据灰度图像的初始数组创建了一个子数组 从 numpy 数组中删除连续数字 https stackoverflow com questions 50743769 deleting consecutive numbers from a
  • opencv - 在图像中绘制轮廓

    我正在尝试在图像周围绘制轮廓 我可以看到找到了轮廓 但无法绘制轮廓 轮廓的颜色似乎是两种 黑色和白色 颜色中的一种 import cv2 import numpy as np import matplotlib pyplot as plt
  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla

随机推荐

  • 在 Angular Dart 组件中填充派生字段

    我有一个采用单个属性的组件 我想用从此属性派生的值填充组件中的字段 我遇到的问题是 当构造函数内的代码运行时 与属性的绑定尚未发生 那么 如何设置派生字段的值呢 这是一些代码 import package angular angular d
  • 是否可以使用pandas中的groupby来执行applymap?

    在 pandas Dataframe 中我想要applymap somefunction using groupby 使用一些列索引值 mcve 01 txt pos index M1 M2 F1 x 16230484 141 G G G
  • C# 中的联合 - 与非对象字段不正确对齐或重叠

    我通过 PInvoke 编组到本机 C dll 它需要以下调用 private static extern int externalMethod IntPtr Data MarshalAs UnmanagedType U4 ref int
  • Nifi:nifi 中的线程

    我想知道线程在 nifi 中如何工作 我的意思是一个处理器有一个线程还是它们在一个主线程中 也许我想从处理器获取一个文件 然后我想更新它 如何防止多个处理器同时获取文件数据 除了使用 keep file false 操作 是否可以在执行脚本
  • JavaScript 排序回调

    我需要对一大堆 Javascript 项目进行排序 我正在使用sort像这样的函数 var sorted list non sorted sort function a b Sort stuff here 我想做的是当sort功能完成 是否
  • 如何使用 UIImagePickerController 录制时使麦克风静音?

    我正在使用 UIImagePickerController 在我的应用程序之一中录制视频 我已成功录制视频 但现在我想在录制视频时将麦克风静音 没有音频的视频 我已经搜索了很多 但没有任何线索 请帮我解决这个问题 是否可能 如果可能的话 比
  • 隔离范围属性何时真正添加到范围中?

    我正在创建一些具有隔离范围和一些别名属性的指令 例如 scope prop1 我的问题是 这些别名到底什么时候添加到范围中 我遇到了一些问题 因为链接函数中未定义属性 运行这个 jsFiddle 后在控制台中查看 http jsfiddle
  • 导入 Math.PI 作为参考或值

    我正在准备 Java 基础认证 我对我正确的问题的答案感到有点困惑 Given public class Circle static double getCircumference double radius return PI 2 rad
  • 释放使用 initWithInteger 创建的 NSNumber 实例:与 numberWithInt:

    书中第326页Objective C 2 0 编程作者说 myNumber NSNumber alloc initWithInt 1000 当然 根据之前的讨论 如果您创建myNumber这样 当您使用完它后 您有责任通过如下语句随后释放它
  • 无法检测类 IllegalArgumentException

    同时从 eclipse 学习和探索 Java 9 我在 eclipse 中创建了一个简单的项目 虽然当我编译该项目时 它打印了程序的预期结果 但也出现了以下异常 Could not instrument class mymodule App
  • 如何在 LINQ 中按大小写排序

    我有这个答案实体框架 OrderBy CASE WHEN 但这只能处理两个选项 var p ctx People OrderBy p gt p IsQualityNetwork 1 p IsEmployee 1 0 1 ThenBy p g
  • 高效的 HTML Div,其中有漏洞

    让我多解释一下 我试图拥有一个大区域 全屏 其中有一个固定大小的孔 该孔将跟随鼠标在屏幕上移动 想象一下 将范围集中在页面上 而页面的其余部分呈灰色 我需要它在所有浏览器 包括 IE 6 中有效地工作 我当前的解决方案使用 4 个 div
  • pthread_create 无法与 pthread_attr_setschedparam 一起正常工作

    我是线程编程的新手 所以我对这个看似愚蠢的问题表示歉意 我正在尝试使用 pthread attr t 使用 pthread create 创建 POSIX 线程 我正在尝试设置 sched priority 值并将其放入属性中 代码粘贴在下
  • 当连接到一个非常小的/空表时,为什么尽管我使用“LIMIT”,MySQL 仍进行完整扫描?

    编辑 我删除了GROUP BY示例查询中的子句 但同样的问题显示 当我将表 x 连接到空 1 行表 y 时 尽管我使用了限制 MySQL 对表 x 进行全表扫描 原问题 我试图学习如何优化 SQL 查询 但遇到了我无法理解的行为 有这样的模
  • 如何从一个表单刷新另一个表单?

    我有两种形式 form1 和 form2 我使用以下代码片段从 form1 调用 form2 Application run new Form2 Form2 f2 new Form2 f2 show 这段代码运行得非常好 我可以看到 for
  • 如何使用 javascript 将数据显示为 HTML

    我在使用 javascript 将数据显示为 HTML 时遇到问题 我创建的代码仅显示最新数据而不是整个数据 我在开发中使用phonegap 这是代码 var oldHtml document getElementById favorite
  • VBA:搜索子字符串并删除整行

    我正在尝试删除字符串中包含 H 的所有行P柱子 然而 该宏有效 每次只删除一半的必要行 这是因为For代码中的循环 当删除一行时 下一行将具有相同的内容i值作为删除的值 并被跳过Next i Dim LastRow As Long Find
  • 在 Windows 10 中设置环境变量以使用 java 和 javac

    我有一台装有 Windows 10 的新笔记本电脑 我想对其进行设置以便可以使用java and javac从命令行 我已经在网上搜索过 但所有指南都是针对以前的版本 我不想搞乱我不明白的东西 只需将环境变量中的path变量设置为JDK b
  • Swift 中的 CLLocation Manager 获取用户位置

    我正在尝试将 ObjC 中的旧应用程序转换为 Swift 作为练习 但遇到了一些问题 我在旧应用程序中的方式是建立 CLLocation Manager 然后我将使用 manager CLLocationManager alloc init
  • 如何在 MATLAB 中测量图像的旋转?

    我有两个图像 一个是原始的 另一个是旋转的 现在 我需要找出图像旋转的角度 到目前为止 我考虑过发现每种颜色的质心 因为我将使用的每个图像都有带有颜色的正方形 并用它来发现图像旋转了多少 但我失败了 我用它来发现图像中较高方块的质心和颜色