中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java?OpenCV中SIFT角點檢測的方法

發布時間:2022-02-18 17:12:24 來源:億速云 閱讀:159 作者:iii 欄目:開發技術

這篇文章主要介紹“Java OpenCV中SIFT角點檢測的方法”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“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);
    }
}

效果圖

Java?OpenCV中SIFT角點檢測的方法

補充

角點檢測除了有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中SIFT角點檢測的方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梨树县| 夹江县| 阿尔山市| 开远市| 齐河县| 永年县| 五常市| 宾川县| 武宣县| 永顺县| 环江| 自贡市| 大埔县| 嘉祥县| 章丘市| 江门市| 东阳市| 杭锦后旗| 商都县| 吴堡县| 永定县| 深水埗区| 凤阳县| 余干县| 中山市| 久治县| 运城市| 梧州市| 麻江县| 涿州市| 多伦县| 霍山县| 磴口县| 根河市| 仙游县| 罗源县| 甘南县| 宜兰市| 镇巴县| 南充市| 望奎县|