5

私の調査によると、Canny Edge Detector は画像のエッジを検出するのに非常に便利です。私はそれに多くの努力を払った後、OpenCV関数がそれを行うことができることを発見しました.

    Imgproc.Canny(Mat image, Mat edges, double threshold1, double threshold2)

しかし、低しきい値と高しきい値については、画像によってしきい値が異なることがわかっているので、異なる画像に応じて低しきい値と高しきい値を自動的に割り当てることができる高速適応しきい値方法があるかどうかを知ることができますか?

4

2 に答える 2

5

これは比較的簡単です。この件に関するこの古いSO投稿をチェックしてください。

手っ取り早い方法は、現在の画像の平均と標準偏差を計算し、画像に+/-1標準偏差を適用することです。

C++の例は次のようになります。

Mat img = ...;
Scalar mu, sigma;
meanStdDev(img, mu, sigma);

Mat edges;
Canny(img, edges, mu.val[0] - sigma.val[0], mu.val[0] + sigma.val[0]);

別の方法は、画像の中央値を計算し、中央値の上下の比率をターゲットにすることです(たとえば、0.66*medianValue1.33*medianValue

お役に立てば幸いです。

于 2012-10-03T00:10:09.260 に答える
3

Opencvには適応しきい値機能があります。OpenCV4Androidでは、次のようになります。

Imgproc.adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C);

例:

Imgproc.adaptiveThreshold(mInput, mInput, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 15, 4);

パラメータの選択方法については、ドキュメントを読んで詳細を確認する必要があります。各画像に適切なしきい値を選択することは、まったく別の問題です。

于 2012-10-04T09:30:15.633 に答える