欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?OpenCV圖像處理之SIFT角點(diǎn)檢測詳解

 更新時間:2022年02月18日 15:23:53   作者:深色風(fēng)信子  
SIFT,即尺度不變特征變換,是用于圖像處理領(lǐng)域的一種描述。這種描述具有尺度不變性,可在圖像中檢測出關(guān)鍵點(diǎn),是一種局部特征描述子。本文將詳細(xì)介紹一下Java?OpenCV圖像處理中的SIFT角點(diǎn)檢測,需要的可以參考一下

介紹

在某些情況下對圖像進(jìn)行縮放后,角點(diǎn)信息可能會丟失,這時候Harri便不能檢測到所有的角點(diǎn)。SIFT(scale-invariant feature transform) 剛好克服了這個問題,對圖像特征的檢測,盡量不受圖像尺寸變化的影響.SIFT并不直接檢測關(guān)鍵點(diǎn)。

其中關(guān)鍵點(diǎn)的檢測是由DOG(Difference of Gaussians)檢測完成的(DOG是通過不同的高斯濾波器對同一張圖像進(jìn)行處理,來得到關(guān)鍵點(diǎn)的)。SIFT僅通過特征向量來描述特征點(diǎn)周圍的像素情況。

示例代碼

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點(diǎn)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 角點(diǎn)檢測
     *
     * @return void
     * @Author: hyacinth
     * @Title: harris
     * @Description: TODO
     * @date: 2022年2月18日12點(diǎn)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 角點(diǎn)檢測", src);
        HighGui.waitKey(0);
    }
}    

效果圖

補(bǔ)充

角點(diǎn)檢測除了有SIFT算法,還有FAST算法

FAST(Features from Accelerated Segment Test)算法會在像素周圍繪制一個圓,圓內(nèi)包含16個像素,F(xiàn)AST算法是將圓內(nèi)的像素分別與加上一個閾值的圓心像素作比較,若圈內(nèi)出現(xiàn)連續(xù)的幾個像素比加上一個閾值的像素還亮或是暗,則可認(rèn)為圓心是角點(diǎn).FAST是一個很有效率的檢測算法,但是需要確定閾值參數(shù)來檢測角點(diǎn)。

BRIEF(Binary Robust Independent Elementary Features)在OpenCV中主要是通過detectAndCompute()來實(shí)現(xiàn),這個函數(shù)包含兩個部分,檢測和計算,同時也返回兩個結(jié)果.一個是檢測到的關(guān)鍵點(diǎn),一個是描述符.SIFT和SURF也是這樣.關(guān)鍵點(diǎn)的描述符包含了圖像的關(guān)鍵信息,可看作是圖像的另一種表現(xiàn)形式,在比較兩個圖像的時候可以通過比較兩個圖像的特征描述來實(shí)現(xiàn).也可以用來做圖像特征的匹配。

下面將展示通過FAST算法進(jìn)行角點(diǎn)檢測的示例代碼,需要的可以參考一下

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點(diǎn)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 角點(diǎn)檢測", src);
        HighGui.waitKey(0);
    }
}

效果圖

到此這篇關(guān)于Java OpenCV圖像處理之SIFT角點(diǎn)檢測詳解的文章就介紹到這了,更多相關(guān)Java OpenCV 角點(diǎn)檢測內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Spring與Mybatis的整合方法(基于Eclipse的搭建)

    詳解Spring與Mybatis的整合方法(基于Eclipse的搭建)

    這篇文章主要介紹了Spring與Mybatis的整合方法(基于Eclipse的搭建),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Java中局部變量和成員變量的區(qū)別詳解

    Java中局部變量和成員變量的區(qū)別詳解

    這篇文章主要介紹了Java中局部變量和成員變量的區(qū)別,本文將通過示例為大家詳細(xì)講講Java中成員變量與局部變量之間的區(qū)別,感興趣的同學(xué)可以了解一下
    2023-05-05
  • Java 裝箱與拆箱詳解及實(shí)例代碼

    Java 裝箱與拆箱詳解及實(shí)例代碼

    這篇文章主要介紹了Java 裝箱與拆箱詳解及實(shí)例代碼的相關(guān)資料,這里對java 的裝箱及拆箱進(jìn)行了基本概念詳解及簡單使用,需要的朋友可以參考下
    2017-01-01
  • Java中策略設(shè)計模式的實(shí)現(xiàn)及應(yīng)用場景

    Java中策略設(shè)計模式的實(shí)現(xiàn)及應(yīng)用場景

    策略設(shè)計模式是Java中一種常用的設(shè)計模式,它通過定義一系列算法并將其封裝成獨(dú)立的策略類,從而使得算法可以在不影響客戶端的情況下隨時切換。策略設(shè)計模式主要應(yīng)用于系統(tǒng)中存在多種相似的算法、需要靈活調(diào)整算法邏輯或者需要擴(kuò)展新的算法等場景
    2023-04-04
  • Spring?Boot中@Autowired注入為空的原因以及解決方法

    Spring?Boot中@Autowired注入為空的原因以及解決方法

    最近在開發(fā)中遇到了使用@Autowired注解自動裝配時會報空指針,發(fā)現(xiàn)對象并沒有裝配進(jìn)來,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot中@Autowired注入為空的原因以及解決方法,需要的朋友可以參考下
    2024-01-01
  • Java中枚舉類型的一種使用方式

    Java中枚舉類型的一種使用方式

    這篇文章主要介紹了Java中枚舉類型的一種使用方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 淺談mybatis返回單一對象或?qū)ο罅斜淼膯栴}

    淺談mybatis返回單一對象或?qū)ο罅斜淼膯栴}

    這篇文章主要介紹了淺談mybatis返回單一對象或?qū)ο罅斜淼膯栴},具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 使用redisTemplate從redis獲取所有數(shù)據(jù)

    使用redisTemplate從redis獲取所有數(shù)據(jù)

    這篇文章主要介紹了使用redisTemplate從redis獲取所有數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 使用Maven中的scope總結(jié)

    使用Maven中的scope總結(jié)

    這篇文章主要介紹了使用Maven中的scope總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java的云打印Lodop

    Java的云打印Lodop

    這篇文章主要介紹了Java的云打印Lodop 的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07

最新評論