web-dev-qa-db-ja.com

OpenCV:暗い背景の四角を検出

現在私は動く物体のオプティカルフローを計算しようとしています。特にオブジェクトは、円形のノブの周りにある四角形です。

The red outlines are where you should see the squares

これが私が処理しようとしているバニラの画像です: Normal image. Check the image with the red squares to see where the squares I wish to detect are

私の懸念は、右下のストリップについてです。 Canny Edge検出またはGoodFeaturesToTrackを試した場合、2つの正方形は通常検出できません。私は現在、カーネルとしきい値をシャープにしてから、形態学的変換を行って輪郭領域を見つけようとしています。ただし、しきい値を設定すると、次の結果が得られます。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt


filename = 'images/Test21_1.tif'


image = cv.imread(filename)

kernel = [ [0, -1, 0], [-1, 5, -1], [0, -1, 0] ] #sharpen kernel I got from wikipedia

kernel = np.array(kernel)
dst = cv.filter2D(image, -1, kernel)
ret, thresh = cv.threshold(dst, 80, 150, cv.THRESH_BINARY_INV)

plt.subplot(121),plt.imshow(image),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(thresh),plt.title('Threshold')
plt.xticks([]), plt.yticks([])
plt.show()

result from my code with thresholding

その正方形を認識できるようにするためにopenCVで何ができるかと思っていました。これらの四角は動画内で動くオブジェクトであり、オプティカルフローの計算に使用したいと思います。現在、機能を検出するためにPyTorch CNNを使用することを検討しています。トレーニング/テストデータセットの画像に手動でラベルを付けますが、少々やり過ぎかもしれません。お時間をいただきありがとうございます。

5
Ammar Hoque

問題は、右下の正方形の近くのローカルコントラストが悪いことです。 CLAHE(コントラスト制限適応ヒストグラムイコライゼーション)を使用してみてください。

# improving local contrast
GRID_SIZE = 20
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(GRID_SIZE,GRID_SIZE))
image = clahe.apply(image)

次に、アルゴリズムを使用して正方形を検出してみてください。

1
the23Effect