当前位置: 首页 > 编程日记 > 正文

harris角点检测与ncc匹配

转自:http://zixuanjinan.blog.163.com/blog/static/11543032620097510122831/

file1:--------------------------------------------------------------------------------------

function [y1,y2,r,c]=harris(X)
% 角点的检测,利用harris 算法
% 输出的是一幅图像
% [result,cnt,r,c]=harris(X)

% clc,clear all;
% filename='qiao1.bmp';
% X= imread('filename.bmp');     % 读取图像
% Info=imfinfo(filename); 

%     f=rgb2gray(X);
f=X;

ori_im=double(f)/255;               %unit8转化为64为双精度double64
fx = [-2 -1 0 1 2];                     % x方向梯度算子(用于Harris角点提取算法)
Ix = filter2(fx,ori_im);                % x方向滤波  善于使用filter
% fy = [5 8 5;0 0 0;-5 -8 -5];      % 高斯函数一阶微分,y方向(用于改进的Harris角点提取算法)
fy = [-2;-1;0;1;2];                     % y方向梯度算子(用于Harris角点提取算法)
Iy = filter2(fy,ori_im);                % y方向滤波
Ix2 = Ix.^2;
Iy2 = Iy.^2;
Ixy = Ix.*Iy;
clear Ix;
clear Iy;                               %消除变量
 
h= fspecial('gaussian',[10 10 ],2);        % 产生7*7的高斯窗函数,sigma=2
 
Ix2 = filter2(h,Ix2);
Iy2 = filter2(h,Iy2);
Ixy = filter2(h,Ixy);                   %分别进行高斯滤波
 
height = size(ori_im,1);
width = size(ori_im,2);
result = zeros(height,width);           % 记录角点位置,角点处值为1 ,背景都是黑色
 
R = zeros(height,width);
 
Rmax = 0;                              % 图像中最大的R值 以便设置门限
for i = 1:height
    for j = 1:width
        M = [Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)];          %2*2的矩阵     
        R(i,j) = det(M)-0.06*(trace(M))^2;% 计算R 求得RMAX,看来是整体求得的角点响应函数
        if R(i,j) > Rmax
            Rmax = R(i,j);
        end;
    end;
end;
 
cnt = 0;            %记录角点个数

for i = 2:height-1
    for j = 2:width-1           % 进行非极大抑制,窗口3*3
        if R(i,j) > 0.01*Rmax && R(i,j) > R(i-1,j-1) && R(i,j) > R(i-1,j) && R(i,j) > R(i-1,j+1) && R(i,j) > R(i,j-1) && R(i,j) > R(i,j+1) && R(i,j) > R(i+1,j-1) && R(i,j) > R(i+1,j) && R(i,j) > R(i+1,j+1)
            result(i,j) = 1;
            cnt = cnt+1;
        end;
    end;
end;

% i=1;
%     for j=1:height
%         for k=1:width
%             if result(j,k)==1;
%                 corners1(i,1)=j;
%                 corners1(i,2)=k;
%                 i=i+1;
%             end;
%         end;
%     end;
 
[posr, posc] = find(result == 1);   % 角点x、y坐标
% imshow(ori_im)   %和 X的效果是一样的
% hold on;
% plot(posr,posc,'r.');
y1=result;
y2=cnt;
r=posr;c=posc;
return;

file2----------------------------------------------------------------------------------------------------

function res=match(a1,cnt1,r1,c1,a2,cnt2,r2,c2)
% res=match(a1,a2)
% 将从a1寻找a2中的最佳匹配点,得到从a2中抽取的res,也就是单向搜索
% [result1,cnt1,r11,c11]=harris(a1);
% [result2,cnt2,r22,c22]=harris(a2);%可以保证想匹配哪些点就匹配哪些
% figure;
%  imshow(result1);title('result1角点位置');
%  figure;title('result2角点位置');
%  imshow(result2);  
 
win=[1/9 1/9 1/9;1/9 1/9 1/9;1/9 1/9 1/9];
u1=filter2(win,a1);
u2=filter2(win,a2);  %求均值
                         
 %基于点特征的图像配准算法研究 山大     

a1=double(a1);
a2=double(a2);
A=filter2(win,(a1-u1).^2);%求方差
B=filter2(win,(a2-u2).^2);
[m1,n1]=size(a1);
[m2,n2]=size(a2);
res1=zeros(m1,n1);
res2=zeros(m2,n2);           %寻找的匹配的点

