久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Android基于OpenCV實現Harris角點檢測

瀏覽:81日期:2022-09-17 18:05:10
目錄什么是角點?為什么要檢測角點?Harris角點檢測API操作效果源碼什么是角點?

角點就是極值點,即在某方面屬性特別突出的點。當然,你可以自己定義角點的屬性(設置特定熵值進行角點檢測)。角點可以是兩條線的交叉處,也可以是位于相鄰的兩個主要方向不同的事物上的點。角點通常被定義為兩條邊的交點,或者說,角點的局部鄰域應該具有兩個不同區(qū)域的不同方向的邊界。常見的角點有:

灰度梯度的最大值對應的像素點; 兩條直線或者曲線的交點; 一階梯度的導數最大值和梯度方向變化率最大的像素點; 一階導數最大,二階導數為零的像素點(指示物體邊緣變化不連續(xù)的方向)。 為什么要檢測角點?

角點是圖像很重要的特征,對圖像圖形的理解和分析有很重要的作用。角點在保留圖像圖形重要特征的同時,可以有效地減少信息的數據量,使其信息的含量很高,有效地提高了計算的速度,有利于圖像的可靠匹配,使得實時處理成為可能。角點在三維場景重建、運動估計、目標跟蹤、目標識別、圖像配準與匹配等計算機視覺領域起著非常重要的作用。

Harris角點檢測

人眼對角點的識別通常是在一個局部的小區(qū)域或小窗口完成的。如果在各個方向上移動這個特征的小窗口,窗口內區(qū)域的灰度發(fā)生了較大的變化,那么就認為在窗口內遇到了角點。如果這個特定的窗口在圖像各個方向上移動時,窗口內圖像的灰度沒有發(fā)生變化,那么窗口內就不存在角點;如果窗口在某一個方向移動時,窗口內圖像的灰度發(fā)生了較大的變化,而在另一些方向上沒有發(fā)生變化,那么,窗口內的圖像可能就是一條直線的線段。

Android基于OpenCV實現Harris角點檢測

Harris角點檢測原理用公式演算如下:

Android基于OpenCV實現Harris角點檢測

其中w(x,y)表示滑動窗口權重函數,可以是常數也可以是高斯函數。E(u,v)表示滑動窗口向各個方向移動時像素值衡量系數的變化。

Android基于OpenCV實現Harris角點檢測

Android基于OpenCV實現Harris角點檢測

這里λ1,λ2是矩陣M的2個特征值,k是一個指定值,這是一個經驗參數,需要實驗確定它的合適大小,通常它的值在0.04和0.06之間,它的存在只是調節(jié)函數的形狀而已。R取決于M的特征值,對于角點|R|很大,平坦的區(qū)域|R|很小,邊緣的R為負值;

Android基于OpenCV實現Harris角點檢測

API

public static void cornerHarris(Mat src, Mat dst, int blockSize, int ksize, double k, int borderType) 參數一:src,輸入源圖像。必須是單通道8U或者32F類型。 參數二:dst,輸出評價系數R的矩陣。尺寸與src相同,類型為單通道32F。 參數三:blockSize,鄰域大小。 參數四:ksize,Sobel算子的半徑。 參數五:k,計算Harris評價系數R的權重系統。 參數六:borderType,像素外推算法標志位。

方法的輸出dst為評價系數R的矩陣,由于評價系數有正有負且范圍較廣,計算結束后通常需要進行歸一化處理。然后通過經驗閾值比較判斷像素點是否為Harris角點。閾值越大,提取的Harris角點越少,閾值越小,提取的Harris角點越多。

操作

/** * Harris角點檢測 * author: yidong * 2020/12/30 */class HarrisActivity : AppCompatActivity() { private val mBinding: ActivityHarrisBinding by lazy {ActivityHarrisBinding.inflate(layoutInflater) } private val gray by lazy {this.getBgrFromResId(R.drawable.lena).toGray() } override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(mBinding.root)mBinding.ivLena.showMat(gray)wrapCoroutine({ showLoading() }, { doCornerHarris() }, { hideLoading() }) } private fun doCornerHarris() {val dst = Mat()val dstNorm = Mat()val dstNormal8U = Mat()Imgproc.cornerHarris(gray, dst, 2, 3, 0.04)Core.normalize(dst, dstNorm, 0.0, 255.0, Core.NORM_MINMAX)Core.convertScaleAbs(dstNorm, dstNormal8U)Imgproc.threshold(dstNormal8U, dstNormal8U, 120.0, 255.0, Imgproc.THRESH_BINARY)GlobalScope.launch(Dispatchers.Main) { mBinding.ivResult.showMat(dstNormal8U)} } private fun showLoading() {mBinding.isLoading = true } private fun hideLoading() {mBinding.isLoading = false }override fun onDestroy() {super.onDestroy()gray.release() }}效果

如下圖,圖中白點即為評價系數大于120的角點檢測結果。代碼中的參數可自行調整測試。

Android基于OpenCV實現Harris角點檢測

源碼

github.com/onlyloveyd/…

以上就是Android基于OpenCV實現Harris角點檢測的詳細內容,更多關于Android OpenCV實現Harris角點檢測的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 专干老肥女人88av | 亚洲国产成人精品女人 | 亚洲国产日韩a在线播放性色 | 中文字幕亚洲欧美 | 精品亚洲视频在线观看 | 国产免费av一区二区三区 | 激情久久久 | 日本成人黄色网址 | 国产精久| 伊人av成人 | 欧美一区二区三区在线观看视频 | 日日爽天天操 | 欧美精品一区二区蜜臀亚洲 | 久久久久成人精品 | 色婷婷亚洲 | 国产农村妇女精品一二区 | 久久va | 久久综合一区二区 | 国产高清在线精品 | 日日干夜夜操 | 久久久a | 亚洲一区二区视频在线播放 | 亚洲36d大奶网 | 国产成人一区 | 亚洲国产中文字幕 | 精品久久久久久久久久久院品网 | 久久久久亚洲一区二区三区 | 欧美8一10sex性hd| 怡红院免费在线视频 | 欧美日韩激情四射 | 日本不卡一区二区 | 欧美电影一区 | 最新中文字幕在线资源 | 久久精品久久久久电影 | 欧美在线观看免费观看视频 | 嫩呦国产一区二区三区av | 色婷婷国产精品久久包臀 | 免费黄色网止 | 亚洲一区二区av | 欧美久久一区二区三区 | 久久久中文字幕 |