0

nxnタイトルで説明したように、グレースケール画像を反復処理し、カーネルを作成してピクセル値をスキャンする最良の方法を見つけようとしています。主な目的は、最小/最大フィルターを作成し、それをカスタムの中央値フィルターに拡張することです。

私はすでに 3x3 用のハードコーディングされたソリューションを作成しましたが、大量のコードがあり、これを 5x5 に拡張するのは骨の折れるプロセスです。

OpenCVにそのようなタスクを管理できる機能があるかどうか疑問に思っていましたか?

minMaxLocを矩形マスクで使用できますか?

編集:私が基本的に欲しいのは次のとおりです

  1. image長方形を からにコピーしsubImageます。
  2. のピクセルの最小値または最大値を決定/分析しsubImageます。

編集(テスト):

    for(int y = 1; y < image.rows - 1; y++) {
        for(int x = 1; x < image.cols - 1; x++) {
            if(int(image.at<uchar>(x,y)) == 0) {
                double maxValue = 0;
                Rect roi(y-1,x-1,3,3);
                Mat image_roi = image(roi);
                minMaxLoc(image_roi, NULL, &maxValue, NULL, NULL);
                if (maxValue > 0) {
                    image_new.at<uchar>(x,y) = uchar(maxValue);
                }
            }
        }
    }
4

1 に答える 1

1

C++ API で四角形の関心領域を定義するのは非常に簡単です。

cv::Mat subImage = image(cv::Rect(upper_left_x,upper_left_y,ROI_width,ROI_height));

必要に応じて処理できるようにするsubImage必要があります。

必要なものがメディアン フィルターである場合、OpenCV にもその機能があります。

cv::medianBlur(image, outputImage, n);

nxn フィルターの場合。この関数の詳細なドキュメントは、上記の最初のコメントのリンクにあります。

于 2012-10-24T21:07:46.643 に答える