嵌入视频5

 

Fundamentals of Embedded Video Processing (Part 5 of a 5-part series)

嵌入式视频处理基本原理(第5部分,共5部分)

 

By David Katz and Rick Gentile, ADI公司

 

In this article, the last in a five-part series, we’ll take a look at a sample video application, touching on some of the major processing blocks involved.   

本文是5部分系列文章的最后一部分。在本文中,我们将考察一个视频应用示例,就此探讨一些所涉及的主要的处理模块。

 

Let’s walk through the system of Figure 1 to illustrate some fundamental video processing steps present in various combinations in an embedded video application. In the diagram, an interlaced-scan CMOS sensor sends a 4:2:2 YCbCr video stream through the processor’s video port, at which point it is deinterlaced and scan-rate converted.  Then it passes through some computational algorithm(s) and is prepared for output to an LCD panel.  This preparation involves chroma resampling, gamma correction, color conversion, scaling, blending with graphics, and packing into the appropriate output format for display on the LCD panel.  Note that this system is only provided as an example, and not all of these components are necessary in a given system.  Additionally, these steps may occur in different order than shown here.  

让我们对图1所示的系统进行一番游历,以之向读者展示,在嵌入式视频应用中,某些基本的视频处理步骤是如何形成不同的组合的。在该图中,一个隔行扫描的CMOS传感器通过处理器的视频端口发送一个4:2:2 YCbCr视频流,此时它完成了去隔行操作及扫描速率转换。它随后接受某些计算算法的处理,为输出到LCD平板显示做好准备。这种准备过程涉及色度的再采样,Gamma校正、颜色转换、缩放、与图形的混合,然后封装为恰当的输出格式,以方便在LCD平板上的显示。请注意,该系统仅是一个示例性的,一个特定系统并不需要配备上述所有这些元部件。此外,这些步骤也可以以不同于此处的顺序来执行。

 

 

Figure 1: Example flow of camera input to LCD output, with processing stages in-between   

1   摄像机输入到LCD输出的数据流示例,包括了位于其间的各处理阶段。   

Sensor——传感器,Video Port——视频端口,Deinterlacing——去隔行,Scan Rate Conversion——扫描速率转换,Media Processor——媒体处理器,Pixel Processing——像素处理,Chroma Resample——色度信号的再采样。Gamma CorrectionYCrCb to RGB Conversion——Gamma校正,YCrCbRGB的转换,Scaling——缩放,Display Processing——显示处理,Output to RGB LCD Panel——输出到RGB LCD平板。

 

Deinterlacing   

去隔行

When taking video source data from a camera that outputs interlaced NTSC data, it’s often necessary to deinterlace it so that the odd and even lines are interleaved in memory, instead of being located in two separate field buffers. Deinterlacing is not only needed for efficient block-based video processing, but also for displaying interlaced video in progressive format (for instance, on an LCD panel). There are many ways to deinterlace, including line doubling, line averaging, median filtering, and motion compensation.   

将视频源数据从一个输出隔行NTSC数据的摄像机处取出时,往往需要对其进行去隔行处理,这样奇数行和偶数行将交织排列在存储中,而不是分别位于两个分离的视场缓冲区中。去隔行不仅仅是高效率的、基于块的视频处理所需要的,而且也是在逐行扫描格式中显示隔行视频所必需的(例如在一个LCD平板上)。去隔行处理有多种方法,包括行倍增、行平均、中值滤波和运动补偿

 

Scan Rate Conversion   

扫描速率的转换

Once the video has been deinterlaced, a scan-rate conversion process may be necessary, in order to insure that the input frame rate matches the output display refresh rate.  In order to equalize the two, fields may need to be dropped or duplicated.  Of course, as with deinterlacing, some sort of filtering is preferable in order to smooth out high-frequency artifacts caused by creating abrupt frame transitions.   

一旦视频完成了去隔行化,就有必要进行扫描速率的转换,以确保输入的帧速率与输出显示的刷新速率相匹配。为了实现两者的均衡化,可能需要丢弃场或者复制场。当然,与去隔行化类似的是,最好采用某种形式的滤波,以便消除由于造成突然的帧切换而出现的、高频的人为干扰。

 

