佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > OpenCV半小時(shí)掌握基本操作之SIFT算法

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

熱門標(biāo)簽:美圖手機(jī) 智能手機(jī) 呼叫中心市場(chǎng)需求 網(wǎng)站文章發(fā)布 鐵路電話系統(tǒng) 檢查注冊(cè)表項(xiàng) 銀行業(yè)務(wù) 服務(wù)器配置

概述

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

圖像尺度空間

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

多分辨率金字塔

使用高斯模糊, 不同的 σ 決定了圖像的平滑程度, 越大的 σ 值對(duì)應(yīng)的圖像越模糊. 通過(guò)使用不同的 σ 我們可以實(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")

# 畫(huà)圖
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)建起來(lái)的. 通過(guò)對(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)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python利用opencv實(shí)現(xiàn)SIFT特征提取與匹配
  • opencv-python 提取sift特征并匹配的實(shí)例
  • 應(yīng)用OpenCV和Python進(jìn)行SIFT算法的實(shí)現(xiàn)詳解
  • python opencv之SIFT算法示例

標(biāo)簽:樂(lè)山 上海 新疆 滄州 長(zhǎng)治 紅河 河南 沈陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《OpenCV半小時(shí)掌握基本操作之SIFT算法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    卓尼县| 彩票| 怀集县| 德保县| 剑河县| 连州市| 灌云县| 井陉县| 赤峰市| 龙里县| 兰西县| 德钦县| 信宜市| 太白县| 钟祥市| 德保县| 张家界市| 贵阳市| 枞阳县| 旬阳县| 布尔津县| 金沙县| 秦安县| 通辽市| 和顺县| 阿克| 湘潭县| 临朐县| 汉阴县| 江陵县| 前郭尔| 彰化市| 滨州市| 和龙市| 赞皇县| 崇左市| 东城区| 慈溪市| 衡阳市| 甘德县| 民和|