Android基于OpenCV實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)
什么是角點(diǎn)?
角點(diǎn)就是極值點(diǎn),即在某方面屬性特別突出的點(diǎn)。當(dāng)然,你可以自己定義角點(diǎn)的屬性(設(shè)置特定熵值進(jìn)行角點(diǎn)檢測(cè))。角點(diǎn)可以是兩條線的交叉處,也可以是位于相鄰的兩個(gè)主要方向不同的事物上的點(diǎn)。角點(diǎn)通常被定義為兩條邊的交點(diǎn),或者說(shuō),角點(diǎn)的局部鄰域應(yīng)該具有兩個(gè)不同區(qū)域的不同方向的邊界。常見(jiàn)的角點(diǎn)有:
- 灰度梯度的最大值對(duì)應(yīng)的像素點(diǎn);
- 兩條直線或者曲線的交點(diǎn);
- 一階梯度的導(dǎo)數(shù)最大值和梯度方向變化率最大的像素點(diǎn);
- 一階導(dǎo)數(shù)最大,二階導(dǎo)數(shù)為零的像素點(diǎn)(指示物體邊緣變化不連續(xù)的方向)。
為什么要檢測(cè)角點(diǎn)?
角點(diǎn)是圖像很重要的特征,對(duì)圖像圖形的理解和分析有很重要的作用。角點(diǎn)在保留圖像圖形重要特征的同時(shí),可以有效地減少信息的數(shù)據(jù)量,使其信息的含量很高,有效地提高了計(jì)算的速度,有利于圖像的可靠匹配,使得實(shí)時(shí)處理成為可能。角點(diǎn)在三維場(chǎng)景重建、運(yùn)動(dòng)估計(jì)、目標(biāo)跟蹤、目標(biāo)識(shí)別、圖像配準(zhǔn)與匹配等計(jì)算機(jī)視覺(jué)領(lǐng)域起著非常重要的作用。
Harris角點(diǎn)檢測(cè)
人眼對(duì)角點(diǎn)的識(shí)別通常是在一個(gè)局部的小區(qū)域或小窗口完成的。如果在各個(gè)方向上移動(dòng)這個(gè)特征的小窗口,窗口內(nèi)區(qū)域的灰度發(fā)生了較大的變化,那么就認(rèn)為在窗口內(nèi)遇到了角點(diǎn)。如果這個(gè)特定的窗口在圖像各個(gè)方向上移動(dòng)時(shí),窗口內(nèi)圖像的灰度沒(méi)有發(fā)生變化,那么窗口內(nèi)就不存在角點(diǎn);如果窗口在某一個(gè)方向移動(dòng)時(shí),窗口內(nèi)圖像的灰度發(fā)生了較大的變化,而在另一些方向上沒(méi)有發(fā)生變化,那么,窗口內(nèi)的圖像可能就是一條直線的線段。
Harris角點(diǎn)檢測(cè)原理用公式演算如下:
其中w(x,y)表示滑動(dòng)窗口權(quán)重函數(shù),可以是常數(shù)也可以是高斯函數(shù)。E(u,v)表示滑動(dòng)窗口向各個(gè)方向移動(dòng)時(shí)像素值衡量系數(shù)的變化。
這里λ1,λ2是矩陣M的2個(gè)特征值,k是一個(gè)指定值,這是一個(gè)經(jīng)驗(yàn)參數(shù),需要實(shí)驗(yàn)確定它的合適大小,通常它的值在0.04和0.06之間,它的存在只是調(diào)節(jié)函數(shù)的形狀而已。R取決于M的特征值,對(duì)于角點(diǎn)|R|很大,平坦的區(qū)域|R|很小,邊緣的R為負(fù)值;
API
public static void cornerHarris(Mat src, Mat dst, int blockSize, int ksize, double k, int borderType)
- 參數(shù)一:src,輸入源圖像。必須是單通道8U或者32F類(lèi)型。
- 參數(shù)二:dst,輸出評(píng)價(jià)系數(shù)R的矩陣。尺寸與src相同,類(lèi)型為單通道32F。
- 參數(shù)三:blockSize,鄰域大小。
- 參數(shù)四:ksize,Sobel算子的半徑。
- 參數(shù)五:k,計(jì)算Harris評(píng)價(jià)系數(shù)R的權(quán)重系統(tǒng)。
- 參數(shù)六:borderType,像素外推算法標(biāo)志位。
方法的輸出dst為評(píng)價(jià)系數(shù)R的矩陣,由于評(píng)價(jià)系數(shù)有正有負(fù)且范圍較廣,計(jì)算結(jié)束后通常需要進(jìn)行歸一化處理。然后通過(guò)經(jīng)驗(yàn)閾值比較判斷像素點(diǎn)是否為Harris角點(diǎn)。閾值越大,提取的Harris角點(diǎn)越少,閾值越小,提取的Harris角點(diǎn)越多。
操作
/** * Harris角點(diǎn)檢測(cè) * 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() } }
效果
如下圖,圖中白點(diǎn)即為評(píng)價(jià)系數(shù)大于120的角點(diǎn)檢測(cè)結(jié)果。代碼中的參數(shù)可自行調(diào)整測(cè)試。
源碼
以上就是Android基于OpenCV實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)的詳細(xì)內(nèi)容,更多關(guān)于Android OpenCV實(shí)現(xiàn)Harris角點(diǎn)檢測(cè)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- OpenCV基于ORB算法實(shí)現(xiàn)角點(diǎn)檢測(cè)
- OpenCV角點(diǎn)檢測(cè)的實(shí)現(xiàn)示例
- Python中OpenCV圖像特征和harris角點(diǎn)檢測(cè)
- OpenCV半小時(shí)掌握基本操作之角點(diǎn)檢測(cè)
- OpenCV特征提取與檢測(cè)之Shi-Tomasi角點(diǎn)檢測(cè)器
- OpenCV特征提取與檢測(cè)之Harris角點(diǎn)檢測(cè)
- python opencv角點(diǎn)檢測(cè)連線功能的實(shí)現(xiàn)代碼
- OpenCV哈里斯(Harris)角點(diǎn)檢測(cè)的實(shí)現(xiàn)
- OpenCV實(shí)現(xiàn)圖像角點(diǎn)檢測(cè)
- opencv實(shí)現(xiàn)角點(diǎn)檢測(cè)
相關(guān)文章
不允許錯(cuò)過(guò)的Anndroid技術(shù)經(jīng)驗(yàn)60條
不允許錯(cuò)過(guò)的Anndroid技術(shù)經(jīng)驗(yàn)60條,與大家分享,希望可以提高大家Android開(kāi)發(fā)水平,感興趣的朋友可以參考一下2016-02-02Android如何幫助用戶(hù)自動(dòng)接聽(tīng)或者掛斷來(lái)電
這篇文章主要為大家詳細(xì)介紹了Android幫助用戶(hù)自動(dòng)接聽(tīng)或者掛斷來(lái)電,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android實(shí)現(xiàn)快遞物流時(shí)間軸效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)快遞物流時(shí)間軸效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android 實(shí)現(xiàn)控件懸浮效果實(shí)例代碼
本篇文章主要介紹了Android 實(shí)現(xiàn)控件懸浮效果實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01淺談Android性能優(yōu)化之內(nèi)存優(yōu)化
Android的內(nèi)存優(yōu)化是性能優(yōu)化中很重要的一部分,本文將詳細(xì)介紹Android性能優(yōu)化之內(nèi)存優(yōu)化。2021-06-06Android編程之ProgressBar圓形進(jìn)度條顏色設(shè)置方法
這篇文章主要介紹了Android編程之ProgressBar圓形進(jìn)度條顏色設(shè)置方法,涉及ProgressBar布局及屬性設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2017-02-02