A special case of frame rate conversion that’s employed to convert a 24 frame/sec stream (common for 35 mm and 70 mm movie recordings) to the 30 frame/sec required by NTSC video is 3:2 pulldown.  For instance, motion pictures recorded at 24 fps would run 25% faster (=30/24) if each film frame is used only once in an NTSC video system.  Therefore, 3:2 pulldown was conceived to adapt the 24 fps stream into a 30 fps video sequence.  It does so by repeating frames in a certain periodic pattern, shown in Figure 2. 

帧速率转换的一个具体情况,即将一个24帧/s的视频流(通常是对应着35mm和70mm的电影录制),转换为30/s的视频流,满足NTSC视频要求,这属于3:2 下拉(pulldown)。例如,如果每个胶片(帧)在NTSC视频系统中只被用到一次,则以24fps记录的电影的运动速度将提高25%(=30/24)。于是,3:2下拉被认为是一种让24fps视频流转换为30fps的视频序列的转换过程。它是通过以一定的周期化的样式重复各帧来实现的,如图2所示。

 

 

Figure 2: 3:2 pulldown frame repetition pattern

2:   3:2下拉帧重复模式

 

3:2  Pulldown and Frame Rate  Conversion—— 3:2下拉和帧速率转换

24fps逐行电影),Video field 30fps60 fields per second)——视频场,30fps(每秒60场),Field——场,Frame——帧

 

 

Pixel Processing   

像素处理

As we discussed above, there are lots of video algorithms in common use, and they’re stratified into spatial and temporal classifications.  One particularly common video operator is the two-dimensional (2D) convolution kernel, which is used for many different forms of image filtering. 

正如我们上面曾讨论过的那样,许多视频算法得到了广泛应用,它们可以被划分为空间和时间方面的诸多类别。一个极为常见的视频算子是二维(2D)卷积内核,它已经用于多种不同形式的图像滤波。

 

2D convolution   

2D卷积

 

Since a video stream is really an image sequence moving at a specified rate, image filters need to operate fast enough to keep up with the succession of input images.  Thus, it is imperative that image filter kernels be optimized for execution in the lowest possible number of processor cycles.  This can be illustrated by examining a simple image filter set based on two-dimensional convolution.   

既然一个视频流事实上是一路以特定速率移动的图像序列,图像滤波器需要以足够快的速度运行,以跟上图像连续不断的输入。于是,重要的是,图像滤波器内核必须被优化,从而在尽可能少的处理器周期内完成。这可以通过考察基于2维卷积的简单图像滤波器组来予以演示说明。

 

Convolution is one of the fundamental operations in image processing.  In a two-dimensional convolution, the calculation performed for a given pixel is a weighted sum of intensity values from pixels in its immediate neighborhood.  Since the neighborhood of a mask is centered on a given pixel, the mask usually has odd dimensions.  The mask size is typically small relative to the image, and a 3x3 mask is a common choice, because it is computationally reasonable on a per-pixel basis, but large enough to detect edges in an image.  However, it should be noted that 5x5, 7x7 and beyond are also widely used.  Camera image pipes, for example, can employ 11x11 (and larger!) kernels for extremely complex filtering operations.   

卷积是图像处理中的基本操作。在二维卷积中,针对特定像素执行的计算是在其附近的像素点的亮度值的加权和。因为掩膜的周围都是以特定像素为中心的,故掩膜往往具有奇数次阶数。相对于图像而言,掩膜尺寸一般很小,人们通常选择3×3掩膜,因为从逐个像素的角度出发,它在计算方面是合理的,同时足够大以能检测出图像的边缘。不过,应该指出的是5×57×7,甚至更多的像素组合,也得到了广泛应用。例如,摄像机的图像流水可以采用11×11(甚至更大的内核),以便执行极为复杂的滤波操作的。)

 

The basic structure of the 3x3 kernel is shown in Figure 3a. As an example, the output of the convolution process for a pixel at row 20, column 10 in an image would be:  

3a示出了3×3内核的基本结构。作为例子,对一幅图像上第 20行、第10列上的一个像素点的卷积运算过程的输出应该是:

Out(20,10)=A*(19,9)+B*(19,10)+C*(19,11)+D*(20,9)+E*(20,10)+F*(20,11)+G*(21,9)+H*(21,10)+I*(21,11)

 

Figure 3: The 3x3 Convolution mask and how it can be used

3: 3×3卷积掩膜及其使用方法

