亚像素算法是图像处理中常用的技术之一,用于提升图像的分辨率和精度。下面是一个亚像素算法的实现:
1.对原始图像进行双线性插值,得到一个2倍分辨率的图像
int BilinearInterpolation(const cv::Mat& src, cv::Mat& dst)
{
dst.create(src.rows*2-1, src.cols*2-1, src.type());
for (int i = 0; i < src.rows; i++)
{
for (int j = 0; j < src.cols; j++)
{
dst.at<cv::Vec3b>(i*2, j*2) = src.at<cv::Vec3b>(i, j);
if (j < src.cols-1)
{
dst.at<cv::Vec3b>(i*2, j*2+1) = (src.at<cv::Vec3b>(i, j)*((j+1)*1.0 - j) + src.at<cv::Vec3b>(i, j+1)*(j+1 - (j*1.0))) / ((j+1) - j);
}
if (i < src.rows-1)
{
dst.at<cv::Vec3b>(i*2+1, j*2) = (src.at<cv::Vec3b>(i, j)*((i+1)*1.0 - i) + src.at<cv::Vec3b>(i+1, j)*(i+1 - (i*1.0))) / ((i+1) - i);