for s=1:cnt1          
        max=0; p=0;q=0;i=r1(s,1);j=c1(s,1);      %p.q存放坐标
        for v=1:cnt2
            m=r2(v,1);n=c2(v,1);
      k1=(a1(i-1,j-1)-u1(i,j))*(a2(m-1,n-1)-u2(m,n));  %用result是找不到什么信息,3*3对于如此稀疏点没有用
      k2=(a1(i-1,j)-u1(i,j))*(a2(m-1,n)-u2(m,n));
      k3=(a1(i-1,j+1)-u1(i,j))*(a2(m-1,n+1)-u2(m,n));  %用循环要好一些
      k4=(a1(i,j-1)-u1(i,j))*(a2(m,n-1)-u2(m,n));
      k5=(a1(i,j)-u1(i,j))*(a2(m,n)-u2(m,n));
      k6=(a1(i,j+1)-u1(i,j))*(a2(m,n+1)-u2(m,n));
      k7=(a1(i+1,j-1)-u1(i,j))*(a2(m+1,n-1)-u2(m,n));
      k8=(a1(i+1,j)-u1(i,j))*(a2(m+1,n)-u2(m,n));
      k9=(a1(i+1,j+1)-u1(i,j))*(a2(m+1,n+1)-u2(m,n));
      num=k1+k2+k3+k4+k5+k6+k7+k8+k9;
 
       den=sqrt(A(i,j)*B(m,n));
     ncc=num/den;
        if ncc>max
            max=ncc;p=m;q=n;
        end
      
        end
 
  res2(p,q)=1;
 
end
                %做不出来可以先搜索一个点
res=res2;
return

file3----------------------------------------------------------------------------------------------------
%特征点的匹配,主要应用 harris 角点的检测,match单向匹配  函数
%适合于有白边的图像,因为,在加窗滤波的时候,没有限定范围,尽量保证角点不在边上
clc,clear all;
a1=imread('qiao1.bmp');
a2=imread('qiao2.bmp'); %double的作用很大
subplot(1,2,1); imshow(a1);subplot(1,2,2);imshow(a2);   title('原来的图像');

[result1,cnt1,r1,c1]=harris(a1);%角点检测,得到原始的焦点位置图result
[result2,cnt2,r2,c2]=harris(a2);
figure;subplot(1,2,1);imshow(a1);hold on;plot(c1,r1,'g.');
subplot(1,2,2);imshow(a2);hold on;plot(c2,r2,'g.'); title('图1,2的角点图');

 

res2=match(a1,cnt1,r1,c1,a2,cnt2,r2,c2);%从result1中开始搜索在result2中可能达到的
[r22,c22]=find(res2==1);
[m22,n22]=size(r22);
cnt22=m22;

res1=match(a2,cnt22,r22,c22,a1,cnt1,r1,c1);%反向搜索res2--result1
res1=and(res1,result1);   %保证反向匹配不会出现不可能的点
[r11,c11]=find(res1==1);
[m11,n11]=size(r11);
cnt11=m11;

res22=match(a1,cnt11,r11,c11,a2,cnt22,r22,c22);%从res1中开始搜索在res2中可能达到的
res22=and(res22,res2);
[r222,c222]=find(res22==1);
[m222,n222]=size(r222);
cnt222=m222;
%当然,匹配的次数越多,点数会越来越少,这个匹配永远都只是相对的
%注意最终结果的点数不一定一样的哈,也没有必要一一对应,几个点就可以决定参数了的
figure;subplot(1,2,1);imshow(a1);hold on;plot(c11,r11,'g.');
subplot(1,2,2);imshow(a2);hold on;plot(c222,r222,'g.'); %单向搜索和双向搜索到的结果
title('最终得到的匹配的角点');

相关文章:

CVPR 2019超全论文合集新鲜出炉!| 资源帖

整理 | 夕颜出品 | AI科技大本营(ID: rgznai100)实不相瞒,这是一个资源福利帖——CVPR 2019 接收论文超全合集!此前关于 CVPR 2019 论文和合集出过不少,但是这个可能是最全面最丰富的,链接奉上:…

ROS 用 roboware实现节点信息发送和接收

在ros下实现节点编程,实现一个节点发送消息,另一个节点接收。实现方式有多种,可以直接在命令窗口创建工作空间包以及节点,用catkin_make进行编译,添加.bash路径,然后执行rosrun package node_name 。这种…

javah生成JNI头文件

Administratoribm /cygdrive/z/workspace/com.example.hellojni.hellojni/src <---- 从此文件夹执行 javah *************** project root dir ******************* *** source dir *** javah -jni -classpath . com.example.hellojni.HelloJni*** package name *** ** c…

【码书】一本经典且内容全面算法书籍,学算法必备

之前推荐了好几本算法书&#xff0c;有《啊哈&#xff01;算法》&#xff0c;有《算法图解》&#xff0c;有《漫画算法》&#xff0c;也有《我的第一本算法书》&#xff0c;很多粉丝不乐意了&#xff0c;觉得我推荐了这么多算法书籍&#xff0c;竟然没有经典算法书籍《算法导论…

