清晰度检测算法有多种,下面是清晰度算法Brenner 的实现
#define coordinate_value(YData,x0,y0,w) (*(YData + x0 + y0 * w))
int brenner_cpu(int x, int y, int w, int h, uint8_t *yData)
{
int x0, y0, x1, y1;
double score = 0;
x0 = 344;
y0 = 108;
x1 = 956;
y1 = 720;
printf("(x0 y0)=(%d,%d),(x1 y1)=(%d,%d)\n", x0, y0, x1, y1);
for(int x = x0;x < x1 - 2;x++){
for(int y = y0;y < y1-2;y++){
int value = coordinate_value(yData,x,(y+2),1280) - coordinate_value(yData,x,y,1280);
printf("%d\n",value);
score += pow(value/ 255.0, 2.0);
}
}
return (int)score;
}
以上代码使用的是yuv420p的图像,1280*720,yData是图像首地址,(x0,y0)(x1,y1)是图像中的上顶点和下顶点,算部分图像的清晰度.
本文详细介绍了Brenner清晰度检测算法的CPU实现,该算法通过计算图像梯度来评估图像清晰度。代码示例展示了如何使用yuv420p图像格式,针对特定区域进行清晰度评分。

9904

被折叠的 条评论
为什么被折叠?



