3

私は墓地の画像で近似セグメンテーションを行う方法を見つけようとしています(文化シーンのCBIRのコンテキストで-しかし、それはトピックではありません)。これまでのところ、私はこの戦略を使用しています:

  • 画像を 2 回ぼかす (実験結果)
  • Canny-Edge-Detector を適用する
  • 輪郭を見つける

    int main(int argc, const char* argv[]) {
    
    cout << "Starting " << endl;
    Mat sourceImage;
    sourceImage = imread("singlesegmentation/DSCN5204.JPG",
            CV_LOAD_IMAGE_COLOR);
    
    if (!sourceImage.data) {
        cout << "No Image found." << endl;
        return -1;
    }
    
    cv::Mat blurred = imagePro::blurrNtimes(2, sourceImage);
    cv::Mat target = edged::applyCanny(blurred);
    cout << "Canny applied " << endl;
    
    vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;
    cv::Point offset;
    offset.x = sourceImage.rows / 2;
    offset.y = sourceImage.cols / 2;
    cv::findContours(target, contours, hierarchy, CV_RETR_TREE ,
            CV_CHAIN_APPROX_SIMPLE, offset);
    cout << "Contours applied " << endl;
    
    int idx = 0;
    for (; idx >= 0; idx = hierarchy[idx][0]) {
        Scalar color(rand() & 255, rand() & 255, rand() & 255);
        drawContours(target, contours, idx, color, CV_FILLED, 8, hierarchy);
    }
    cout << "Lines applied " << endl;
    
    cv::namedWindow("Contour", CV_WINDOW_NORMAL);
    cv::imshow("Contour", target);
    cv::waitKey(0);
    
    return 0;
    

    }

名前空間「imagePro」および「edged」には、画像をぼかしてさらに処理するための opencv の単純なコードが含まれています。コードは機能します。ここに例の写真があります: 墓石の等高線図 しかし今、私は画像をセグメント化する考えがありません. 長方形の石の内側から外側に行きたいのですが、線を見つけたら座標を覚えてから内容を切り取りたいです。アイデアやヒントがあればよろしくお願いします!

4

1 に答える 1

2

ハフ変換 (cv::HoughLinesP) を使用してみてください。チュートリアルの例を参照してくださいhttp://docs.opencv.org/modules/imgproc/doc/feature_detection.html

写真内の石の座標を見つけるには、ハフ変換で見つかった線の交点を計算する必要があります。同様のユースケースで、Gaussian-Blur に続いて Laplace-Transformation (canny-edge の代わりに) を使用しました。

于 2012-12-06T10:45:16.530 に答える