16位深度的TIF圖像轉8位深度——Matlab標定 一片白

Kinect的深度圖像和紅外圖像都是16位深度,利用Matlab標定時,用了一款老版本的Matlab標定箱,該工具箱能夠實現單目的某一場景下的外參計算,進而可以利用兩個相機與標定板的外參,來計算兩個相機之間的相對位姿。但是老版本有一個問題,16位的TIF圖像讀進去一片白,根本沒法實現標定。所以需要轉成8位的來進行標定

1.代碼方法

主要是利用高位截斷的思想,取16位數據的高八位,作爲8位圖像的數值。但是效果有點不理想,圖像轉換成8位後成雪花狀:
在這裏插入圖片描述

Mat photoGrid::converTIF16to8(Mat input)
{
	Mat result = Mat::zeros(input.rows, input.cols, CV_8UC1);
	for (int i = 0; i < input.rows; i++)
	{
		for (int j = 0; j < input.cols; j++)
		{
			int value = input.at<ushort>(i, j);
			result.at<uchar>(i, j) = value; //16位數據截斷,只留高8位
		}
	}
	return result;
}

二、藉助ps轉化圖像格式

將圖像丟入PS中,如圖:
在這裏插入圖片描述【圖像】→【模式】→【8位通道】,圖像效果較好。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章