Ubuntu16.04.1 安装Nginx

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的&#xff0c;第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证…

linux下jboss的安装配置

闲来无事突然间想到和tomcat相同的java容器jboss&#xff0c;就想测试一下jboss和tomcat性能的差异之处。但是之前只安装过tomcat&#xff0c;想来跟tomcat安装方式应该是相同的都需要jdk的支持。查找资料后进行了安装。一下是我安装jboss的一些步骤&#xff1a;Linux版本&…

RANSAC鲁棒参数估计

转自&#xff1a;http://blog.csdn.net/zhanglei8893/archive/2010/01/23/5249470.aspx RANSAC 是"RANdom SAmple Consensus"的缩写。该算法是用于从一组观测数据中估计数学模型参数的迭代方法&#xff0c;由Fischler and Bolles在1981 提出&#xff0c;它是一种非确…

AlphaGo之父DeepMind再出神作,PrediNet原理详解

作者 | beyondma转载自CSDN博客近期&#xff0c;DeepMind发表论文&#xff0c;称受Marta Garnelo和 Murray Shanahan的论文“Reconciling deep learning with symbolic artificial intelligence: representing objects and relations”启发&#xff0c;他们提出了一种新的架构…

php中file_get_contents如何读取大容量文件

php中file_get_contents如何读取大容量文件 一、总结 一句话总结&#xff1a;使用file_get_contents()进行分段读取&#xff0c;file_get_contents()函数可以分段读取 1、读取大文件是&#xff0c;file_get_contents()函数为什么会发生错误&#xff1f; 发生内存溢出而打开错误…

Vmware虚拟机的复制后无法使用的问题和解决

为什么80%的码农都做不了架构师&#xff1f;>>> 我在自己的机器上用Vmware安装的Ubuntu 12.04系统&#xff0c;并在里面部署了Openstack的开发环境&#xff0c;部署的过程有些复杂&#xff0c;不希望再次重复这个过程&#xff0c;于是就复制整个的虚拟机文件到其他…

Facebook频谱图模型生成比尔·盖茨声音,性能完胜WaveNet、MAESTRO

作者 | James Vincent 等编译 | 夕颜、Monanfei出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;计算机生成语音领域&#xff0c;正在酝酿着和一场革命。Facebook 工程师们设计创建的机器学习模型 MelNet 就是一个启示。下面这段听起来怪异的话像极了比尔盖茨是吧&…

数据表设计的原则

如何设计数据表&#xff1a; 三个范式 ER图

图像配准----Harris算子

Harris算子是C.Harris和M.J.Stephens在1988年提出的一种特征点提取算子。它用一阶偏导来描述亮度变化&#xff0c;这种算子受信号处理中自相关函数的启发&#xff0c;给出与自相关函数相联系的矩阵M。M矩阵的特征值是自相关函数的一阶曲率&#xff0c;如果两个曲率值都高&#…

关于ORA-01950: no privileges on tablespace 的解决

前天晚上&#xff0c;本想在家里搭一个公司项目的开发环境&#xff0c;以便在工作忙的时候做点“家庭作业”。下班之前&#xff0c;通过PLSQL Developer导数据库时&#xff0c;不知道什么原因&#xff0c;以.dmp格式导出时总不成功&#xff0c;于是选择以.sql格式导出&#xff…

继往开来!目标检测二十年技术综述

作者 | 周强来源 | 我爱计算机视觉&#xff08;id&#xff1a;aicvml&#xff09;计算机视觉中的目标检测&#xff0c;因其在真实世界的大量应用需求&#xff0c;比如自动驾驶、视频监控、机器人视觉等&#xff0c;而被研究学者广泛关注。几天前&#xff0c;arXiv新出一篇目标检…

python+selenium百度贴吧自动签到

#-*- coding:utf-8 -*- from selenium import webdriver import time import os import random from selenium.webdriver.common.action_chains import ActionChainsbrowser webdriver.Chrome()# 最大等待加载完的时间 max_loading 600 # 延时随机n秒执行 wait_time random.…

图像配准----NCC

在用Harris算子对图像进行角点提取后&#xff0c;两幅图像得到的角点个数不一定相等&#xff0c;这时就要先对它们进行处理&#xff0c;得出一一对应的角点对。 归一化互相关(Normalized Cross Correlation method, NCC)匹配算法是一种经典的统计匹配算法&#xff0c;通过计算模…

Ext Scheduler Web资源甘特图控件

