Java OpenCV图像处理之SIFT角点检测详解

目录
  • 介绍
  • 示例代码
  • 效果图
  • 补充

介绍

在某些情况下对图像进行缩放后,角点信息可能会丢失,这时候Harri便不能检测到所有的角点。SIFT(scale-invariant feature transform) 刚好克服了这个问题,对图像特征的检测,尽量不受图像尺寸变化的影响.SIFT并不直接检测关键点。

其中关键点的检测是由DOG(Difference of Gaussians)检测完成的(DOG是通过不同的高斯滤波器对同一张图像进行处理,来得到关键点的)。SIFT仅通过特征向量来描述特征点周围的像素情况。

示例代码

package com.xu.opencv;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfKeyPoint;
import org.opencv.core.Scalar;
import org.opencv.features2d.Features2d;
import org.opencv.features2d.SIFT;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**
 * @Title: Image.java
 * @Description: OpenCV-4.0.0 测试文件
 * @Package com.xu.Image
 * @author: hyacinth
 * @date: 2022年2月18日12点20分
 * @version: V-1.0.0
 * @Copyright: 2019 hyacinth
 */
public class Image {

    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public static void main(String[] args) {
        sift();
    }

    /**
     * OpenCV-4.1.0 SIFT 角点检测
     *
     * @return void
     * @Author: hyacinth
     * @Title: harris
     * @Description: TODO
     * @date: 2022年2月18日12点32分
     */
    public static void sift() {
        Mat src = Imgcodecs.imread("D:\\OneDrive\\桌面\\1.png");
        Mat gray = new Mat();
        Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
        SIFT sift = SIFT.create(8000);
        MatOfKeyPoint point = new MatOfKeyPoint();
        sift.detect(gray, point);
        Features2d.drawKeypoints(src, point, src, new Scalar(0, 0, 255), Features2d.DrawMatchesFlags_DRAW_RICH_KEYPOINTS);
        HighGui.imshow("SIFT 角点检测", src);
        HighGui.waitKey(0);
    }
}

效果图

补充

角点检测除了有SIFT算法,还有FAST算法

FAST(Features from Accelerated Segment Test)算法会在像素周围绘制一个圆,圆内包含16个像素,FAST算法是将圆内的像素分别与加上一个阈值的圆心像素作比较,若圈内出现连续的几个像素比加上一个阈值的像素还亮或是暗,则可认为圆心是角点.FAST是一个很有效率的检测算法,但是需要确定阈值参数来检测角点。

BRIEF(Binary Robust Independent Elementary Features)在OpenCV中主要是通过detectAndCompute()来实现,这个函数包含两个部分,检测和计算,同时也返回两个结果.一个是检测到的关键点,一个是描述符.SIFT和SURF也是这样.关键点的描述符包含了图像的关键信息,可看作是图像的另一种表现形式,在比较两个图像的时候可以通过比较两个图像的特征描述来实现.也可以用来做图像特征的匹配。

下面将展示通过FAST算法进行角点检测的示例代码,需要的可以参考一下

package com.xu.opencv;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfKeyPoint;
import org.opencv.core.Scalar;
import org.opencv.features2d.Features2d;
import org.opencv.features2d.ORB;
import org.opencv.features2d.SIFT;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**
 * @Title: Image.java
 * @Description: OpenCV-4.0.0 测试文件
 * @Package com.xu.Image
 * @author: hyacinth
 * @date: 2022年2月18日12点20分
 * @version: V-1.0.0
 * @Copyright: 2019 hyacinth
 */
public class Image {

    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public static void main(String[] args) {
        fast();
    }

    public static void fast() {
        Mat src = Imgcodecs.imread("D:\\OneDrive\\桌面\\5.jpeg");
        Mat gray = new Mat();
        Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
        ORB orb = ORB.create(500, 1.2f, 8, 31, 0, 2, ORB.HARRIS_SCORE, 31, 20);
        MatOfKeyPoint point = new MatOfKeyPoint();
        orb.detect(gray, point);
        Features2d.drawKeypoints(src, point, src, new Scalar(0, 0, 255), Features2d.DrawMatchesFlags_DRAW_RICH_KEYPOINTS);
        HighGui.imshow("FAST 角点检测", src);
        HighGui.waitKey(0);
    }
}

效果图

