Abstract:
Adjustments are made to a displayed image in order to take into account user viewing angle. Brightness values for colors are stored within palette registers. In response to a user indicating a view angle change, brightness values stored in at least some of the palette registers are changed. As brightness values are increased, contrast between color shades is decreased.

Description:
BACKGROUND 
     The present invention concerns display products and pertains particularly to adjustments made to a liquid crystal display in order to improve display clarity when viewed at different viewing angles. 
     LCD video display panels require viewing angles close to perpendicular for optimum image accuracy and definition. Specifically, as the vertical angle changes in one direction, the image becomes brighter and has reduced contrast. In the other direction, the image darkens and has increased contrast. 
     Prior attempts to improve the image at non-perpendicular viewing angles have focused on changing the intensity of the backlight. This results in less overall brightness of the image, and in many cases increased electro-magnetic interference from the backlight. 
     SUMMARY OF THE INVENTION 
     In accordance with the preferred embodiment of the present invention, adjustments are made to a displayed image in order to take into account user viewing angle. Brightness values for colors are stored within palette registers. The palette registers, for example, are within a video controller. In response to a user indicating a view angle change, brightness values stored in at least some of the palette registers are changed. In the preferred embodiment, as brightness values are increased, contrast between color shades is decreased. 
     For example, the display is a liquid crystal display. Each palette register stores a red brightness value, a green brightness value and a blue brightness value. The user indicates a view angle change by either pressing a view angle index increment button, pressing a view angle index decrement button or via a viewing angle command. 
     In the preferred embodiment, backlight is left at full intensity, and viewing angle is compensated for only by adjusting the color palette to change the brightness and contrast range of the image. This results in improvement of overall image brightness and overall useful viewing angles. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is a simplified diagram showing an LCD display with buttons used to adjust the viewing image to take into account the angle at which the LCD display is viewed. 
     FIG. 2 is a simplified block diagram of a hardware implementation of the display shown in FIG.  1 . 
     FIG. 3 is a simplified flowchart which illustrates operation of the view angle adjustment feature of the LCD display shown in FIG. 1 in accordance with a preferred embodiment of the present invention. 
    
    
     DESCRIPTION OF THE PREFERRED EMBODIMENT 
     FIG. 1 is a simplified block diagram showing a liquid crystal display (LCD)  11  on an instrument panel  10 . A button  12  and a button  13  are used to optimize the image projected by LCD display  11  when LCD display  11  is viewed from various angles. For example, button  12  and button  13  adjust the color palette to variously adjust brightness and contrast of the displayed image in order to optimize viewing of LCD display  11  from various angles. Button  12  is used to increase an angle index thus increasing brightness and reducing contrast range of a displayed image. Button  13  is used to decrease an angle index thus decreasing brightness and increasing contrast range of a displayed image. Additional buttons  14  are used for power and/or other input to LCD display  11 . 
     FIG. 2 is a simplified block diagram of a hardware implementation of LCD display  11 . LCD display  11  includes a central processing unit (CPU)  22 , a keyswitch matrix  21 , a video controller  23  and an LCD screen  24 . CPU  22  places images in frame buffer  25  or frame buffer  26 . The active frame buffer contains a pixel value for each pixel in LCD screen  24 . Video controller  23  utilizes the pixel values as an index into palette registers  27  in order to obtain red, green and blue values for the pixels to be displayed on LCD screen  24 . Using the red, green and blue values for each pixel, video controller  23  places the image on LCD screen  24 . 
     CPU  22  also monitors keyswitch matrix  21  to determine when a button has been depressed. In response to button  12  or button  13  being pressed CPU  22 , CPU  22  sends to video controller  23  new values for some or all of the pen values stored within palette registers  13 . Changes in the pen values stored in palette registers results in changes in brightness for particular colors and changes in the contrast range between colors for the image displayed on LCD screen  24 . 
     For example, CPU  22  includes a MC68040 processor available from Motorola, Inc., having a business address of P.O. Box 20512, Phoenix Ariz. 85036. Video controller is, for example, a WDC90C24A video controller available from Western Digital Corporation, having a business address of 8105 Irvine Center Drive, Irvine Calif. 
     A remote communications port  28  allows LCD display  11  to receive commands from an external source. For example, one of the commands is a viewing angle command that changes the viewing angle index to the specific angle index (e.g. 1 through 7) specified in the viewing angle command. In response, CPU  22  changes the values in palette registers  27 . 
     FIG. 3 is as simplified flowchart of a process which runs on CPU  22  and implements the view angle adjustment feature of LCD display  11 . In a step  31 , CPU  22  scans keyswitch matrix  21  to determine whether any buttons have been pressed. When a button has been pressed, in a step  32 , CPU  22  determines which button has been pressed. If button  12  has been pressed, then, in a step  33 , CPU determines whether the angle index is already at a maximum value. If so, in a step  38 , this iteration of the process is complete. 
     If in step  33 , CPU determines that the angle index is not already at a maximum value, in a step  34  the angle index is incremented. In a step  37 , a routine is called which changes pen values in palette registers  27  based on the current angle index. Then, in step  38 , this iteration of the process is complete. 
     If in step  32 , CPU  22  determines that button  13  has been pressed, then, in a step  35 , CPU determines whether the angle index is already at a minimum value. If so, in step  38 , this iteration of the process is complete. 
     If in step  35 , CPU determines that the angle index is not already at a minimum value, in a step  36  the angle index is decremented. In step  37 , that routine is called that changes pen values in palette registers  27  based on the current angle index. Then, in step  38 , this iteration of the process is complete. 
     In step  38 , after a delay, the process returns to step  31  for a new iteration. 
     In a step  39 , LCD display  11  receives a viewing angle command from an external source via remote communications port  27 . The viewing angle command specifies a specific angle index. Then, in step  37 , the routine is called that changes pen values in palette registers  27  based on the current angle index. 
     As described above, once the angle index is incremented, decremented or changed via a viewing angle command, a routine is called which alters the color palette by modifying some of the pen values stored in palette registers  27  within video controller  23 . This provides an increase or decrease in the brightness of the colors used to display the image and a corresponding decrease or increase in the contrast range between colors used to display the image. This results in improvement visibility for a variety of viewing angles. 
     In the preferred embodiment of the present invention, the pen values of palette registers  27  are altered using a table empirically determined by examining video display  11  at varying angles. Alternatively, an algorithm is used to compute the palette adjustment required for a given angle. Use of an algorithm is particularly helpful for displays with finer brightness gradients. 
     Table 1 below sets out programming code for an implementation of the routine which alters the color palette for LCD display  11 . The implementation shown in Table 1 adjusts the color palette only for those areas of the display which are a shade of gray. Each pen value stored in a palette register contains a brightness value for red between 1 and 64, a brightness value for green between 1 and 64, a brightness value for blue between 1 and 64. In the preferred embodiment, for each color, only sixteen of the possible brightness levels are used. Thus, each valid brightness value is a multiple of four. 
     The viewing angle value is adjusted using button  12  and button  13 . There are seven view angle levels provided, which is the maximum useful number of view angle levels for a display with only 16 brightness levels. More view angle levels are useful when video display  11  has more brightness levels. 
     For palette registers which specify a gray color, the brightness value for the red, green and blue are equal. In the current application, palette registers 7, 9, 10, 12 and 15 are used to produce gray colors. 
     The implementation shown in Table 1 also allows display using green only. In this case, for all palette registers, the red and blue brightness values are set to 0. 
     
       
         
               
             
               
               
               
               
               
             
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
             
           
               
                 TABLE 1 
               
               
                   
               
             
             
               
                 // The angle table below contains quadruplets for pens (7 &amp; 12), 9, 
               
               
                 // 10, 15 for seven different brightness/contrast levels 
               
               
                 const uint8 LcDisplay : : angleTable[ ] = 
               
               
                 { 
               
             
          
           
               
                   
                 4, 
                 20, 
                 32, 
                 12, 
               
               
                   
                 12, 
                 32, 
                 44, 
                 24, 
               
               
                   
                 20, 
                 44, 
                 52, 
                 28, 
               
               
                   
                 28, 
                 48, 
                 56, 
                 32, 
               
               
                   
                 36, 
                 52, 
                 56, 
                 32, 
               
               
                   
                 44, 
                 52, 
                 56, 
                 36, 
               
               
                   
                 48, 
                 52, 
                 56, 
                 40 
               
             
          
           
               
                 } 
               
               
                 // The routine below changes the pen values in the palette 
               
               
                 //registers. 
               
               
                 //The parameters are the angle index (1 to 7) and a Boolean value 
               
               
                 //that indicates when green-only display is to be used. 
               
               
                 void LcDisplay : : viewAngle (int32 angle, boolean greenPallette) 
               
               
                 { 
               
             
          
           
               
                   
                 uint8 const * pValue = angleTable + (angle − 1) * 4; 
               
               
                   
                 extern void setPenValue(int16 pen, int16 r, int16 g, int16 b); 
               
               
                   
                 //when in normal mode, set the red, green and blue pen values 
               
               
                   
                 // for palette registers 7, 12, 9, 10 and 15 
               
               
                   
                 if(!greenPallette) 
               
               
                   
                 { 
               
             
          
           
               
                   
                 setPenValue(7, *pValue, *pValue, *pValue); 
               
               
                   
                 setPenValue(12, *pValue, *pValue, *pValue); 
               
               
                   
                 ++Pvalue; 
               
               
                   
                 setPenValue(9, *pValue, *pValue, *pValue); 
               
               
                   
                 ++pValue; 
               
               
                   
                 setPenValue(10, *pValue, *pValue, *pValue); 
               
               
                   
                 ++pValue; 
               
               
                   
                 setPenValue(15, *pValue, *pValue, *pValue); 
               
             
          
           
               
                   
                 } 
               
               
                   
                 else 
               
               
                   
                 //when in green-only mode, set the green pen values for 
               
               
                   
                 //palette registers 7, 12, 9, 10 and 15 
               
               
                   
                 { 
               
             
          
           
               
                   
                 //set only green values from angle table, leave r &amp; b 0 
               
               
                   
                 setPenValue(7, 0, *pValue, 0); 
               
               
                   
                 setPenValue(12, 0, ′pValue, 0); 
               
               
                   
                 ++pValue; 
               
               
                   
                 setPenValue(9, 0, *pValue, 0); 
               
               
                   
                 ++pValue; 
               
               
                   
                 setPenValue(10, 0, *pValue, 0); 
               
               
                   
                 ++pValue; 
               
               
                   
                 setPenValue(15, 0, *pValue, 0); 
               
             
          
           
               
                   
                 } 
               
             
          
           
               
                 } 
               
               
                   
               
             
          
         
       
     
     As can be discerned from the angle table within the programming code set out in Table 1 above, as the brightness is increased the contrast between shades of gray is decreased. 
     While the programming code in Table 1 above only changes the palette registers for gray values, in alternate embodiments of the present invention, compensation can be made for the hue shift associated with viewing angle. This is also done by changing the values in the palette registers as described above. 
     The foregoing discussion discloses and describes merely exemplary methods and embodiments of the present invention. As will be understood by those familiar with the art, the invention may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. Accordingly, the disclosure of the present invention is intended to be illustrative, but not limiting, of the scope of the invention, which is set forth in the following claims.