原文来自 http://www.fanganwang.com/Product-detail-item-1430.html欢迎转载。 关键字&#xff1a; 资源甘特图又叫负荷图&#xff0c;其纵轴不再列出活动&#xff0c;而是列出整个部门或特定的资源。 Ext Scheduler资源甘特图是基于Extjs核心库的开发的&#xff0c;基于WEB浏…

50行代码教AI实现动作平衡 | 附完整代码

作者 | Mike Shi译者 | linstancy责编 | Jane出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;【导读】本文将为大家展示如何通过 Numpy 库和 50行 Python 代码&#xff0c;使用标准的 OpenAI Gym平台创建智能体 (agent)&#xff0c;就教会机器处理推车杆问…

图像配准----双向匹配

由Harris提取出的两幅图像的角点个数或对应关系并不是一一对应的。为了后续的配准&#xff0c;需要先对提取出的角点进行初始匹配&#xff0c;双向匹配方法是比较简单的一种方法&#xff0c;它实现容易。 设参考图像特征点集为X {x1, x2, …,xp}, p > 3&#xff1b;待配准图…

[专业亲测]Ubuntu16.04安装Nvidia显卡驱动(cuda)--解决你的所有困惑【转】

本文转载自&#xff1a; 因为要做毕设需要安装caffe2&#xff0c;配置cuda8.0&#xff0c;但是安装nvidia驱动真的是把我难倒了&#xff0c;看了很多篇博文都没有效果&#xff0c;现在我自己重新总结了下几种 安装方法&#xff08;亲测有效&#xff09;&#xff0c;希望能帮到大…

IE下javascript的console方法

IE下javascript的console方法 FireFox 和 Chrome 下调试JS都有console&#xff0c;IE6下没有。特用此办法来兼容IE6. <br /><pre lang‘‘html‘‘> <!doctype html> <html> <head> <meta charset‘‘utf-8‘‘/> </head> <body&…

图像配准----RANSAC

对角点进行初始匹配后&#xff0c;所选定的角点并不能保证全部是正确的点&#xff0c;也可能有误点&#xff0c;因此&#xff0c;还需要进一步对所选定的角点进行精确匹配。 RANSAC(RANdom Sample And Consensus)方法是由Fischler和Bolles提出的一种鲁棒性的参数估计方法。它的…

教你用OpenCV实现机器学习最简单的k-NN算法

前言&#xff1a;OpenCV 的构建是为了提供计算机视觉的通用基础接口&#xff0c;现在已经成为经典和最优秀的计算机视觉和机器学习的综合算法工具集。作为一个开源项目&#xff0c;研究者、商业用户和政府部门都可以轻松利用和修改现成的代码。k-NN算法可以认为是最简单的机器学…

div 相同属性提取

把样式名或id写在一起&#xff0c;用逗号隔开 <!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>信息详情</title> <style type"text/css"> #box-1, #box-2, #box…

ehcache 简介

hCache 是一个纯Java的进程内缓存框架&#xff0c;具有快速、精干等特点&#xff0c;是Hibernate中默认的CacheProvider。 下图是 Ehcache 在应用程序中的位置&#xff1a; ehcache部署起来很简单&#xff0c;主要分两步&#xff1a; 1.首先要给他写个核心配置XML文件 <ehca…

【leetcode】30. Substring with Concatenation of All Words

题目如下&#xff1a; 解题思路&#xff1a;本题题干中有一个非常关键的前提&#xff0c;就是words中的所有word的长度一样&#xff0c;并且都要被使用到。所以&#xff0c;我们可以把输入的s按word的长度进行等分&#xff0c;以s "barfoothefoobarman",words [&qu…

图像配准----SIFT

SIFT算子(Scale Invariant Feature Transform)是David Lowe提出的一种基于尺度空间的、对图像缩放、旋转甚至仿射变换保持不变性的图像局部特征描述算子。SIFT特征提取的是极其细微、大量的特征点&#xff0c;即时少数物体、物体的一小部分也可以产生大量特征向量。 SIFT算法如…

终于把微软BING搜索-SPTAG算法的原理搞清了

作者 | beyondma转载自 CSDN 博客近日&#xff0c;微软在GitHub上开源了其BING的搜索算法SPTAG&#xff0c;github地址&#xff1a;https://github.com/microsoft/SPTAG。这个算法笔者简单看了一下&#xff0c;的确是很有价值可以看大家介绍下&#xff0c;这种称为SPTAG &#…

把握每天的第一个钟头

当我十七岁的时候&#xff0c;我读到一段话&#xff0c;它是这么说的&#xff1a;“如果你把每天都当做最后一天来活着&#xff0c;那么有一天你将会是对的。”这句话让我留下了深刻的印象&#xff0c;从那时候开始&#xff0c;过去的 33 年来&#xff0c;我每天早上都对着镜子…