图像处理——blackfin 533(六)
0赞在之前的博客上已经搞定了图像采集的事情了。现在对图像进行一些处理。
所采集到的图像是YUV4:2:2格式的彩色图像,YUV是一种基本色彩空间,被欧洲的电视系统所采用。其中Y指颜色的明视度,即亮度,而U和V则是指色差,即描述图像色彩及饱和度的属性。人类的眼睛对明亮度的改变要比对色彩的改变要敏感的多。因此对人类而言,Y分量比U、V分量重要,根据人眼的这一特征,在不使用任何复杂算法的前提下。为了简化图像处理过程,也为了节省内存,首先需要对图像进行灰度化处理,也就是把图像转换成灰度图像,从原来的三位矩阵相应变成二维矩阵。
如图1所示,YUV4:2:2就是每个色差信道的抽样率是亮度信道的一半,是一种压缩比为33.3%的取样方式。对非压缩的8比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用4字节内存。
图1
从上图我们很容易发现,YUV4:2:2的重要特性在于它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是灰度图像。因此,我们对YUV格式的彩色图像转换为灰度图像,只需要将图像空间中的Y分量提取出来,即可得到灰度图像。YUV 4:2:2格式灰度化程序流程图如图2所示。
图2 YUV格式图像灰度化程序流程图
关于灰度化的程序:
void UYVY2gray(volatile unsigned short InputFrame[PIXEL_PER_LINE][LINES_PER_FRAME],volatile unsigned char OutputFrame[PIXEL_PER_LINE][LINES_PER_FRAME],unsigned short threshhold)
{
int i=0,j=0;
for(i=0;i<PIXEL_PER_LINE;i++)
{
for(j=0;j<LINES_PER_FRAME;j++)
{
OutputFrame[i][j]= ((InputFrame[i][j]&0xFF00)>>8);
// if(OutputFrame[i][j]<threshhold) OutputFrame[i][j]=0;
// else OutputFrame[i][j]=255;
}
}
}
得到图像:
原图像 灰度化后的图像
图像灰度化的主程序很简单,但是配置很重要,配置和初始化就很费事。主要还是要弄清楚BF533的各个端口。