双线性插值伪影

时间:2018-04-29 12:46:39

标签: c++ opencv image-processing interpolation bilinear-interpolation

我尝试使用openCv功能在c ++中旋转后进行双线性插值,但不使用在openCv中实现的双线性插值。

在我的输出图像中,总会有一些瑕疵(完全不同的像素颜色)。

我正在使用这个公式:

双线性插值公式

我没有使用math.h中的ceil,而是使用openCV中的cvRound()。

所以我的意见是: 的海伦

我的工件输出是:

旋转和插值后

Lena

我对所有RGB值使用该公式,因此对于B看起来:

int l = cvRound(xn);
int k = cvRound(yn);

float a = xn-l;
float b = yn-k;

uchar B = (1-a)*(1-b)*src.at<cv::Vec3b>(l,k).val[0]+a*(1-b)*src.at<cv::Vec3b>(l+1,k).val[0]+b*(1-a)*src.at<cv::Vec3b>(l,k+1).val[0]+a*b*src.at<cv::Vec3b>(l+1,k+1).val[0];

xn和yn是转换MAT中的坐标,它们是浮点数。

正如你所看到的那样,大部分输出图像都应该按原样计算,但不知怎的,它们很少有工件,这让我毫无意义。我需要摆脱他们。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:4)

您看到的异常绿色像素必须由绿色通道中的下溢(-1变为+255)引起。

在分配给B之前,尝试将插值表达式钳制到[0,255]。