簡體   English   中英

如何在 OpenCV 中的特征提取過程中忽略部分圖像?

[英]How to ignore part of a image during feature extraction in OpenCV?

我正在嘗試從矩形圖像中提取特征。 但我想忽略圖像的某​​些部分,這樣就不會從圖像內部的這些區域中提取任何特征。 我可以想到兩種方法。

a) 從整個圖像中獲取特征並使用關鍵點丟棄位於被忽略區域內的特征。 但是這種方法不是首選,因為我限制了從圖像中提取的最大特征數,稍后丟棄將無助於獲得恆定數量的特征。

b) 將圖像該部分的像素設為 numpy 零。 但我認為 SIFT/ORB 或其他特征提取算法可能會將其檢測為黑色矩形,並在這個黑色框的邊緣部分錯誤地創建特征。 雖然不確定這一點。

有人可以確認問題陳述的最佳方法嗎?

您有兩種檢測圖像選定部分特征的方法。

方法一:

通過選擇投資回報率。 這種方法的缺點是計算出的特征點將具有 ROI 的坐標。 例如,如果您有一張尺寸為width = 400, height = 400 ,您選擇了一個暗度為x=0, y=0, width=100, height=100的 ROI,關鍵點將具有根據 ROI 暗度的坐標. 您必須手動將它們映射回原始圖像大小。

img = cv2.imread("image.jpg", -1)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# select and ROI with user specified dimensions
roi = gray[50:150,50:150]

sift = cv2.xfeatures2d.SIFT_create()

kp = sift.detect(roi)

img=cv2.drawKeypoints(roi,kp,img)

原創 投資回報率

方法二:

為篩選特征檢測器方法提供掩碼。 掩碼必須是單通道、無符號字符圖像。

img = cv2.imread("image.jpg", -1)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# create a mask image filled with zeros, the size of original image
mask = np.zeros(img.shape[:2], dtype=np.uint8)

# draw your selected ROI on the mask image
cv2.rectangle(mask, (50,50), (150,150), (255), thickness = -1)

sift = cv2.xfeatures2d.SIFT_create()

# provide mask to the detect method
kp = sift.detect(gray,mask)

img=cv2.drawKeypoints(gray,kp,img)

蒙面

這取決於你有多少區域。 對於相對較少的區域,您可以只使用 ROI(感興趣區域)

https://www.learnopencv.com/how-to-select-a-bounding-box-roi-in-opencv-cpp-python/

您可以定義矩形區域並計算每個區域的特征。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM