まず、わからない場合は、ndwi とは何かを教えてください。Ndwi は正規化差分水分指数を表します。これは水のグラフィカル インジケータで、値の範囲は [-1 1] です。Ndwi は次のように定義されます。
(Green - NIR) / (Green + NIR)
私は、opencv に基づく単純な海岸線抽出ツールの途中です。私は MATLAB でそれを達成しました。結果は次のように表示されます。
ただし、結果の opencv バージョンはバイナリ化されたように見えます。
プログラムをデバッグすると、ndwi マトリックスの最小値がゼロであることがわかります。これは、-0.8057 である必要があるため、間違っています。次のようにndwi計算(opencvバージョン)を担当するコード:
Mat ndwi = (greenRoi - nirRoi) / (greenRoi + nirRoi);
double min;
double max;
minMaxIdx(ndwi, &min, &max);
Mat adjNDWI;
convertScaleAbs(ndwi, adjNDWI, 255 / max);
ここでの問題は何ですか?正しい ndwi 値を計算するにはどうすればよいですか?
ノート:
greenRoi と nirRoi は次のように作成されます。
Rect rectangle = boundingRect(Mat(testCorners)); //vector<Point2f> testCorners(4);
Mat testImgGreen = imread((LPCSTR)testImgGreenPath, 0);
Mat testImgNir = imread((LPCSTR)testImgNirPath, 0);
Mat greenRoi(testImgGreen, rectangle);
Mat nirRoi(testImgNir, rectangle);