图中(a3×3卷积内核,(bDelta;(c)边缘检测;(d)平滑化;(e)边缘增强。

 

It is important to choose coefficients in a way that aids computation.  For instance, scale factors that are powers of 2 (including fractions) are preferred because multiplications can then be replaced by simple shift operations.   

应当以一种对计算有帮助作用的方式来选择系数。例如,是2的幂次(包括分数)的缩放因子是首选方法,这样乘法就可以被替换为简单的移位操作。

 

Figures 3b-e shows several useful 3x3 kernels, each of which is explained briefly below.

3b-e示出了几种有用的3×3内核,其中每一种在下面都将予以简要的讲解。

 

The Delta Function shown in Figure 3b is among the simplest image manipulations, passing the current pixel through without modification.    

3b中的Delta函数是最简单的图像处理方式中的一种,可以让当前的像素通过而无需修改。

 

Figure 3c shows 2 popular forms of an edge detection mask.  The first one detects vertical edges, while the second one detects horizontal edges.  High output values correspond to higher degrees of edge presence.   

3c示出了2种最常用的边缘检测掩膜形式。其中第一种用于检测垂直边缘,而第二种则检测水平边缘。高输出值对应着边缘存在的程度更高。

 

The kernel in Figure 3d is a smoothing filter. It performs an average of the 8 surrounding pixels and places the result at the current pixel location.  This has the result of “smoothing,” or low-pass filtering, the image.   

3d的内核是一种平滑滤波器。它可以执行对周围的8个像素进行平均化处理,并将结果放置到当前的像素位置上。这一操作的结果是图像的“平滑化”或者低通滤波。

 

The filter in Figure 3e is known as an “unsharp masking” operator.  It can be considered as producing an edge-enhanced image by subtracting from the current pixel a smoothed version of itself (constructed by averaging the 8 surrounding pixels).  

3e的滤波器被称为一个“非尖锐的掩膜算子。”它被视为一种能产生边缘增强图像的手段,方法是从当前的像素中减去其自身经过平滑化的版本(通过对周围的8个像素的平均来获得)。

 

Dealing with Image Boundaries    

图像边界的处理

 

What happens when a function like 2D convolution operates on pixels near an image’s border regions?  To properly perform pixel filtering requires pixel information “outside” these boundaries.   There are a couple of remedies for this situation.  The simplest is just to ignore these edge regions.  That is, consider that a 5x5 convolution kernel needs 2 pixels to the left, top, bottom and right of the current pixel in order to perform properly.  Therefore, why not just shave 2 rows off of the image in each direction, so as to guarantee that the kernel will always act on real data?   Of course, this isn’t always an ideal approach, since it throws out real image data.  Also, in cases where filters are strung together to create more complex pixel manipulations, this scheme will continually narrow the input image with every new filter stage that executes.   

当一个诸如2D卷积的函数对图像边界附近的像素点进行操作时会发生什么情况?为了恰当地执行像素滤波,就需要这些边界“之外”的像素信息。出现这一情况,可以有两种补救方式。最简单的一种是,干脆忽略这些边缘区。例如,假定一个5×5的卷积内核需要分别选取当前像素的左、右、上、下的各2个像素,以保证运算的正常进行。于是,为何不在每个方向上删去2行,这样就可以保证该内核能始终对真实数据进行处理。当然,这并不始终是一种理想的方法,因为它丢弃了实际的图像数据。此外,当将滤波器串联起来,以形成更为复杂的像素处理能力时,随着每个新增加的滤波器级被执行,该方法将不断让输入图像幅面变窄。

 

Other popular ways of handling the image boundary quandary are to duplicate rows and/or columns of pixels, or to wrap around from the left (top) edge back to the previous right (bottom) edge.  While these might be easy to implement in practice, they create data that didn’t exist before, and therefore they corrupt filtering results to some extent. 

处理图像在边界上出现的难题时,常用的其它方法是:复制多行和/或多列像素,或者从左边缘(顶)绕回前一图像的右(底)边缘上。虽然这在实践中可能易于实施,但它们也产生了此前并不存在的数据,因此在某种程度上会破坏滤波效果。 

 

Perhaps the most straightforward, and least damaging, method for dealing with image boundaries is to consider everything that lies outside of the actual image to be zero-valued, or black.  Although this scheme, too, distorts filtering results, it is not as invasive as creating lines of potentially random non-zero-valued pixels.  

也许,最直接的、也是破坏最小的图像边界处理方法,是将处于实际图像之外的一切像素视为0值,或者说黑点。虽然这一方案也会造成滤波结果的失真,但它的侵入性并不像产生潜在随机的非0值像素的像素行时那么大。

 

Chroma Resampling and Color Conversion  

色度再采样和颜色的转换

Ultimately, the data stream in our example needs to be converted to RGB space. We already discussed earlier how to convert between 4:4:4 YCbCr and RGB spaces, via a 3x3 matrix multiplication. However, up to this point, our pixel values are still in 4:2:2 YCbCr space. Therefore, we need to resample the chroma values to achieve a 4:4:4 format. Then the transformation to RGB will be straightforward, as we’ve already seen.  

我们的示例中的数据流最终需要转换到RGB空间中。我们在前面已经讨论了如何借助一个3×3的矩阵乘法在4:4:4 YCbCr 和 RGB空间之间进行相互转换。不过,到目前为止,我们的像素值依然处于4:2:2 YCbCr空间中。因此,我们需要对色度值进行再采样,以达到4:4:4的格式。接下来,到RGB的转换将是直接  了当 的,正如我们前面看到的那样。

 

Resampling from 4:2:2 to 4:4:4 involves interpolating Cb and Cr values for those Y samples that are missing one of these components. A clear-cut way to resample is to interpolate the missing chroma values from their nearest neighbors by simple averaging. That is, a missing Cb value at a pixel site would be replaced by the average of the nearest two Cb values. Higher-order filtering might be necessary for some applications, but this simplified approach is often sufficient.  Another approach is to replicate the chrominance values of neighboring pixels for those values that are missing in the current pixel’s representation.  

4:2:2 通过再采样转换4:4:4格式,需要从那些缺乏CbCr分量之一的Y样本中插值出CbCr。一个简洁的再采样方法是从最邻近的像素上借助简单的平均化方法插值出缺失的色度值。也就是说,在一个像素点上缺失的Cb值将为最接近的2Cb值的平均值所取代。某些应用还需要更高阶的滤波器,但这一简化的方法往往也已经够用了。另一种方法是对邻近的像素点的色度值进行复制,以得到这些在当前像素表示中缺失的量值。

 

In general, conversions from 4:1:1 space to 4:2:2 or 4:4:4 formats involves only a one-dimensional filter (with tap values and quantities consistent with the level of filtering desired).  However, resampling from 4:2:0 format into 4:2:2 or 4:4:4 format involves vertical sampling as well, necessitating a two-dimensional convolution kernel.  

一般来说,从4:1:1 空间到4:2:2 或者4:4:4格式的转换只需用到一个一维的滤波器(tap值和数量应与所希望的滤波水平相一致)。不过,从4:2:0 格式再采样为 4:2:2 或者 4:4:4格式,则还需要用到垂直采样,于是就有必要采用二维卷积内核。

 

Because chroma resampling and YCbCràRGB conversion are both linear operations, it is possible to combine the steps into a single mathematical operation, thus achieving 4:2:2 YCbCràRGB conversion efficiently.   

由于色度的再采样和YCbCràRGB的转换都是线性的运算,有可能将这些步骤组合起来,形成单个数学运算,从而高效率的实现4:2:2 YCbCràRGB的转换

 

 

Scaling and Cropping    

缩放和裁切

Video scaling allows the generation of an output stream whose resolution is different from that of the input format.  Ideally, the fixed scaling requirements (input data resolution, output panel resolution) are known ahead of time, in order to avoid the computational load of arbitrary scaling between input and output streams. 

视频缩放可以生成一路分辨率与输入格式的分辨率不同的输出流。理想情况下,固定缩放的要求(输入数据分辨率,输出平板显示的分辨率)都是事先已知的,以避免在输入和输出流之间进行任意的缩放所带来的计算上的负担。

 

Depending on the application, scaling can be done either upwards or downwards.  It is important to understand the content of the image to be scaled (e.g., the presence of text and thin lines).  Improper scaling can make text unreadable or cause some horizontal lines to disappear in the scaled image.

缩放可以是缩减和放大,具体则取决于应用。清楚待缩放图像的内容(如文字和细线的存在与否)很重要。不恰当的缩放会导致文字不可阅读或者造成缩放后的图像中某些水平线的消失。

 

The easiest method to adjust an input frame size to an output frame that’s smaller is simply to crop the image.  For instance, if the input frame size is 720x480 pixels, and the output is a VGA frame (640x480 pixels), you can drop the first 40 and the last 40 pixels on each line.  The advantage here is that there are no artifacts associated with dropping pixels or duplicating them.  Of course, the disadvantage is that you’d lose 80 pixels (about 11%) of frame content. Sometimes this isn’t too much of an issue, because the leftmost and rightmost extremities of the screen (as well as the top and bottom regions) are often obscured from view by the mechanical enclosure of the display. 

将输入帧尺寸的大小调整为幅面更小的输出帧时,最简单的方法是图像的裁切。例如,如果输入的帧尺寸是720×480像素,输出是VGA 帧(640×480像素),则你可以把每行的前40和后40个像素丢弃。这样做的一个优点是像素的丢失和复制不会造成人为的影响。当然,缺点就是,你将损失帧内80个像素(约11%)的内容。有时,这并不是很大的问题,因为,由于显示器的机械外壳的存在,屏幕的最左侧和最右侧的部分(以及顶部和底部区域),往往成为人们无法看清的地方。

 

If cropping isn’t an option, there are several ways to downsample (reduce pixel and/or line count) or upsample (increase pixel and/or line count) an image that allow tradeoffs between processing complexity and resultant image quality.   

如果无法选用裁切的方法,还可以通过若干种方法来对图像进行下采样(减少像素和/或行的数量)或者上采样(增加像素和/或行的数量),这使得人们可以在处理的复杂程度和相应的图像质量方面做出折衷取舍

 

Increasing or decreasing pixels per row    

增加或减少每行的像素数量

 

One straightforward method of scaling involves either dropping pixels (for downsampling) or duplicating existing pixels (for upsampling).  That is, when scaling down to a lower resolution, some number of pixels on each line (and/or some number of lines per frame) can be thrown away.  While this certainly reduces processing load, the results will yield aliasing and visual artifacts.  

缩放方面所采用的一种直接的方法是丢弃像素(下采样)或者复制现有的像素(上采样)。也就是说,当缩减为一个较低的分辨率时,每条线(和/或每帧中的一定数量的线)的一些像素将被丢弃。这当然会减少处理的负担,但结果是造成了混叠和可见的人为影响。

 

A small step up in complexity uses linear interpolation to improve the image quality.  For example, when scaling down an image, filtering in either the horizontal or vertical direction obtains a new output pixel, which then replaces the pixels used during the interpolation process.  As with the previous technique, information is still thrown away, and again artifacts and aliasing will be present.   

只令复杂程度有少量上升的方法,是利用线性内插法来改进图像质量。例如,在缩减一幅图像时,在水平和垂直方向上的滤波可以获得一个新的输出像素点,该像素随后取代了在插值过程中所用的像素点。与前述技术类似的是,信息仍然会被丢弃,依然会出现人为和混叠问题。

 

If the image quality is paramount, there are other ways to perform scaling without reducing the quality.  These methods strive to maintain the high frequency content of the image consistent with the horizontal and vertical scaling, while reducing the effects of aliasing. For example, assume an image is to be scaled by a factor of Y:X. To accomplish this scaling, the image could be upsampled (“interpolated”) by a factor of Y, filtered to eliminate aliasing, and then downsampled (“decimated”) by a factor of X. In practice, these 2 sampling processes can be combined into a single multirate filter.  

如果图像品质极为重要的话,还有其它方法可在不降低品质的前提下实现缩放。这些方法都是努力维持图像的高频分量,使之在水平和垂直缩放中保持一致,同时减少混叠的影响。例如,假定要求对一幅图像以Y:X为比例因子来缩放。为了达到这一目标,图像可以Y为因数进行上采样(“插值”),通过滤波以防止混叠,然后以比例因子X进行下采样(“抽样滤波”)。在实践中,这2个采样过程可以组合成为单个多比例滤波器。

 

Increasing or Reducing lines per frame   

增加和减少每帧的行数

 

The guidelines for increasing or reducing the number of pixels per row generally extend to modifying the number of lines per frame of an image.  For example, throwing out every other line (or one entire interlaced field) provides a quick method of reducing vertical resolution.  However, as we’ve mentioned above, some sort of vertical filtering is necessary whenever removing or duplicating lines, because these processes introduce artifacts into the image.  The same filter strategies apply here: simple vertical averaging, higher-order FIR filters, or multirate filters to scale vertically to an exact ratio.  

增加或者减少每行的像素点的指导原则,一般可以用于一幅图像每帧的行数的修改。例如每隔一行丢弃一行数据(或者整个隔行场)提供了一种可减少垂直分辨率的快速方法。然而,正如我们以前提到过的那样,在丢弃或者复制行时,应当采用某种垂直滤波方案,因为这些处理会在图像中引入人为影响。这里可以采用的同一种滤波策略是:简单垂直平均、更高阶的FIR滤波器或者多比例滤波器,以便垂直方向上得到一个确切的缩放比率。

 

Display Processing

显示处理

 

Alpha Blending       

Alpha混合

Often it is necessary to combine two image and/or video buffers prior to display.  A practical example of this is overlaying of icons like signal strength and battery level indicators onto a cellular phone’s graphics display. An example involving two video streams is picture-in-picture functionality.  

在显示之前往往需要将两种图像和/或视频缓冲区组合起来。这样做的一个实用化的例子是蜂窝手机的图形显示上叠加的图标,如信号强度和电池电力指示等。一个涉及两路视频流的示例是:画中画功能。

 

When combining two streams, you need to decide which stream “wins” in places where content overlaps. This is where alpha blending comes in.  It defines a variable alpha (a) that indicates a “transparency factor” between an overlay stream and a background stream as follows:   

将两路流组合起来后,你需要决定在这些内容重叠的地方,那路流将“胜出”。这就是Alpha混合发挥作用的地方。我们可以定义一个变量(a),它表示出如下在叠放流和背景流之间的“透明因子”,

 

Output value = a (foreground pixel value) + (1-a)(background pixel value)

输出值=a(前景显示的像素值)+(1-a)(背景像素值)。

 

 

As the equation shows, an a value of 0 results in a completely transparent overlay, whereas a value of 1 results in a completely opaque overlay that disregards the background image entirely.  

该方程表明,a值为0时,可以实现完全透明的叠图,a值为1时,则叠图完全是不透明的,完全不显示相应区域的背景图像。

 

a is sometimes sent as a separate channel along with the pixel-wise luma and chroma information.  This results in the notation “4:2:2:4,” where the last digit indicates an alpha key that accompanies each 4:2:2 pixel entityAlpha is coded in the same way as the luma component, but often only a few discrete levels of transparency (perhaps 16) are needed for most applications.  Sometimes a video overlay buffer is premultiplied by alpha or premapped via a lookup table, in which case it’s referred to as a “shaped” video buffer. 

a有时通过单独的通道与各像素的亮度和色度一起发送。这就造成了“4:2:2:4”的情形,其中最后一位值是一个伴随着每个4:2:2像素对象的a键。a的编码形式与亮度分量的编码相同,但对于大多数应用来说,常常只需取少数几个透明度的离散级别(也许是16个)即可。有时一个视频叠图缓冲区要预先乘以a,或者预先借助速查表进行映射,在这种情况下,它被称为一个“经过整形的”视频缓冲区。

 

Compositing  

合成操作

The act of compositing involves positioning an overlay buffer inside a larger image buffer.  Common examples are a “Picture-in-Picture” mode on a video display, and placement of graphics icons (like battery and signal strength indicators) over the background image or video. In general, the composition function can take several iterations before the output image is complete.  In other words, there may be many “layers” of graphics and video that combine to generate a composite image.  

在合成操作中,需要定位一个叠图缓冲区到一个对应更大图像的缓冲区中。常见的一个实例是视频显示中的“画中画”模式,以及图形化图标(如电池和信号强度的指示标志)在背景图像或视频中的位置安排。一般来说,合成功能在输出图像完全完成之前尚需若干次反复循环。换句话说,产生一个复合的视频可能需要将“多层”图像和视频叠放起来。

 

Two-dimensional DMA capability is very useful for compositing functions, because it allows the positioning of arbitrarily-sized rectangular buffers inside a larger buffer. One thing to keep in mind is that any image cropping should take place after the composition process, because the positioned overlay might violate any previously cropped boundaries. Of course, an alternative is to ensure that the overlay won’t violate the boundaries in the first place, but this is sometimes asking too much!    

二维的DMA功能对于合成功能来说是非常有用的,因为它容许在更大的缓冲区中定位出任意尺寸的矩形缓冲区。要记住的一点是,任何图像的裁切应该在合成过程之后进行,因为定位后的叠图可能会和此前裁切的边界发生冲突。当然,一个替代方法是确保叠图不至于和边界冲突,但有时这一要求实在可谓过分。

 

Chroma Keying   

色度键控

The term “chroma keying” refers to a process by which a particular color (usually blue or green) in one image is replaced by the content in a second image when the two are composited together.  This provides a convenient way to combine two video images by purposefully tailoring parts of the first image to be replaced by the appropriate sections of the second image.  Chroma keying can be performed in either software or hardware on a media processor.   

“色度键控”一词是指两幅图像合成时,其中一幅图像中的特定颜色(往往是蓝色或者绿色)为另一幅图像中的内容所取代的现象。这提供了一种方便地将两幅视频图像合成起来的方法,其方法是有意识的对第一幅图像进行剪裁,使之为第二幅图像的恰当区域所取代。色度键控可以在媒体处理器上以软件或者硬件形式来实现。

 

 

Output Formatting   

输出格式化

Most color LCD displays targeted for consumer applications (TFT LCDs) have a digital RGB interface.  Each pixel in the display actually has 3 subpixels – one each with Red, Green and Blue filters – that the human eye resolves as a single color pixel. For example, a 320x240 pixel display actually has 960x240 pixel components, accounting for the R, G and B subpixels.  Each subpixel has 8 bits of intensity, thus forming the basis of the common 24-bit color LCD display.  

大多数针对消费类应用的彩色LCD显示(TFT LCD)都带有数字RGB接口。显示中的每个像素实际上都有3子像素——每个都包含红、绿和蓝色滤波器——即人眼可以将其分辨为单色的像素。例如,一个320×240像素的显示事实上具有960×240像素分量,这包含了RGB子像素。每个子像素有8bit的亮度信号,这构成了常见的24bit的彩色LCD显示基础。

 

The three most common configurations use either 8 bits per channel for RGB (RGB888 format), 6 bits per channel (RGB666 format), or 5 bits per channel for R and B, and 6 bits for G (RGB565 format).    

3种最常见的配置中,要么是每个通道使用8bit来表示RGBRGB888格式), 要么是每通道6bit表示(RGB666格式),或者RB每通道用5bit表示,G通道用6bit数据表示(RGB565格式)。

 

RGB888 provides the greatest color clarity of the three.  With a total of 24 bits of resolution, this format provides over 16 million shades of color.  It offers the high resolution and precision needed in high performance applications like LCD TVs.   

在这3种配置中,RGB888提供了最好的色彩清晰度。这种格式总共有24bit的分辨率,可以提供超过1600万种色彩。它为LCD TV等高性能应用提供所需要的高分辨率和精度。

 

The RGB666 format is popular in portable electronics. Providing over 262,000 shades of color, this format has a total of 18 bits of resolution.  However, because the 18-pin (6+6+6) data bus doesn’t conform nicely to 16-bit processor data paths, a popular industry compromise is to use 5 bits each of R and B, and 6 bits of G (5+6+5 = a 16-bit data bus) to connect to a RGB666 panel.  This scenario works well because green is the most visually important color of the three.  The least-significant bits of both Red and Blue are tied at the panel to their respective most-significant bits. This ensures a full dynamic range for each color channel (full intensity down to total black).  

RGB666格式在便携式电子产品中非常流行。这种格式具有总共18bit的分辨率,可以提供262000种色彩。不过由于其采用的18引脚(666)数据总线并不能很好地与16bit处理器数据通道相兼容,在工业上一种常见的折衷方法是,RB通道5bitG通道6bit56516bit总线),以此来实现与RGB666平板的连接。这种情形具有很好的性能,因为在视觉上绿色是3种颜色中最重要的。红色和蓝色通道的最低位连接到平板上对应的最高位上。这确保了每个颜色通道上的全动态范围(全亮一直低至全黑)。

 

 

We hope that this article series has given you a good understanding of the basics involved in embedded video processing.  For a more in-depth discussion on media processing issues, including data flow and media framework analyses, you may wish to refer to this text.   

我们希望本系列文章能让您对嵌入式视频处理的基本原理有一个充分的理解。对于媒体处理方面问题的深入讨论,包括数据流和媒体框架和分析,你可能希望参考这篇文章。

 

 

 

 

你可能感兴趣的:(图像应用,图像处理)