各ピクセルが 16 ビット符号なし int であり、そのピクセルの深度値を mm 単位で格納する画像を含むデータセットを使用しています。次のようにして、これをグレースケールの深度画像として視覚化しようとしています。
cv::Mat depthImage;
depthImage = cv::imread("coffee_mug_1_1_1_depthcrop.png", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR ); // Read the file
depthImage.convertTo(depthImage, CV_32F); // convert the image data to float type
namedWindow("window");
float max = 0;
for(int i = 0; i < depthImage.rows; i++){
for(int j = 0; j < depthImage.cols; j++){
if(depthImage.at<float>(i,j) > max){
max = depthImage.at<float>(i,j);
}
}
}
cout << max << endl;
float divisor = max / 255.0;
cout << divisor << endl;
for(int i = 0; i < depthImage.rows; i++){
for(int j = 0; j < depthImage.cols; j++){
cout << depthImage.at<float>(i,j) << ", ";
max = depthImage.at<float>(i,j) /= divisor;
cout << depthImage.at<float>(i,j) << endl;
}
}
imshow("window", depthImage);
waitKey(0);
ただし、2 色しか表示されていません。これは、すべての値が互いに近接しているためです。つまり、150 ~ 175 の範囲 + 黒で表示される小さな値 (以下を参照) にあります。
これらの小さな深度の違いを強調するためにさまざまなグレーレベルを表示するように、このデータを正規化する方法はありますか?