人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

OpenCV半小時(shí)掌握基本操作之SIFT算法

發(fā)布日期:2022-01-14 18:22 | 文章來源:源碼之家

概述

OpenCV 是一個(gè)跨平臺(tái)的計(jì)算機(jī)視覺庫, 支持多語言, 功能強(qiáng)大. 今天小白就帶大家一起攜手走進(jìn) OpenCV 的世界. (第 24 課)

圖像尺度空間

在一定的范圍內(nèi), 無論物體是大還是小, 人眼都可以分辨出來. 而計(jì)算機(jī)要有相同的能力卻很難, 所以要讓機(jī)器能夠?qū)ξ矬w在不同尺度下有一個(gè)統(tǒng)一的認(rèn)知, 就需要考慮圖像在不同的尺度下都存在的特點(diǎn).

多分辨率金字塔

使用高斯模糊, 不同的 σ 決定了圖像的平滑程度, 越大的 σ 值對(duì)應(yīng)的圖像越模糊. 通過使用不同的 σ 我們可以實(shí)現(xiàn)多分辨率金字塔.

高斯模糊:

cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
  • src: 需要濾波的圖片
  • ksize: 卷積核大小
  • sigmaX: 高斯核函數(shù)在 X 方向的的標(biāo)準(zhǔn)偏差
  • sigmaY: 高斯核函數(shù)在 Y 方向的的標(biāo)準(zhǔn)偏差

例子:

import cv2
from matplotlib import pyplot as plt
# 讀取圖片
img = cv2.imread("face.jpg")
# 畫圖
f, ax = plt.subplots(2, 3, figsize=(12, 8))
ax[0, 0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
ax[0, 0].set_title("original")
ax[0, 0].set_xticks([])
ax[0, 0].set_yticks([])

# 高斯模糊
for i in range(1, 6):
 # 高斯模糊
 image_blur = cv2.GaussianBlur(img, (15, 15), i)
 # 計(jì)算子圖
 ax[int(i/3), i % 3].imshow(cv2.cvtColor(image_blur, cv2.COLOR_BGR2RGB))
 # 標(biāo)題
 ax[int(i/3), i % 3].set_title("σ" + str(i))
 ax[int(i/3), i % 3].set_xticks([])
 ax[int(i/3), i % 3].set_yticks([])
# 展示圖片
plt.show()

輸出結(jié)果:

高斯差分金字塔

DoG (Difference of Gaussian) 即高斯差分金字塔, 是在高斯金字塔的基礎(chǔ)上構(gòu)建起來的. 通過對(duì)高斯金字塔逐層相減, 得到 t-1 的高斯差分金字塔:

計(jì)算極值點(diǎn)

DoG 空間極值檢測(cè): 將每個(gè)像素點(diǎn)和同一層周圍的 8 個(gè)像素點(diǎn)以及上下兩層的 18 個(gè)像素點(diǎn), 共 26 個(gè)像素點(diǎn)進(jìn)行比較. 如果一像素點(diǎn)大于或小于鄰近的 26 個(gè)像素點(diǎn)的時(shí)候, 就成為了極值點(diǎn).

SIFT 算法

SIFT (Scale Invariant Feature Transform), 即尺度不變特征變換匹配算法. SIFT 算法對(duì)于旋轉(zhuǎn)和尺度具有不變性.

函數(shù)

實(shí)例化 SHIFT 算法:

cv2.SIFT_create()

獲取特征點(diǎn):

sift.detect(img_gray, None)

繪制特征點(diǎn):

cv2.drawKeypoints(image, keypoints, outImage, color=None, flags=None)
  • image: 輸入圖像
  • keypoints: 特征點(diǎn)
  • outImage: 輸出圖像

將特征點(diǎn)轉(zhuǎn)換為128 維的向量:

sift.compute(img, kp)

實(shí)戰(zhàn)

例子:

import numpy as np
import cv2
# 讀取圖片
img = cv2.imread("face.jpg")
key_points = img.copy()
# 實(shí)例化SIFT算法
sift = cv2.SIFT_create()
# 得到特征點(diǎn)
kp = sift.detect(img, None)
print(np.array(kp).shape)
# 繪制特征點(diǎn)
cv2.drawKeypoints(img, kp, key_points)
# 圖片展示
cv2.imshow("key points", key_points)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 保存圖片
cv2.imwrite("key_points.jpg", key_points)
# 計(jì)算特征
kp, des = sift.compute(img, kp)
# 調(diào)試輸出
print(des.shape)
print(des[0])

輸出結(jié)果:

(2183,)
(2183, 128)
[ 9. 18. 1. 0. 0. 0. 10. 8. 11. 18. 7. 34. 37. 14.
31. 11. 15. 6. 33. 50. 26. 9. 8. 10. 2. 1. 77. 94.
72. 17. 2. 5. 20. 44. 4. 1. 0. 0. 0. 0. 37. 63.
34. 128. 53. 4. 1. 1. 144. 11. 8. 56. 45. 25. 9. 63.
20. 1. 5. 22. 144. 144. 8. 18. 16. 3. 0. 0. 0. 0.
0. 2. 49. 7. 2. 17. 80. 35. 0. 9. 144. 39. 1. 5.
44. 19. 1. 12. 47. 9. 0. 0. 144. 126. 1. 2. 8. 0.
0. 0. 0. 0. 0. 1. 34. 2. 0. 0. 60. 25. 0. 5.
144. 38. 0. 0. 39. 14. 0. 2. 61. 13. 0. 0. 144. 50.
0. 0.]

到此這篇關(guān)于OpenCV半小時(shí)掌握基本操作之SIFT算法的文章就介紹到這了,更多相關(guān)OpenCV SIFT內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部