国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

Android基于OpenCV實現Harris角點檢測

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

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

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

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

Harris角點檢測

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

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之間,它的存在只是調節函數的形狀而已。R取決于M的特征值,對于角點|R|很大,平坦的區域|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
相關文章:
主站蜘蛛池模板: 中文字幕一区二区在线观看 | 国产日产欧美精品一区二区三区 | 一级特级毛片免费 | 欧美亚洲日本 | 欧美一区二区三区精品国产 | 日韩久久网 | 国产精品午夜波多野结衣性色 | 国产大陆亚洲精品国产 | 九九色视频 | 欧美在线一区二区三区欧美 | 成人国产片免费 | 亚洲高清不卡 | 国产免费自拍 | 国产日本韩国 | 91精品国产免费久久国语蜜臀 | 在线毛片一区二区不卡视频 | 国产三级黄色 | 欧美人成在线观看ccc36 | 国内成人精品亚洲日本语音 | 国产亚洲精品成人a在线 | 亚洲精品国产一区二区三 | 成人免费影视网站 | 精品久久久久久久久久久久久久久 | 午夜一级毛片免费视频 | 一级高清毛片免费a级高清毛片 | 欧美一区二区三区gg高清影视 | 91亚洲成人 | 精品视频一区二区三区在线观看 | 亚洲精品日韩在线一区 | 1717she国产精品免费视频 | 香蕉国产人午夜视频在线观看 | 日韩亚洲欧美在线 | 欧美一区综合 | 91视频一区 | 网友自拍第一页 | 日本人成在线视频免费播放 | 韩国一级黄色毛片 | 精品理论片一区二区三区 | 精品乱人伦一区二区 | 一级片免费视频 | 亚洲精品视频区 |