织物图像的配准和拼接算法的MATLAB仿真,对比SIFT,SURF以及KAZE

news/2024/12/23 13:34:01/文章来源:https://www.cnblogs.com/matlabworld/p/18450857

1.算法运行效果图预览

(完整程序运行后无水印)

 

SIFT:

 

surf:

 

 

 

 

kaze:

 

 

2.算法运行软件版本

MATLAB2022a

 

3.部分核心程序

(完整版代码包含注释和操作步骤视频)

img1 = imread('Images\F1.jpg');
img2 = imread('Images\F2.jpg');
figure;
subplot(121);
imshow(img1);
title('原始图片1');
subplot(122);
imshow(img2);
title('原始图片2');SCALE = 4;
Threshold = 0.00004;
[F1,Vp1] = extractFeatures(rgb2gray(img1),detectKAZEFeatures(rgb2gray(img1),'Threshold',Threshold, 'NumOctaves',3,'NumScaleLevels',SCALE));
[F2,Vp2] = extractFeatures(rgb2gray(img2),detectKAZEFeatures(rgb2gray(img2),'Threshold',Threshold, 'NumOctaves',3,'NumScaleLevels',SCALE));indexPairs = matchFeatures(F1,F2); P1         = Vp1(indexPairs(:,1));  
P2         = Vp2(indexPairs(:,2));  
matchLoc1  = P1.Location;
matchLoc2  = P2.Location;img3       = func_appendimages(img1,img2);figure;
subplot(211);
colormap('gray');
imagesc(img3);
subplot(212);
colormap('gray');
imagesc(img3);
hold on;
cols1 = size(img1,2);
for i = 1: size(matchLoc1,1)if mod(i,1/Ratios)==1line([matchLoc1(i,1) matchLoc2(i,1)+cols1], ...[matchLoc1(i,2) matchLoc2(i,2)], 'Color', 'g');end
end
title('KAZE匹配效果');%图片拼接
imgout = func_pj(matchLoc1,matchLoc2,img1,img2);figure;
imshow(imgout);
title('拼接结果');

  

 

4.算法理论概述

       在织物瑕疵的检测过程中,由于织物图像信息是由多个摄像头采集得到的,因此需要将多个织物图片进行拼接得到一个完整的织物图像。织物图像拼接技术其首先通过图像匹配算法找到不同图像重叠区域的特征点坐标,然后进行图像的配准处理并得到一个全局的织物图像信息。在完成图像拼接之后,通过织物瑕疵检测算法检测出织物中的瑕疵,并通过分类算法将检测到的织物瑕疵进行分类。

 

4.1 SIFT (Scale-Invariant Feature Transform)

        SIFT算法是由David Lowe提出的,它能够在不同尺度和旋转下保持不变性。SIFT的关键点检测基于尺度空间理论。

 

关键点检测:

 

尺度空间构建: 通过高斯卷积核对输入图像进行卷积,得到一系列不同尺度的空间图像。

关键点定位: 在尺度空间中寻找极值点作为关键点候选。

关键点精确定位: 对候选点进行二次拟合,以获得更加精确的位置。

关键点筛选: 根据对比度阈值和边缘响应去除不稳定的关键点。

关键点描述:

 

方向赋值: 计算关键点邻域内像素梯度的方向直方图。

特征描述子: 选取关键点周围一定范围内的像素点,将其梯度方向量化后构成描述子。

 

 

 

4.2 SURF (Speeded Up Robust Features)

SURF是SIFT的一个快速版本,旨在提高速度的同时保持鲁棒性。

 

关键点检测:

 

Hessian矩阵近似: 使用Box滤波器近似二阶导数。

极值检测: 在尺度空间中寻找Hessian矩阵的极值点。

关键点定位: 类似SIFT,但使用Box滤波器代替高斯滤波器。

关键点描述:

 

方向赋值: 使用与SIFT相似的方式。

特征描述子: 在关键点邻域内选取矩形区域,计算这些区域的和作为描述子。

 

 

 

4.3 KAZE (Key-point Affine-Zernike descriptors)

KAZE算法是一种更为先进的特征检测与描述方法,它使用非线性扩散滤波器来构建尺度空间。

 

关键点检测:

 

尺度空间构建: 使用非线性扩散方程。

关键点定位: 寻找尺度空间中的极值点。

