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位通道】,图像效果较好。
在这里插入图片描述

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