到此这篇关于Java OpenCV图像处理之SIFT角点检测详解的文章就介绍到这了,更多相关Java OpenCV 角点检测内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java OpenCV图像处理之背景消除

    目录 实现步骤 主要代码 效果图 实现步骤 1.获取视频 2.设置形态学结构 3.创建Video.createBackgroundSubtractorMOG2() 4.提取模型 BS 5.进行形态学变换 6.展示结果 主要代码 package com.xu.opencv; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; import ja

  • OpenCV半小时掌握基本操作之SIFT算法

    目录 概述 图像尺度空间 多分辨率金字塔 高斯差分金字塔 计算极值点 SIFT 算法 函数 实战 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. (第 24 课) 图像尺度空间 在一定的范围内, 无论物体是大还是小, 人眼都可以分辨出来. 而计算机要有相同的能力却很难, 所以要让机器能够对物体在不同尺度下有一个统一的认知, 就需要考虑图像在不同的尺度下都存在的特点. 多分辨率金字塔 使用高斯模糊, 不同的 σ 决定

  • OpenCV半小时掌握基本操作之角点检测

    目录 概述 角点检测 角点检测代码 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 OpenCV 的世界. 角点检测 角点检测 (Corner Detection) 是图像的重要特征. 角点可以帮助我们实现图像对其, 图像拼接, 目标识别等等重要用途. Harris 角点检测 (Harris Corner Detection) 是最基础也是最重要的一种角点检测算法. 通过计算图像在 x, y 上平移的自相似性 (Self-Similari

  • OpenCV实现图像角点检测

    历时一个多月,于今天上午终于将项目交上去了,这期间虽很辛苦,但是成长了不少,在此将项目中涉及到的知识点进行整理,本文主要介绍图像的角点检测: 一.代码部分: // Detect_Corners.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "opencv2/opencv.hpp" #include <opencv2/imgproc/imgproc.hpp> #include <iostre

  • Java OpenCV图像处理之背景切换

    目录 实现步骤 函数详解 示例代码 效果图 实现步骤 1 读取原图片 2 获取原图片的mask 3 获取原图片需要获取的ROI 4 获取新背景的mask 5 融合 3,5 函数详解 示例代码 package com.xu.opencv; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.Scalar; import org.opencv.highgui.HighGui; import o

  • python利用opencv实现SIFT特征提取与匹配

    本文实例为大家分享了利用opencv实现SIFT特征提取与匹配的具体代码,供大家参考,具体内容如下 1.SIFT 1.1.sift的定义 SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述.这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子. 1.2.sift算法介绍 SIFT由David Lowe在1999年提出,在2004年加以完善 .SIFT在数字图像的特征描述方面当之无愧可称之为最红

  • Java OpenCV图像处理之SIFT角点检测详解

    目录 介绍 示例代码 效果图 补充 介绍 在某些情况下对图像进行缩放后,角点信息可能会丢失,这时候Harri便不能检测到所有的角点.SIFT(scale-invariant feature transform) 刚好克服了这个问题,对图像特征的检测,尽量不受图像尺寸变化的影响.SIFT并不直接检测关键点. 其中关键点的检测是由DOG(Difference of Gaussians)检测完成的(DOG是通过不同的高斯滤波器对同一张图像进行处理,来得到关键点的).SIFT仅通过特征向量来描述特征点周

  • 基于python的opencv图像处理实现对斑马线的检测示例

    基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人距离较近时,则会被判定车辆为未礼让行人. 结果示例 实验流程 先通过视频截取一张图片来进行测试,如果结果满意之后再嵌套到视频中,从而达到想要的效果. 1.预处理(灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀)> 根据自己的需求来修改一些值 #灰度值转换 imgGray = cv2.cvtColor

  • Java OpenCV图像处理之自定义图像滤波算子

    目录 示例代码 效果图 示例代码 package com.xu.image; import java.io.File; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.highgui.HighGui; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Img

  • Java OpenCV图像处理之图形与文字绘制

    目录 前言 核心代码 效果图 前言 代码地址 序號 名稱 方法 1 圖像 添加文字 Imgproc.putText 2 圖像 畫直綫 Imgproc.line 3 圖像 畫橢圓 Imgproc.ellipse 4 圖像 畫矩形 Imgproc.rectangle 5 圖像 畫園 Imgproc.circle 6 圖像 填充 Imgproc.fillConvexPoly 核心代码 package com.xu.opencv.canva; import java.io.File; import ja

  • Java OpenCV图像处理之仿射变换,透视变换,旋转详解

    目录 1 仿射变换 2 透视变换 3 图像旋转 1 仿射变换 仿射变换:一种二维坐标到二维坐标的线性变换,它保持二维图像的平直性与平行性,即变换后直线依然是直线,平行的线依然平行. package com.xu.opencv.image; import java.io.File; import java.util.ArrayList; import java.util.List; import org.opencv.core.Mat; import org.opencv.core.MatOfPo

  • Python传统图像处理之皮肤区域检测详解

    目录 1.RGB空间 2.Ycrcb空间 3.Ycrcb空间+otsu 4.HSV空间 5.opencv自带肤色检测类AdaptiveSkinDetector 6.基于椭圆模型 7.直方图反向投影 1.RGB空间 肤色在RGB模型下的范围基本满足以下约束: 在均匀光照下应满足以下判别式: R>95 AND G>40 B>20 AND MAX(R,G,B)-MIN(R,G,B)>15 AND ABS(R-G)>15 AND R>G AND R>B 在侧光拍摄环境下:

  • Qt+OpenCV实现目标检测详解

    目录 一.创建项目&UI设计 二.代码与演示 演示效果 拓展阅读 一.创建项目&UI设计 创建项目,UI设计如下 文件类型判断 简单的判断文件类型 QString file("sample.jpg"); if (file.contains(".jpg") || file.contains(".bmp") || file.contains(".png")) qDebug()<<"这是图片.&

  • 基于Opencv图像识别实现答题卡识别示例详解

    目录 1. 项目分析 2.项目实验 3.项目结果 总结 在观看唐宇迪老师图像处理的课程中,其中有一个答题卡识别的小项目,在此结合自己理解做一个简单的总结. 1. 项目分析 首先在拿到项目时候,分析项目目的是什么,要达到什么样的目标,有哪些需要注意的事项,同时构思实验的大体流程. 图1. 答题卡测试图像 比如在答题卡识别的项目中,针对测试图片如图1 ,首先应当实现的功能是: 能够捕获答题卡中的每个填涂选项. 将获取的填涂选项与正确选项做对比计算其答题正确率. 2.项目实验 在对测试图像进行形态学操

随机推荐