关键点精确定位: 类似SIFT,但使用非线性扩散方程。

关键点描述:

 

方向赋值: 使用与SIFT相似的方式。

特征描述子: 采用Zernike多项式描述子。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/809703.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

06.OpenFeign接口调用

1.提问 1.1 已经有RestTemplate + LoadBalancer的方式进行服务的调用,为什么还要有OpenFeign? 因为OpenFeign的功能更强大,和使用更便携。 1.2 使用那个? 推荐使用OpenFeign 2.OpenFeign是什么 2.1 官网翻译 https://docs.spring.io/spring-cloud-openfeign/reference/spri…

Hadoop单机模式

1.安装JDK 1.1 下载解压 tar zxf jdk-8u151-linux-x64.tar.gz -C /usr/local/src mv jdk-8u151-linux-x64 java1.2 添加环境变量 export JAVA_HOME=/usr/local/src/java export PATH=$PATH:$JAVA_HOME/binsource /etc/prifile java -version2.安装Hadoop 1.1 下载解压 tar zxf …

mysql读写分离的最佳实践

一. 传统的读写分离方式 在 MySQL 中实现读写分离可以通过以下几种方式来达到目的: 1. 主从复制 使用主从复制(Master-Slave Replication)是实现读写分离的常见方式。主库:处理所有的写入操作(INSERT、UPDATE、DELETE)。 从库:负责处理读操作(SELECT)。步骤:设置主从…

《机器学习初步》笔记 第一章

第一章 绪论 1.1 引言 机器学习的经典定义:利用经验(数据)改善系统自身的性能 经典的机器学习过程:机器学习最重要的理论模型:PAC(概览近似正确)1.2 基本术语 数据集:一组记录的集合 学习/训练:通过执行某个学习算法,得到模型,学的的模型对应数据的某种潜在规律 示例…

XTimer定时微服务项目

定时微服务项目,分布式架构下的定时器Xtimer定时微服务 项目背景 在学校社团中,有给社团成员发送活动通知的任务需求 有定期执行某项任务的需求,比如每周末举办一次线下活动,每个月举行一次团建 再比如,我有一个任务需要设置定时发布 定时微服务调研对比方案 不足点JavaTi…

集合竞价如何看强弱?

买股票前先把集合竞价搞懂 一、集合竞价介绍 1. 什么是集合竞价 所谓集合竞价是指在股票每个交易日上午9:15—9:25,由投资者按照自己所能接受的心理价格自由地进行买卖申请。详情可参考下图:注:严谨的集合竞价时间为9:15-9:25,下文在聊到集合竞价时候我会把9:25-9:30时间…

ECS云服务器搭建Mysql,并提供公网连接

搭建mysql8.0参考:https://blog.csdn.net/ShockChen7/article/details/126965940 搭建完成之后,使用navicat发现连接不上,发现是因为安全组没有设置:安全组需要开放3306端口。 百度参考: 然后我改了下安全组就可以供外部连接了。

清单文件 AndroidManifest.xml

每个应用的根目录中都必须包含一个 AndroidManifest.xml,并且文件名必须一模一样。 这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显示界面。

20222420 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 1.1 学习内容总结 1.1.1 初步了解缓冲区溢出漏洞 首先学习了安全漏洞的相关概念,然后聚焦在其中的缓冲区溢出漏洞上。学习了缓冲区溢出漏洞相关的定义和发生的原因,并了解了缓冲区溢出发展历史上的经典攻击,如红色代码蠕虫、冲击波病毒、震荡波病毒、心脏出血、乌…

《机器学习》 学习记录 - 第一章

早就听说西瓜书的大名,也是和它见上面了 第1章 绪论 1.1 引言 机器学习是一门致力于研究如何通过计算的手段,利用经验来改善系统自身的性能的学科。 经验 通常以 数据 形式存在,因此机器学习所研究的主要内容,是关于在计算机上从数据中产生 模型 的算法,即 学习算法 。 面…

再谈如何优雅修改代码

书接上回(https://t.zsxq.com/xo0M0)再做下扩展上文谈到:“基于抽象接口编程确实是最佳实践:把易于变动的功能点通过定义抽象接口的形式暴露出来,不同的实现做到隔离和扩展,这体现了开闭原则”public class Foo {private Bar bar ;@Injectpublic Foo(Bar bar) {this.bar …