私は白いゲージボードを使用して水位を測定する必要があるプロジェクトに取り組んでいます。現在、私のアプローチは次のとおりです。
- 白いゲージボードをセグメント化します。
- ゲージボードに対して水位を測定します。
しかし、ゲージボードのセグメント化に行き詰まります。光の変化に対して不変である必要があるため、色ベースのセグメンテーションの使用は避けています。そのため、代わりにモルフォロジー演算を使用してエッジを検出します。私はこの画像を持っています:
形態学的操作の結果は有望なようです。白いゲージボードのエッジは他のボードよりもシャープです。しかし、ボードを適切にセグメント化する方法はまだわかりません。ボードをセグメント化するためのアルゴリズムを提案できますか?または、水位を測定するための別のアルゴリズムがあるかどうかを提案してください。
これが私のコードです:
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
int main()
{
cv::Mat src = cv::imread("image.jpg");
if (!src.data)
return -1;
cv::Mat bw;
cv::cvtColor(src, bw, CV_BGR2GRAY);
cv::medianBlur(bw, bw, 3);
cv::Mat dilated, eroded;
cv::dilate(bw, dilated, cv::Mat());
cv::erode(bw, eroded, cv::Mat());
bw = dilated - eroded;
cv::imshow("src", src);
cv::imshow("bw", bw);
cv::waitKey();
return 0;
}
私はC++を使用していますが、Matlab/Mathematicaの他の実装を受け入れています。