日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV与图像处理学习十三——Harris角点检测(含代码)

發(fā)布時(shí)間:2024/7/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV与图像处理学习十三——Harris角点检测(含代码) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

OpenCV與圖像處理學(xué)習(xí)十三——Harris角點(diǎn)檢測(cè)(含代碼)

  • 一、角點(diǎn)的概念
  • 二、Harris角點(diǎn)檢測(cè)的實(shí)現(xiàn)過(guò)程
  • 三、Harris代碼應(yīng)用

一、角點(diǎn)的概念

角點(diǎn): 在現(xiàn)實(shí)世界中, 角點(diǎn)對(duì)應(yīng)于物體的拐角, 道路的十字路口、 丁字路口等。

從圖像分析的角度來(lái)定義角點(diǎn)可以有以下兩種定義:

  • 角點(diǎn)可以是兩個(gè)邊緣的交點(diǎn);
  • 角點(diǎn)是鄰域內(nèi)具有兩個(gè)主方向的特征點(diǎn);
  • 角點(diǎn)計(jì)算方法

  • 前者通過(guò)圖像邊緣計(jì)算, 計(jì)算量大, 圖像局部變化會(huì)對(duì)結(jié)果產(chǎn)生較大的影響;
  • 后者基于圖像灰度的方法通過(guò)計(jì)算點(diǎn)的曲率及梯度來(lái)檢測(cè)角點(diǎn);
  • 角點(diǎn)所具有的特征

  • 輪廓之間的交點(diǎn);
  • 對(duì)于同一場(chǎng)景, 即使視角發(fā)生變化, 通常具備穩(wěn)定性質(zhì)的特征;
  • 該點(diǎn)附近區(qū)域的像素點(diǎn)無(wú)論在梯度方向上還是其梯度幅值上有著較大變化
  • 性能較好的角點(diǎn)

  • 檢測(cè)出圖像中“真實(shí)” 的角點(diǎn)
  • 準(zhǔn)確的定位性能
  • 很高的重復(fù)檢測(cè)率
  • 噪聲的魯棒性
  • 較高的計(jì)算效率
  • 下圖展示了一些角點(diǎn)的例子:

    二、Harris角點(diǎn)檢測(cè)的實(shí)現(xiàn)過(guò)程

  • 計(jì)算圖像在X和Y方向的梯度:
  • 計(jì)算圖像兩個(gè)方向梯度的乘積:
  • 使用高斯函數(shù)對(duì)三者進(jìn)行高斯加權(quán), 生成矩陣M的A,B,C:
  • 計(jì)算每個(gè)像素的Harris響應(yīng)值R, 并對(duì)小于某一閾值 t 的R置為零;
  • 在3× 3或5× 5的鄰域內(nèi)進(jìn)行非最大值抑制, 局部最大值點(diǎn)即為圖像中的角點(diǎn);
  • 三、Harris代碼應(yīng)用

    函數(shù):

    dst = cv2.cornerHarris( src, blockSize, ksize, k[, dst[, borderType]] )

    參數(shù)如下所示:

  • src:數(shù)據(jù)類(lèi)型為 float32 的輸入圖像;
  • blockSize:角點(diǎn)檢測(cè)中要考慮的領(lǐng)域大小;
  • ksize:Sobel 求導(dǎo)中使用的窗口大小;
  • k:Harris 角點(diǎn)檢測(cè)方程中的自由參數(shù),取值參數(shù)為 [0,04,0.06]。
  • 看個(gè)例子:

    import cv2 import numpy as np from matplotlib import pyplot as pltimg = cv2.imread('image/harris2.png') print(img.shape) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gray = np.float32(gray) dst_block9_ksize19 = cv2.cornerHarris(gray, 9, 19, 0.04) img1 = np.copy(img) img1[dst_block9_ksize19 > 0.01 * dst_block9_ksize19.max()] = [0, 0, 255]dst_block5_ksize19 = cv2.cornerHarris(gray, 5, 19, 0.04) img2 = np.copy(img) img2[dst_block5_ksize19 > 0.01 * dst_block5_ksize19.max()] = [0, 0, 255]dst_block9_ksize5 = cv2.cornerHarris(gray, 9, 5, 0.04) img3 = np.copy(img) img3[dst_block9_ksize5 > 0.01 * dst_block9_ksize5.max()] = [0, 0, 255]dst_block9_ksize31 = cv2.cornerHarris(gray, 9, 31, 0.04) img4 = np.copy(img) img4[dst_block9_ksize31 > 0.01 * dst_block9_ksize31.max()] = [0, 0, 255]dst_block9_ksize19_k6 = cv2.cornerHarris(gray, 9, 19, 0.06) img5 = np.copy(img) img5[dst_block9_ksize19_k6 > 0.01 * dst_block9_ksize19_k6.max()] = [0, 0, 255]dst_block9_ksize19_k6_1e_5 = cv2.cornerHarris(gray, 9, 19, 0.06) img6 = np.copy(img) img6[dst_block9_ksize19_k6_1e_5 > 0.00001 * dst_block9_ksize19_k6_1e_5.max()] = [0, 0, 255]titles = ["Original", "block9_ksize19", "dst_block5_ksize19", "dst_block9_ksize5", "dst_block9_ksize31","dst_block9_ksize19_k6", "dst_block9_ksize19_k6_1e_5"] imgs = [img, img1, img2, img3, img4, img5, img6]for i in range(len(titles)):plt.subplot(3, 3, i + 1), plt.imshow(imgs[i]), plt.title(titles[i])plt.xticks([]), plt.yticks([]) plt.show() # cv2.imshow('src',img) # cv2.imshow('dst',img5) # cv2.waitKey(0) # cv2.destroyAllWindows()

    結(jié)果如下所示:

    在判斷出的角點(diǎn)處標(biāo)記為藍(lán)色,上圖為不同參數(shù)設(shè)置下的結(jié)果,效果也是不一樣的。

    總結(jié)

    以上是生活随笔為你收集整理的OpenCV与图像处理学习十三——Harris角点检测(含代码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。