現在私は動く物体のオプティカルフローを計算しようとしています。特にオブジェクトは、円形のノブの周りにある四角形です。
私の懸念は、右下のストリップについてです。 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()
その正方形を認識できるようにするためにopenCVで何ができるかと思っていました。これらの四角は動画内で動くオブジェクトであり、オプティカルフローの計算に使用したいと思います。現在、機能を検出するためにPyTorch CNNを使用することを検討しています。トレーニング/テストデータセットの画像に手動でラベルを付けますが、少々やり過ぎかもしれません。お時間をいただきありがとうございます。
問題は、右下の正方形の近くのローカルコントラストが悪いことです。 CLAHE(コントラスト制限適応ヒストグラムイコライゼーション)を使用してみてください。
# improving local contrast
GRID_SIZE = 20
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(GRID_SIZE,GRID_SIZE))
image = clahe.apply(image)
次に、アルゴリズムを使用して正方形を検出してみてください。