色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

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
相關文章:
主站蜘蛛池模板: 特黄特黄黄色大片 | 热re91久久精品国产91热 | 国产小片 | 香蕉亚洲精品一区二区 | 成人a视频片在线观看免费 成人a视频在线观看 | 全部孕妇毛片 | 国产高清国产专区国产精品 | 免费人成年短视频在线观看网站 | 美女免费在线视频 | 普通话对白国产情侣自啪 | 亚洲社区在线 | 6080伦理久久亚洲精品 | 6080伦理久久亚洲精品 | 亚洲一级视频在线观看 | 性欧美欧美之巨大69 | 美女视频全部免费 | 国产在线小视频 | 手机看片日韩日韩国产在线看 | 国产成人经典三级在线观看 | 手机看片日韩国产 | 亚洲国产精品二区久久 | 最近韩国日本免费免费版 | 国产精品久久久久国产精品 | 欧美精品在线视频观看 | 香蕉久久高清国产精品免费 | 男女男精品视频 | 久久久美女视频 | 未成人做爰视频www 窝窝午夜精品一区二区 | 欧美三级在线观看视频 | 精品伊人久久久久7777人 | 亚洲综合天堂网 | 亚洲成aⅴ人片在线影院八 亚洲成av人片在线观看 | 成人综合影院 | a级毛片免费完整视频 | 国产一级强片在线观看 | 九九99| 亚洲在线久久 | 中文精品久久久久国产网址 | 香蕉网影院在线观看免费 | 亚洲网站视频在线观看 | 成人三级在线播放线观看 |