logo
Loading...

有關 D9 的 SIFT 實作,為什麼RGB Channel 的三張圖片看起來位置、顏色、底圖都一樣呢? - Cupoy

我想請教前輩2個問題:1. 我不知道是不是理解錯誤,雖然可以看出灰階跟 RGB Channel 特徵...

# day 9,sift

有關 D9 的 SIFT 實作,為什麼RGB Channel 的三張圖片看起來位置、顏色、底圖都一樣呢?

2020/10/19 下午 11:05
電腦視覺深度學習討論版
Jim Lo
觀看數:18
回答數:2
收藏數:0
# day 9
sift

我想請教前輩2個問題:

1. 我不知道是不是理解錯誤,雖然可以看出灰階跟 RGB Channel 特徵圖不相同,但是我做出來 RGB Channel 的三張圖片看起來位置、顏色、底圖都一樣,這樣是否是錯誤的?(程式碼在最下面)

2. 為什麼 lena 圖做出來的特徵點看起來一樣大,且沒有方向性?建築這張圖片卻很明顯呢?




# Appendix


```

import numpy as np

import cv2

# !pip install opencv-contrib-python

from matplotlib import pyplot as plt


img = cv2.imread('data/lena.png')


# 轉灰階圖片

# img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


# 建立 SIFT 物件

SIFT_detector_0 = cv2.SIFT_create()

SIFT_detector_1 = cv2.SIFT_create()

SIFT_detector_2 = cv2.SIFT_create()


# 取得 SIFT 關鍵點位置

keypoints_0 = SIFT_detector_0.detect(img[..., 0], None)

keypoints_1 = SIFT_detector_1.detect(img[..., 1], None)

keypoints_2 = SIFT_detector_2.detect(img[..., 2], None)


# 畫圖 + 顯示圖片

img_show_0 = cv2.drawKeypoints(img[..., 0], keypoints_0, img)

img_show_1 = cv2.drawKeypoints(img[..., 1], keypoints_1, img)

img_show_2 = cv2.drawKeypoints(img[..., 2], keypoints_2, img)


img_show = np.hstack((img_show_0, img_show_1, img_show_2))


# plt.figure(dpi=160)

# plt.imshow(cv2.cvtColor(img_show, cv2.COLOR_BGR2RGB))

while True:

    cv2.imshow('SIFT', img_show)

    k = cv2.waitKey(0)

    if k == 27:

        cv2.destroyAllWindows()

        break

```

回答列表

  • 2020/10/23 下午 03:25
    Paul
    贊同數:0
    不贊同數:0
    留言數:0

    特徵點大小和方向性,在cv2.drawKeypoints 加 flag

    img_show_0 = cv2.drawKeypoints(img[..., 0], keypoints_0, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)


    img_show_1 = cv2.drawKeypoints(img[..., 1], keypoints_1, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)


    img_show_2 = cv2.drawKeypoints(img[..., 2], keypoints_2, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)


    至於為何完全一樣,我認為SIFT對顏色並不敏感,只對幾何形狀有興趣

  • 2020/11/27 下午 00:41
    Jeffrey
    贊同數:0
    不贊同數:0
    留言數:0

    1. SIFT 主要是求取局部的極值來做特徵, 對於尺度, 色階(顏色變化), 十分鈍化, 所以, 會發現人像圖變化不大> 2. 建築圖則是因為特徵與背景凸顯在形狀的差異, 3. 可以參照 https://zh.wikipedia.org/zh-tw/%E5%B0%BA%E5%BA%A6%E4%B8%8D%E8%AE%8A%E7%89%B9%E5%BE%B5%E8%BD%89%E6%8F%9B