Additional features and advantages of the invention will be apparent from the detailed description which follows, taken in conjunction with the accompanying drawings, which together illustrate, by way of example, features of the invention; and, wherein:
a is an illustration of an implementation of a system for correcting pixel intensities for output on a video display that involves logarithmically distributing interpolation table endpoints along a transfer function correction curve in accordance with an embodiment of the present invention.
b is a continuation of the illustration in
Reference will now be made to the exemplary embodiments illustrated, and specific language will be used herein to describe the same. It will nevertheless be understood that no limitation of the scope of the invention is thereby intended.
In one embodiment of the present invention, an interpolation table can be implemented in place of a lookup table. Instead of storing a correction value for each pixel intensity, as is done in a lookup table, a correction curve can be divided into a series of segments 508, as shown in the transfer function correction curve 504 in
Depending on the desired resolution, each curve segment 508 can represent correction values for tens or hundreds of pixel intensities. A second input can include a proportion value. The proportion value can represent a distance through the segment. The proportion value can then be used to estimate a location along the segment curve between the two interpolation table entries (endpoints). The use of an interpolation table substantially reduces the number of stored entries used to obtain a substantially accurate representation of a curve.
However, both the shape of the curve and the resolution of the intensity step size can limit the accuracy of an interpolation table. As an exponential curve approaches an asymptotical limit, the amount of curvature can significantly increase. The increased curvature can reduce the accuracy of an interpolation table for straight line approximations near the increased curvature. Reducing the size of the straight line approximation (increasing the number of interpolation segments) can increase the accuracy. However, zooming in on an asymptotic type curve to display the curve in greater detail can emphasize the amount of curvature as the curve gets ever closer to its asymptotical limit.
For example, a transfer function correction curve 304 is shown in
Additionally, adding enough interpolation segment endpoints in a table to provide reasonably accurate straight line approximations near an asymptote or other large curvatures having a large amount of slope can be a waste of memory for approximations of straighter areas of the curve having a smaller amount of slope, as seen on the right side of
In one embodiment, a method for correcting pixel intensities for output on a video display is depicted in the flow chart in
An additional operation provides distributing the plurality of interpolation segment end points logarithmically over the correction transfer function curve to enable a higher resolution on a first portion of the correction transfer function curve having a greater amount of slope relative to a second portion of the correction transfer function curve having a smaller amount of slope, as shown in block 420. The resolution on the first portion can be exponentially higher than the resolution on the second portion of the curve due to the logarithmic distribution of the interpolation segment endpoints.
Another operation includes determining correction values for a graphic display by interpolating between the logarithmically distributed interpolation segment endpoints, as shown in block 430. As previously stated, an additional input value can include a proportion value that can represent a distance through the segment. The proportion value can then be used to estimate a location along the segment curve between the two interpolation table entries (endpoints). In one embodiment, an interpolation table can include two different types of entries, the interpolation segment endpoints representing locations along the correction curve and segment offset values associated with each of the segment endpoints. The segment offset values can represent a distance between two interpolation segment endpoints. The proportion value can then be multiplied by the segment offset value to provide a relative offset that is a substantially accurate interpolation between two segment endpoints for a specific pixel intensity value.
The interpolation segment endpoints can be logarithmically distributed along the correction curve using a variety of mathematical or graphical techniques. In one embodiment, a desired correction curve similar to those shown in
For a sixteen bit system, the correction curve can be divided into 65,536 pixel correction values, with each correction value representing a correction for pixel intensity. The curve can then be divided into a predetermined number of evenly spaced interpolation segments. For example, the curve can be divided into 16 segments, though any number of segments may be used, depending on the desired accuracy. Each segment endpoint is assigned a value that is proportional or equal to an x axis value of a pixel correction value on the correction curve.
The correction curve representing 2N pixel correction values can then be divided into 2p additional segments, where p is an integer. In one example embodiment, p can be set equal to 1 to divide the correction curve in half. The number of segments in the half of the curve having the greater amount of curvature (greater amount of slope) can be increased by 2p times, or 2 times in this example to provide for 16 segments. The 16 segment half of the correction curve can then be divided again and the number of segments in the half with the greatest amount of slope can again be multiplied by 2p times. The division of the curve into 2p pieces and multiplication of the segments by 2p can be repeated until a desired level of accuracy is provided on the maximally curved section of the correction curve. In other words, the curve can be divided in this manner until the desired resolution is reached in the maximally curved section of the correction curve.
Following is an example interpolation table of a correction curve divided into seven levels with each level divided evenly into eight segments, with the final level having 16 segments. The hexadecimal values in this example are the values for the correction curve along the x axis (in hexadecimal) for the pixel correction value. The y axis value along the curve could then be determined based on the interpolated x axis value. The (decimal) number of pixel correction values between each segment is shown in the column on the right.
Thus, the eight interpolation points in Level 1 of this example each have 4096 pixel correction values between the interpolation segment endpoints. There are 2048 pixel correction values between each interpolation segment endpoint in Level 2, 1024 pixel correction values between endpoints in Level 3, and so forth, until Level 7, which represents the portion of the correction curve with the greatest amount of curvature. Level 7 includes 16 interpolation segment endpoints with only 64 pixel correction values between each endpoint.
A correction value for any of the 65,536 pixel intensities can be determined using the interpolation table. For example, a correction value for pixel intensity 27,000 (hexadecimal 6,978) can be determined by interpolating in Level 2 between the 7000 segment endpoint and the 6800 segment endpoint. It can also be determined that pixel intensity 27,000 is 1,672 pixel intensities below the 7000 segment and 376 pixel intensities above the 6800 segment. This knowledge can be used to determine an offset value of the segment that will be interpolated to enable more accurate interpolation between the two segments to better determine a correction value using the interpolation table. This will be discussed more fully below.
In one embodiment, a procedure has been devised for processing a pixel intensity input value to determine between which interpolation segment endpoints on a transfer function correction curve the pixel correction value is located and a proportion value that can be used to calculate the output value by interpolating between the endpoints. The process can be divided into five steps, as follows:
The first step is to determine which level of the interpolation table is being used. For example, it must be determined in which of the seven levels of the curve shown in
The second step is to process the input value in order to determine the proportion and level offset needed to complete the interpolation. This can be accomplished by shifting the input value left a level specific amount. In one embodiment, this can be accomplished by shifting a binary input value by an amount equal to the level (determined in step 1)−1 bits. So a pixel intensity that is determined to be in Level 4 of the curve would have its input value shifted to the left by 4−1 bits, or 3 bits. This operation does not discard any significant bits and it aligns the remaining significant bits so they can be divided into two fields referred to as the level offset field and the proportion field.
In the example embodiment above, the initial number space was divided into 16 interpolation segment endpoints, or 24 segments. The four high bits can be used as the level offset value while the remaining lower order bits can be the proportion value. The proportion value, with a radix point assumed to be left of its high order bit, is one of the values that can be used to determine the interpolation amount.
The third step is to determine the Level Base value. Note that in the example above the interpolation table was divided into seven levels. An index to the interpolation table can be calculated as the level base plus the level offset, or (((Total number of Levels−Selected Level)*8)+level offset). As such, the Level Base is represented by the equation ((Total number of Levels−Selected Level)*8). Since the level base resolves to a constant value proportional to one of the number of levels, the Level Base value can be implemented by using the Level (the signal from step 1) to select the appropriate constant.
The fourth step is to determine the interpolation table segment entry by adding the Level Offset from step two and the Level Base from step 3.
The fifth step is to complete the interpolation by multiplying the proportion from step two by the segment offset value and then adding the result to the segment base value to form the output value. The segment offset and segment base values for this step are retrieved from the interpolation table based on the segment entry determined in step four.
a and 7b are a diagram of one possible implementation of a system for correcting pixel intensities for output on a video display that involves logarithmically distributing interpolation table endpoints along a transfer function correction curve. The diagram is divided into 5 blocks over
In block 1 in
As previously stated in step two above, the input value is shifted to the left by an amount equal to the level−1 bits, or 4−1=3 bits. This gives a value of 1010 1111 0111 1000. In block 2 in
In block 3, as shown in
In block 4, as shown in
In block 5, as shown in
For example, entry 34 in the interpolation lookup table, determined in block 4, may have a Segment Offset value of 2d0h and a Segment Base value of 7b4eh. Interpolation continues by computing the Interpolation Offset value as the Proportion value (0f780h) times the Segment Offset value (2d0h). The result is a 32 bit number. The 16 most significant bits can be selected, in this embodiment, as the Interpolation Offset value of 0000 0010 1011 1000, or 2b8h. The interpolation offset value (2b8h) can then be added to the Segment Base (7b4eh) to produce the resulting interpolation output value of 7e06h (32,262 decimal) on the transfer function correction curve. The pixel correction value can then be applied to the pixel intensity to produce a desired intensity on a display.
The implementation of a system for correcting pixel intensities shown in
For example, a grating light valve (GLV) type display can be used to achieve a video display having a tremendous level of resolution of 32 megapixels or more. The GLV produces images using thousands of ribbons, with each ribbon representing a row in a display. A high end GLV display may include over 4,000 ribbons. Each ribbon can require a separate transfer function to correct for nonlinearities specific to that ribbon in the display system. A transfer function correction system, as shown in
While the forgoing examples are illustrative of the principles of the present invention in one or more particular applications, it will be apparent to those of ordinary skill in the art that numerous modifications in form, usage and details of implementation can be made without the exercise of inventive faculty, and without departing from the principles and concepts of the invention. Accordingly, it is not intended that the invention be limited, except as by the claims set forth below.