比如有图像1,将其旋转n度得到图像2,问如何比较两张图像得到旋转的度数n。

算法思路参考logpolar变换:

1.从图像中心位置向四周引出射线。

2.计算每根射线所打到图像上的像素累计和,得到极坐标灰度曲线。

3.比较两张图的灰度曲线,得到最相关的偏移位置,即为两张图像的旋转角度。

原图:

旋转了10°的图像:

灰度曲线:

代码如下:

main.m

clear all;
close all;
clc; img1 = imread('lena.jpg');
img2 = imrotate(img1,); imshow(img1)
figure;
imshow(img2) re1 = getCurve(img1);
re2 = getCurve(img2); figure;
plot(re1);
hold on;
plot(re2); su=zeros(length(re1),);
for i=:length(re1)
tmp = circshift(re2,i);
su(i) =sum(tmp.*re1);
end [ma,ind] = max(su);
ind/

getCurve.m

function re = getCurve(img)

[m,n]=size(img);

oy=m/;
ox=n/; %求中心点到图像四个角的距离
up_left=sqrt((oy-)^+(ox-)^);
up_right=sqrt((oy-)^+(ox-n)^);
down_left=sqrt((oy-m)^+(ox-)^);
down_right=sqrt((oy-m)^+(ox-n)^); num=;
%求中心点距离四角距离的最大值,作为变换后图像的高。
%这个最大值也是极坐标变换的极径
radius=round(max([up_left up_right down_left down_right]));
re = zeros(num,); for i=::radius %纵坐标代表极径,不同情况不一样
for j=:num %横坐标代表极角,为3600
%oy,ox作为极坐标变换中心坐标,需要作为偏移量相加
ind = j/;
h=round(oy+i*sin(ind*pi/));
w=round(ox+i*cos(ind*pi/)); if h> && w> && h<=m && w<=n %超出原图像的像素忽略
re(j)= re(j) +double(img(h,w));
end
end
end
re = re/sum(re);
end

这里参考了我过去一篇博文:https://www.cnblogs.com/tiandsp/archive/2013/06/09/3129198.html

matlab练习程序(计算图像旋转角度)的更多相关文章

  1. matlab练习程序(图像球面化)

    十一没什么事干,接着看图像算法. 这个球面化算法最初是在ps上的球面化滤镜中看到的,感觉挺有意思,就研究了一下. 算法的详细推导可以在这篇博客中找到,我比较懒,只在纸上推了一遍,就不在博客上编辑了. ...

  2. matlab练习程序(图像投影到点云)

    最近接触点云比较多,如果把图像投影到点云应该挺有意思. 首先需要载入图像,然后做个球或其他什么形状的点云,这里可以参考球坐标公式. 最后通过pcshow将像素输出到点云上即可. 原图: 投影后的点云: ...

  3. matlab练习程序(图像马赛克)

    处理原理就是将邻域像素平均值赋给邻域中的所有像素. 这里将处理方法分为了带线条和不带线条,带线条处理后的视觉效果要好些. 原图: 处理结果(不带线条): 处理结果(带线条): 代码处理的是带线条的情况 ...

  4. matlab之原始处理图像几何变换

    (一)图像几何变换理论知识 (1)图像的平移与比例 图像的平移很简单,平移前后的坐标分别为(x,y)和(x',y'),则满足的关系式为 x'= x +Tx: y'= y +Ty: 其中Tx与Ty分别为 ...

  5. OpenCV2+入门系列(四):计算图像的直方图,平均灰度,灰度方差

    本篇懒得排版,直接在网页html编辑器编辑 在图像处理时,我们常常需要求出图像的直方图.灰度平均值.灰度的方差,这里给出一个opencv2+自带程序,实现这些功能. 直方图 对于直方图,使用cv::c ...

  6. matlab练习程序(SUSAN检测)

    matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...

  7. (转)matlab练习程序(HOG方向梯度直方图)

    matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...

  8. matlab练习程序(BRIEF描述子)

    BRIEF特征全称:Binary Robust Independent Elementary Features.是一种能够快速计算图像特征描述符的方法,同样能够降低特征匹配的时间. 算法计算步骤如下: ...

  9. 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行

    [TOC] 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行 程序源码 import java.io.IOException; import java.util. ...

随机推荐

  1. SERCOS总线程序相关

    SERCOS程序就是围绕主机发送MDT电报,伺服在下一个周期发送AT电报作为应答这个原则来实现的,这个过程是由控制字等控制实现的,读程序的时候如果忽略这点,可能在想程序从哪里读数据,在哪里写数据呢.. ...

  2. Lua 5.1 学习笔记

    1 简介 2 语法 2.1 语法约定 2.1.1 保留关键字 2.1.2 操作符 2.1.3 字符串定义 2.2 值与类型 2.2.1 强制转换 2.3 变量 2.3.1 索引 2.3.2 环境表 2 ...

  3. 《Web Development with Go》Middleware之使用gorilla.handlers

    可以方便的使用日志和压缩等功能. package main import ( "fmt" "log" "net/http" "os ...

  4. 数组中重复的数字(剑指offer_3)

    在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次.请找出数组中任意一个重复的数字. Input: {2,3,1,0 ...

  5. 【使用篇二】SpringBoot的日志体系及如何开启logback日志(15)

    抄自:https://blog.csdn.net/liujun03/article/details/82684209 Java应用中,日志一般分为以下5个级别(从高到低): ERROR 错误信息 WA ...

  6. Go语言常见坑

    可变参数是空接口类型当参数的可变参数是空接口类型时,传人空接口的切片时需要注意参数展开的问题.func main() { var a = []interface{}{1, 2, 3} fmt.Prin ...

  7. 2019年FJNU低编赛 G题(dfs博弈)

    ###题目链接### 题目大意: 有一个 0 ~ n+1 的数轴,Alice 站在 0 点处,Bob 站在 n+1 点处.在 1 ~ n 上各有着权值. Alice 每次向右移动 1 格或两格 ,Bo ...

  8. 如何使用1行代码让你的C++程序控制台输出彩色log信息

    本文首发于个人博客https://kezunlin.me/post/a201e11b/,欢迎阅读最新内容! colorwheel for colored print and trace for cpp ...

  9. 【UWP】仅在TextBlock文本溢出时显示Tooltip

    前言 这是我今天在回答SO问题时偶然遇到的,觉得可能还比较通用,就记录下来以供参考. 通常,我们使用ToolTip最简单的方式是这样: <TextBlock Text="Test&qu ...

  10. Java基础专题

    Java后端知识点汇总——Java基础专题 全套Java知识点汇总目录,见https://www.cnblogs.com/autism-dong/p/11831922.html 1.解释下什么是面向对 ...