DE20080319U1 - Video camera in which the main functions are implemented in the main computer software - Google Patents
Video camera in which the main functions are implemented in the main computer softwareInfo
- Publication number
- DE20080319U1 DE20080319U1 DE20080319U DE20080319U DE20080319U1 DE 20080319 U1 DE20080319 U1 DE 20080319U1 DE 20080319 U DE20080319 U DE 20080319U DE 20080319 U DE20080319 U DE 20080319U DE 20080319 U1 DE20080319 U1 DE 20080319U1
- Authority
- DE
- Germany
- Prior art keywords
- data
- pixels
- video camera
- correction
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 230000006870 function Effects 0.000 title description 17
- 238000012937 correction Methods 0.000 claims description 84
- 238000012545 processing Methods 0.000 claims description 58
- 230000002950 deficient Effects 0.000 claims description 42
- 238000007906 compression Methods 0.000 claims description 29
- 230000006835 compression Effects 0.000 claims description 29
- 230000006837 decompression Effects 0.000 claims description 19
- 238000012546 transfer Methods 0.000 claims description 17
- 239000000872 buffer Substances 0.000 claims description 16
- 230000002547 anomalous effect Effects 0.000 claims description 15
- 238000013144 data compression Methods 0.000 claims description 4
- 230000002093 peripheral effect Effects 0.000 claims description 3
- 230000002159 abnormal effect Effects 0.000 claims 4
- 238000005070 sampling Methods 0.000 claims 1
- 238000000034 method Methods 0.000 description 46
- 238000001514 detection method Methods 0.000 description 24
- 238000004422 calculation algorithm Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 17
- 238000006243 chemical reaction Methods 0.000 description 14
- 230000000694 effects Effects 0.000 description 14
- 238000005516 engineering process Methods 0.000 description 10
- 238000004519 manufacturing process Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 7
- 244000309464 bull Species 0.000 description 5
- 238000007619 statistical method Methods 0.000 description 5
- 230000007547 defect Effects 0.000 description 4
- 239000004065 semiconductor Substances 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 238000007792 addition Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 239000000428 dust Substances 0.000 description 2
- 230000008030 elimination Effects 0.000 description 2
- 238000003379 elimination reaction Methods 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000035945 sensitivity Effects 0.000 description 2
- VUDQSRFCCHQIIU-UHFFFAOYSA-N 1-(3,5-dichloro-2,6-dihydroxy-4-methoxyphenyl)hexan-1-one Chemical compound CCCCCC(=O)C1=C(O)C(Cl)=C(OC)C(Cl)=C1O VUDQSRFCCHQIIU-UHFFFAOYSA-N 0.000 description 1
- 238000012935 Averaging Methods 0.000 description 1
- 241000145637 Lepturus Species 0.000 description 1
- 101150112468 OR51E2 gene Proteins 0.000 description 1
- 241001085205 Prenanthella exigua Species 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 125000001475 halogen functional group Chemical group 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000012464 large buffer Substances 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 229910044991 metal oxide Inorganic materials 0.000 description 1
- 150000004706 metal oxides Chemical class 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000035755 proliferation Effects 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000009738 saturating Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N7/00—Television systems
- H04N7/16—Analogue secrecy systems; Analogue subscription systems
- H04N7/162—Authorising the user terminal, e.g. by paying; Registering the use of a subscription channel, e.g. billing
- H04N7/165—Centralised control of user terminal ; Registering at central
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/41—Structure of client; Structure of client peripherals
- H04N21/414—Specialised client platforms, e.g. receiver in car or embedded in a mobile appliance
- H04N21/4143—Specialised client platforms, e.g. receiver in car or embedded in a mobile appliance embedded in a Personal Computer [PC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/83—Generation or processing of protective or descriptive data associated with content; Content structuring
- H04N21/84—Generation or processing of descriptive data, e.g. content descriptors
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N25/00—Circuitry of solid-state image sensors [SSIS]; Control thereof
- H04N25/60—Noise processing, e.g. detecting, correcting, reducing or removing noise
- H04N25/61—Noise processing, e.g. detecting, correcting, reducing or removing noise the noise originating only from the lens unit, e.g. flare, shading, vignetting or "cos4"
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N25/00—Circuitry of solid-state image sensors [SSIS]; Control thereof
- H04N25/60—Noise processing, e.g. detecting, correcting, reducing or removing noise
- H04N25/68—Noise processing, e.g. detecting, correcting, reducing or removing noise applied to defects
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/47—End-user applications
- H04N21/482—End-user interface for program selection
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Studio Devices (AREA)
- Surface Acoustic Wave Elements And Circuit Networks Thereof (AREA)
- Color Television Image Signal Generators (AREA)
Description
·* ♦•as* ■·■ *·4 ·* ♦•as* ■·■ *· 4
VIDEOKAMERA, BEI DER DIE HAUPTFUNKTIONEN IN DER
HAUPTRECHNERSOFTWARE IMPLEMENTIERT WERDENVIDEO CAMERA WHERE THE MAIN FUNCTIONS ARE IN THE
MAIN COMPUTER SOFTWARE TO BE IMPLEMENTED
RÜCKVERWEISUNGEN AUF VERWANDTE ANMELDUNGEN
.REFERENCES TO RELATED APPLICATIONS
.
Diese Anmeldung ist eine Teilfortführung der US-Anmeldung Nr. 09/345 167, eingereicht am 30. Juni 1999, mit dem Titel "IMAGE SENSOR BASED VIGNETTING CORRECTION", der US-Anmeldung Nr. 09/464 3 64, eingereicht am 15. Dezember 1999, mit dem Titel "DYNAMIC ANOMALOUS PIXEL DETECTION AND CORRECTION", und der US-Anmeldung Nr. 09/343 934, eingereicht am 30. Juni 1999, mit dem Titel "FAST DECODING". Von denen alle durch den Hinweis hierin aufgenommen werden.This application is a continuation-in-part of U.S. Application No. 09/345,167, filed June 30, 1999, entitled "IMAGE SENSOR BASED VIGNETTING CORRECTION," U.S. Application No. 09/464,364, filed December 15, 1999, entitled "DYNAMIC ANOMALOUS PIXEL DETECTION AND CORRECTION," and U.S. Application No. 09/343,934, filed June 30, 1999, entitled "FAST DECODING," all of which are incorporated herein by reference.
HINTERGRUND DER ERFINDUNGBACKGROUND OF THE INVENTION
Die vorliegende Erfindung betrifft Videokameras und insbesondere Videokameras, die mit einem Computer oder einer anderen intelligenten Vorrichtung durch eine gemeinsam genutzte Schnittstelle, wie z.B. den universellen seriellen Bus (USB), verbunden sind.The present invention relates to video cameras, and more particularly to video cameras connected to a computer or other intelligent device through a shared interface such as the universal serial bus (USB).
Es wurden Videokameras zum Bereitstellen Von sowohl Standbildern als auch Bewegtbildern entwickelt, die mit einem Computer verbinden können, um ein digitalisiertes Bild zu liefern. Solche Kameras können mit dem Computer über einen gemeinsam genutzten Bus, wie z.B. den USB, verbunden werden. Dies begrenzt die·Bandbreite der Daten, die gesandt werden können, was eine Komprimierung der Videodaten erfordert. Typischer-weise führen Kameras einiges der Vorverarbeitung des Bildes in der Kameraelektronik durch, was somit sowohl die CPU des Computers von der Verarbeitung befreit als auch die Menge an Daten, die komprimiert und über den Bus gesandt werden müssen, potentiell verringert.Video cameras have been developed to provide both still and moving images that can connect to a computer to provide a digitized image. Such cameras can be connected to the computer via a shared bus, such as the USB. This limits the bandwidth of data that can be sent, requiring compression of the video data. Typically, cameras perform some of the pre-processing of the image in the camera electronics, thus both freeing the computer's CPU from processing and potentially reducing the amount of data that needs to be compressed and sent over the bus.
Bei einer solchen Konstruktion müssen einige Funktionen in der Kamera ausgeführt werden. Ein CCD- oder CMOS-Sensor in der Kamera kann beispielsweise fehlerhafte Detektorpositionen aufweisen, die Licht nicht korrekt auffangen. Diese können durch Mitteln der Menge an erfaßtem Licht an benachbarten Detektorstellen und Austauschen des von der fehlerhaften Stelle gelieferten Werts gegen diesen kompensiert werden. Diese Art Verarbeitung muß vor anderen Arten von Verarbeitung, die nun typischerweise in einer Videokamera durchgeführt werden, wie z.B. Farbverarbeitung und Skalierung, durchgeführt werden.In such a design, some functions must be performed in the camera. For example, a CCD or CMOS sensor in the camera may have faulty detector positions that do not capture light correctly. These can be compensated for by averaging the amount of light detected at adjacent detector locations and substituting the value provided by the faulty location for it. This type of processing must be performed before other types of processing now typically performed in a video camera, such as color processing and scaling.
Fig. 1 ist ein Blockdiagramm einer typischen Videokamera, die über einen Bus mit einem Hauptrechner verbinden kann. Eine Linse 10 fokussiert Licht auf einen Sensor 12 mit einer zugehörigen Steuerlogik zum Auslesen der Sensordaten. Die Daten werden zu einem Analog-Digital-Wandler (ADC) 14 geliefert, wo sie digitalisiert werden. Die Daten werden dann in einem Bildpufferspeicher 16 gespeichert. Eine Pixelkorrektur kann mit einer Schaltung 18 auf die Daten angewendet werden. Die Korrekturdaten können in einem programmierbaren Speicher 20 gespeichert werden. Dieser Speicher kann während des Herstellungsprozesses programmiert werden, noch bevor die Kamera versandt wird.Fig. 1 is a block diagram of a typical video camera that can interface with a host computer via a bus. A lens 10 focuses light onto a sensor 12 with associated control logic for reading the sensor data. The data is supplied to an analog-to-digital converter (ADC) 14 where it is digitized. The data is then stored in a frame buffer 16. Pixel correction can be applied to the data using circuitry 18. The correction data can be stored in a programmable memory 20. This memory can be programmed during the manufacturing process before the camera is shipped.
Eine Anzahl von anderen Funktionen wird' typischerweise in der in Fig. 1 gezeigten Kamera in einer speziellen Reihenfolge durchgeführt, obwohl sie sich in anderen Reihenfolgen befinden können oder über einen Bus verbunden sein können, so daß sie variieren, wenn sie aufgerufen werden. Beispielsweise 0 kann eine Farbverarbeitungsschaltung 22 eine Anzahl von Farbfunktionen ausführen, wie z.B. Umwandeln der empfangenen Daten von einem Farbformat, wie z.B. YUV, in ein anderes Format, wie z.B. RGB. Eine Festwertmultiplikatorfunktion 24 kann das Bild skalieren, um es an die am Hauptrechner gewünschte Anzeige anzupassen. Eine Komprimierungsschaltung 26 kompri-A number of other functions are typically performed in the camera shown in Figure 1 in a particular order, although they may be in other orders or may be connected via a bus so that they vary when they are called. For example, a color processing circuit 22 may perform a number of color functions, such as converting the received data from one color format, such as YUV, to another format, such as RGB. A fixed value multiplier function 24 may scale the image to suit the display desired on the host computer. A compression circuit 26 compresses
miert die Daten, um die Menge an über den gemeinsam genutzten Bus zu übertragenden Daten zu verringern. Schließlich implementiert eine Busschnittstellenschaltung 28 die Protokolle eines Busses 3 0 zum Übertragen von Daten zu einem entfernten Hauptrechnef.izes the data to reduce the amount of data to be transferred over the shared bus. Finally, a bus interface circuit 28 implements the protocols of a bus 30 for transferring data to a remote host.
Die Huffman-Codierung ist einer der Algorithmen, der am weitverbreitetsten zum Komprimieren von Videodaten verwendet wird. Die Huffman-Codierung wurde in verschiedenen Bild- und Videokomprimierungsstandards verwendet, wie z.B. den von der Joint Photographic Experts Group (JPEG) und der Motion Picture Experts Group (MPEG) festgelegten Standards MPEG-II, H.261, H.263 und H.323. Diese Standards werden durch den Hinweis in ihrer Gesamtheit und für alle Zwecke hierin aufgenommen. Die Huffman-Codierung ist ein verlustloses statistisches Codierverfahren. Die Huffman-Codierung verwendet eine Wahrscheinlichkeit, um das kürzeste Codewort für die Daten, die am häufigsten vorkommen, auszuwählen. Wenn beispielsweise englischer Text codiert wird, kann "E", das in der englischen Sprache ein sehr weitverbreitetes Zeichen ist, durch ein 2-Bit-Codewort dargestellt werden, wohingegen "A", das nicht so häufig verwendet wird, durch ein 8-Bit-Codewort dargestellt werden kann.Huffman coding is one of the algorithms most widely used for compressing video data. Huffman coding has been used in various image and video compression standards, such as the MPEG-II, H.261, H.263, and H.323 standards established by the Joint Photographic Experts Group (JPEG) and the Motion Picture Experts Group (MPEG). These standards are incorporated herein by reference in their entirety and for all purposes. Huffman coding is a lossless statistical coding technique. Huffman coding uses probability to select the shortest codeword for the data that occurs most frequently. For example, when encoding English text, "E", which is a very common character in the English language, can be represented by a 2-bit codeword, whereas "A", which is not as commonly used, can be represented by an 8-bit codeword.
Folglich komprimiert die Huffman-Codierung die Daten durch Zuweisen von kürzeren Codeworten häufiger vorkommenden Daten und längeren Codeworten weniger häufig vorkommenden Daten. Die zugewiesenen Codeworte können in einer Tabelle aufbewahrt werden, die dann sowohl von den Empfängern als auch Sendern verwendet wird. Weitere Einzelheiten hinsichtlich der Huffman-Codierung sind in "A Method for the Construction of Minimum Redundancy Codes", Proceedings of the IRE, Band 40, Nr. 9, September 1952, S. 1098-1101, von D.A. Huffman, zu finden, das durch den Hinweis in seiner Gesamtheit und für alle Zwekke hierin aufgenommen wird.Thus, Huffman coding compresses the data by assigning shorter code words to more frequently occurring data and longer code words to less frequently occurring data. The assigned code words can be kept in a table which is then used by both the receivers and transmitters. Further details regarding Huffman coding can be found in "A Method for the Construction of Minimum Redundancy Codes", Proceedings of the IRE, Volume 40, No. 9, September 1952, pp. 1098-1101, by D.A. Huffman, which is incorporated by reference in its entirety and for all purposes.
Überdies werden Huffman-Codeworte derart konstruiert, daß kein Codewort das Präfix eines anderen Codeworts ist. Dies stellt die eindeutige Decodierung jedes Symbols aus einem Bitstrom von Daten trotz der variablen Längen der Codes sicher. Eine zusätzliche Beschreibung der Eigenschaften von Huffman-Codes ist im Data Compression Book, M&T Books, 1996, von M. Nelson und J.L. GailIy1 zu finden, das ebenfalls durch den Hinweis in seiner Gesamtheit und für alle Zwecke hierin aufgenommen wird. Auf den Seiten 31-35 schlägt diese Bezugsquelle einen Decodieralgorithmus vor, der auf einer Baumfolge basiert. Dieser Algorithmus eignet sich jedoch nicht für eine schnelle Dekomprimierung unter Verwendung der meisten derzeit erhältlichen Mikroprozessoren, wie z.B. der Pentium® Familie von Intel®.Moreover, Huffman codewords are constructed such that no codeword is the prefix of another codeword. This ensures the unambiguous decoding of each symbol from a bitstream of data despite the variable lengths of the codes. An additional description of the properties of Huffman codes can be found in the Data Compression Book, M&T Books, 1996, by M. Nelson and JL GailIy 1 , which is also incorporated by reference in its entirety and for all purposes. On pages 31-35, this reference proposes a decoding algorithm based on a tree sequence. However, this algorithm is not suitable for fast decompression using most currently available microprocessors, such as the Pentium® family from Intel®.
Der Vignettierungseffekt besteht, wenn die Helligkeit um die Kanten eines Bildschirms geringer ist als die Helligkeit in der Mitte des Bildschirms, was einen Lichthofeffekt erzeugt.The vignetting effect occurs when the brightness around the edges of a screen is less than the brightness in the center of the screen, creating a halo effect.
Professionelle Fotografen versuchen manchmal, diesen Effekt mit einer geeigneten Linse oder einem geeigneten Filter absichtlich zu erzeugen, um eine weichgezeichnete Abbildung an den Kanten eines Bildes zu erzeugen. Wenn jedoch dieser Effekt in digitalen Fotografien unabsichtlich erscheint, ist es' ärgerlich. Eine Vielzahl von Verfahren wurden entwickelt, um Vignettierungseffekte zu messen und anzugehen.Professional photographers sometimes try to intentionally create this effect using a suitable lens or filter to produce a softened image at the edges of an image. However, when this effect appears unintentionally in digital photographs, it's annoying. A variety of techniques have been developed to measure and address vignetting effects.
Das US-Patent Nr. 4 884 140 zeigt eine analoge Schaltung zum Bereitstellen einer Vignettierungskompensation für eine Videokamera, die eine Zoom-Linse verwendet, die eine Vignettierung verursacht.U.S. Patent No. 4,884,140 shows an analog circuit for providing vignetting compensation for a video camera that uses a zoom lens that causes vignetting.
Das US-Patent Nr. 5 434 902 zeigt die Messung des Vignettierungseffekts für eine Röntgenuntersuchungsvorrichtung unter Verwendung eines Bildes mit konstanter Helligkeit. Ein Kor-US Patent No. 5,434,902 shows the measurement of the vignetting effect for an X-ray examination device using an image with constant brightness. A correction
•·&Ugr;7· ·:•·&Ugr;7· ·:
rekturfaktor wird dann im Speicher für jedes Pixel gespeichert. The correction factor is then stored in memory for each pixel.
Das US-Patent Nr. 5 576 797 zeigt die Erfassung von Vignettierungseffekten in einer Kamera mit einer Brennpunkterfassungsvorrichtung. US Patent No. 5,576,797 shows the detection of vignetting effects in a camera with a focus detection device.
Das US-Patent Nr. 5 381 174 zeigt die Korrektur der Vignettierung aufgrund der Funktion einer Zoom-Linse unter Verwendung eines Teilbildfrequenz-Sägezahnsignals.US Patent No. 5,381,174 shows the correction of vignetting due to the operation of a zoom lens using a field frequency sawtooth signal.
Das US-Patent Nr. 4 816 663 zeigt die Erfassung der Vignettierung zwischen einer Photoaufnahmelinse und einem optischen Brennpunkterfassungssystem.U.S. Patent No. 4,816,663 shows the detection of vignetting between a phototaking lens and an optical focus detection system.
..
Digitale Kameras zur Verwendung mit einem Personalcomputer für eine Personentelekonferenz wurden immer preiswerter. Dies setzt die Kamerahersteller unter den Druck, preiswertere Linsen zu verwenden, die mehr Vignettierungseffekt aufweisen.Digital cameras for use with a personal computer for personal teleconferencing have become increasingly inexpensive. This puts pressure on camera manufacturers to use cheaper lenses that have more vignetting effect.
Außerdem zwingt der Preisdruck Hersteller, weniger Halbleiterchips zu verwenden, was somit die Verwendung eines Halbleiterspeichers zum Speichern von Vignettierungskorrekturen unerwünscht macht. Folglich besteht ein Bedarf für eine digitale Kamera, die preisgünstig herzustellen ist und auch die Vignettierung einer preisgünstigen Linse korrigiert.In addition, price pressures are forcing manufacturers to use fewer semiconductor chips, thus making the use of semiconductor memory to store vignetting corrections undesirable. Consequently, there is a need for a digital camera that is inexpensive to manufacture and also corrects the vignetting of a low-cost lens.
Die zum Herstellen von Bildsensoren verwendeten Verfahren sind, obwohl sie sehr fortschrittlich sind, nicht perfekt. Photostellen in einer Bildsensormatrix können in ihrer Emp-0 findlichkeit oder Fähigkeit, Licht in elektrische Ströme umzuwandeln, schwanken. Eine gewisse Schwankung wird erwartet und ist .tolerierbar, aber bei Gelegenheit können einzelne Photostellen in einer Matrix tot, inaktiv oder überaktiv sein. Dies kann zu einem angezeigten Bild mit einem dunklen oder schwarzen Punkt, hellem weißen Punkt oder einem PunktThe processes used to manufacture image sensors, although very advanced, are not perfect. Photositems in an image sensor array can vary in their sensitivity or ability to convert light into electrical currents. Some variation is expected and tolerable, but on occasion individual photosites in an array can be dead, inactive or overactive. This can result in a displayed image with a dark or black dot, bright white dot or a dot.
t ·
&psgr;&phgr; «»&Ogr;&Igr; t ·
&psgr;&phgr; «»&Ogr;&Igr;
mit falscher Farbe führen, die für den Endverbraucher alle ungewollt und unerwünscht sind. Diejenigen auf dem Gebiet der digitalen Abbildung haben auch die Probleme erkannt, die durch eine falsche Digitalisierung von Zielbildern verursacht werden, und haben verschiedene Lösungen zum Erkennen und Korrigieren von fehlerhaften Pixeln vorgeschlagen. Diese Verfahren und Systeme des Standes der Technik können grob in zwei Gruppen eingeteilt werden.with incorrect color, all of which are unwanted and undesirable for the end user. Those in the digital imaging field have also recognized the problems caused by incorrect digitization of target images and have proposed various solutions for detecting and correcting erroneous pixels. These prior art methods and systems can be broadly divided into two groups.
Einerseits gibt es verschiedene Verfahren auf Hardwarebasis zum Erkennen und Korrigieren von fehlerhaften Pixeln, die aus einer Bildsensormatrix gewonnen werden. Diese Verfahren und Systeme auf Hardwarebasis sind für Videokamerahersteller ziemlich üblich. Die meisten herkömmlichen Videokameras/ die eine Halbleiter-Bildaufnahmevorrichtung verwenden, beinhalten eine Erkennungs- und Korrekturschaltung für fehlerhafte Pixel zum Korrigieren von fehlerhaften Pixeln, die aus einer Bildsensormatrix gewonnen werden. Die fehlerhaften Pixel werden erzeugt, wenn oder nachdem die Bildsensormatrix hergestellt wird bzw. wurde. In einer solchen Kamera erkennt eine Korrekturschaltung für fehlerhafte Pixel ein fehlerhaftes Pixel und speichert die Positionsdaten und verschiedene Daten hinsichtlich des fehlerhaften-Pixels in einem Festwertspeicher (ROM) oder dergleichen. Wenn die Videokamera in Gebrauch ist, dann werden die Pixeldaten von dem fehlerhaften Pixel durch Daten von einem Pixel nahe dem fehlerhaften Pixel ersetzt. Ein solches Verfahren und System ist im US-Pat. Nr. 5 796 43 0 offenbart. Der Nachteil solcher Methoden ist der Bedarf, Speicherbauelemente während der Produktmontage und -prüfung einzubauen und zu programmieren, was Kosten und Verzögerungen hinzufügt. Außerdem steigen auch die Hardwarevorrichtungskosten aufgrund des Bedarfs, die Korrekturschaltung oder -logik zu der anwendungsspezifischen integrierten Schaltung (ASIC) für die Videoverarbeitung hinzuzufügen.On the one hand, there are various hardware-based methods for detecting and correcting defective pixels extracted from an image sensor array. These hardware-based methods and systems are quite common for video camera manufacturers. Most conventional video cameras using a solid-state image pickup device include a defective pixel detection and correction circuit for correcting defective pixels extracted from an image sensor array. The defective pixels are generated when or after the image sensor array is manufactured. In such a camera, a defective pixel correction circuit detects a defective pixel and stores the position data and various data regarding the defective pixel in a read-only memory (ROM) or the like. When the video camera is in use, the pixel data from the defective pixel is replaced with data from a pixel near the defective pixel. Such a method and system is disclosed in U.S. Pat. No. 5,796,430. The disadvantage of such methods is the need to install and program memory devices during product assembly and testing, which adds cost and delay. In addition, hardware device costs also increase due to the need to add correction circuitry or logic to the application-specific integrated circuit (ASIC) for video processing.
Andererseits gibt es verschiedene Verfahren auf Softwarebasis zum Erkennen und Korrigieren von fehlerhaften Pixeln in digitalen Bildern. Ein solches Verfahren und System ist im US-Pat. Nr. 5 982 946 offenbart. Solche Verfahren auf Softwarebasis zielen im allgemeinen auf die Korrektur von schlechten Bildpixeln in einem bereits digitalisierten und vollständig verarbeiteten Bild ab. Diese bereits digitalisierten Bilder liegen in ihren anzeigbaren und gespeicherten Endformen vor, die bereits eine Farbverarbeitung, Komprimierung und verschiedene andere Verarbeitung durchlaufen haben, die an den Rohdaten ausgeführt werden, welche aus einer Bildsensormatrix ausgelesen werden. Daher können solche Verfahren auf Softwarebasis, die vollständig verarbeitete digitale Bilder behandeln, anomale Pixel, die durch eine beliebige Anzahl von Bildfehlern, wie z.B. Staub oder Schmutz auf der Originalszene, Staub oder Schmutz auf der Linse, die zum Erfassen der Szene verwendet wurde, verursacht werden, sowie anomale Pixel in dem digitalisierten Bild, die durch fehlerhafte Photostellen verursacht wurden, korrigieren. Diese Verfahren beruhen typischerweise auf ziemlich hochwertigen und teuren Systemen und Computersoftware, um schlechte Pixel zu erkennen und zu korrigieren. Diese Verfahren erfordern im allgemeinen eine Benutzereingabe, um die Stelle der potentiell schlechten Bildpixel zu erkennen. Wenn der Benutzer ein ganzes Bild einmal visuell abgerastert und potentiell schlechte Bildpixel gekennzeichnet hat, übernimmt das System, welches das Softwareprogramm enthält, die Korrektur der gekennzeichneten fehlerhaften Pixel. Neben dem Erfordernis der Benutzereingabe sind solche Methoden auch teuer, ermüdend und sehr zeitauf-On the other hand, there are various software-based methods for detecting and correcting bad pixels in digital images. One such method and system is disclosed in U.S. Pat. No. 5,982,946. Such software-based methods generally aim to correct bad image pixels in an already digitized and fully processed image. These already digitized images are in their final displayable and stored forms which have already undergone color processing, compression, and various other processing performed on the raw data read from an image sensor array. Therefore, such software-based methods dealing with fully processed digital images can correct anomalous pixels caused by any number of image defects, such as dust or dirt on the original scene, dust or dirt on the lens used to capture the scene, as well as anomalous pixels in the digitized image caused by bad photosites. These methods typically rely on fairly sophisticated and expensive systems and computer software to detect and correct bad pixels. These methods generally require user input to identify the location of the potentially bad image pixels. Once the user has visually scanned an entire image and marked potentially bad image pixels, the system containing the software program takes over the correction of the marked bad pixels. In addition to requiring user input, such methods are also expensive, tedious and very time-consuming.
0 wendig. ■0 agile. ■
Die Ausbreitung von preisgünstigen, mit einem PC über eine Schnittstelle koppelnden digitalen Standbild- und Videokameravorrichtungen erfordert Lösungen zur schnellen, dynami-The proliferation of low-cost digital still and video camera devices that interface with a PC requires solutions for fast, dynamic
· rni-f — ···. ···· rni-f — ···. ···
sehen, preisgünstigen und intelligenten Erkennung und Korrektur von fehlerhaften Pixeln.see, inexpensive and intelligent detection and correction of faulty pixels.
ZUSAMMENFASSUNG DER ERFINDUNG
5SUMMARY OF THE INVENTION
5
Die vorliegende Erfindung stellt eine kostengünstige Kamera durch Implementieren der- Hauptfunktionen in der Hauptrechnersoftware bereit. Dies wird durch direktes Senden von digitalisierten Rohdaten von der Kamera zum Hauptrechner bewerkstelligt. Das erhöhte Volumen von Rohdaten wird durch entweder ein verbessertes Komprimierungs-ZDekomprimierungs-Schema unter Verwendung einer verlustlosen Komprimierung, unter Verwendung einer verlustbehafteten Komprimierung oder unter Verwendung eines gemeinsam genutzten Busses mit höherer Bandbreite bewältigt. Durch Verlagern von solchen Funktionen wie Farbverarbeitung und Skalierung zum Hauptrechner kann die Pixelkorrektur auch zum Hauptrechner verlagert werden. Dies ermöglicht wiederum die Beseitigung des Bildpufferspeichers aus der Kamera. Schließlich kann die Kamera eine kostengünstige Linse verwenden, indem eine Vignettierungskorrektur mit einem Vignettierungskorrekturwert implementiert wird, der in einem Register der Kamera für einen späteren Zugriff vom Hauptrechner zum Durchführen von Korrekturen gespeichert wird.The present invention provides a low cost camera by implementing the main functions in the host software. This is accomplished by sending digitized raw data directly from the camera to the host. The increased volume of raw data is handled by either an improved compression/decompression scheme using lossless compression, using lossy compression, or using a higher bandwidth shared bus. By moving such functions as color processing and scaling to the host, pixel correction can also be moved to the host. This in turn allows the frame buffer to be eliminated from the camera. Finally, the camera can use a low cost lens by implementing vignetting correction with a vignetting correction value stored in a register of the camera for later access by the host to make corrections.
Bei einem Ausführungsbeispiel dekomprimiert der Hauptrechner die übertragenen Daten unter Verwendung eines Prozessors mit der Fähigkeit zu gleichzeitigen Operationen an mehreren gepackten Pixelwerten, wie z.B. die Intel MMX™ Technologie. Dies hält eine ausreichende Dekomprimierungsgeschwindigkeit 0 für eine größere Menge an Daten mit minimaler Auswirkung auf die Bildrate aufrecht. Bei einem Ausführungsbeispiel wird eine Gruppe von Bits vom Datenstrom dupliziert und zu mehreren Positionen in einem Register geliefert, wo sie gleichzeitig mit mehreren Maximalwerten verglichen werden können. Dies er-In one embodiment, the host decompresses the transmitted data using a processor with the capability of simultaneous operations on multiple packed pixel values, such as Intel MMX™ technology. This maintains sufficient decompression speed 0 for a larger amount of data with minimal impact on the frame rate. In one embodiment, a group of bits from the data stream are duplicated and delivered to multiple locations in a register where they can be compared to multiple maximum values simultaneously. This achieves
möglicht eine schnelle Feststellung dessen, wie viele Bits der Codierung mit variablen Bits einem Pixelwert entsprechen.allows a quick determination of how many bits of the variable bit coding correspond to a pixel value.
Bei einem Ausführungsbeispiel unter Verwendung einer verlustbehafteten Komprimierung werden die Vignettierungs-, Gamma-, Verzerrungs- oder Bildunschönheits-Korrektur und die Pixelkorrektur in der Kamera selbst durchgeführt, da die Fähigkeit zum Korrigieren durch den Informationsverlust während des verlustbehafteten Komprimierungs-/Dekomprimierungsprozesses verschlechtert werden würde. Die Farbverarbeitung, Skalierung und andere Vorgänge werden jedoch immer noch im Hauptrechner durchgeführt, wobei eine kostengünstige Kamera erreicht wird, die keinen Bildpufferspeicher und keine Farbverarbeitungsund Skalierungsschaltung benötigt.In an embodiment using lossy compression, vignetting, gamma, distortion or image blurring correction and pixel correction are performed in the camera itself, since the ability to correct would be degraded by the loss of information during the lossy compression/decompression process. However, color processing, scaling and other operations are still performed in the main computer, achieving a low-cost camera that does not require frame buffer memory and color processing and scaling circuitry.
Bei einem Ausführungsbeispiel kann die Kamera- unter Verwendung einer kostengünstigen Linse, selbst wenn diese eine Vignettierungsverzerrung aufweist, kostengünstig gemacht werden. Die wird durch Bereitstellen eines Speicherelements wie z.B. eines Registers in der Kamera bewerkstelligt. Dieses Speicherelement wird zum Zeitpunkt der Herstellung mit einem Wert entsprechend dem Ausmaß an Vignettierung oder erforderlicher Korrektur programmiert. Das Register kann dann vom Hauptrechner während des Betriebs gelesen werden, um die Menge an Korrektur festzustellen, die in einem Vignettierungskorrekturalgorithmus erforderlich ist, welcher im Hauptrechner an den empfangenen Daten vor irgendeiner Weiterverarbeitung ausgeführt wird. Bei einem alternativen Ausführungsbeispiel kann das Speicherelement einen Korrektur- oder Wertfaktor für andere Defekte der Linse oder andere Aspekte der Kamera speichern. Beispielsweise könnte ein Hinweis auf schlechte Pixelstellen für anschließendes Lesen und Korrigieren durch den Hauptrechner gespeichert werden.In one embodiment, the camera can be made inexpensive using an inexpensive lens even if it has vignetting distortion. This is accomplished by providing a memory element such as a register in the camera. This memory element is programmed at the time of manufacture with a value corresponding to the amount of vignetting or correction required. The register can then be read by the host during operation to determine the amount of correction required in a vignetting correction algorithm which is performed in the host on the received data prior to any further processing. In an alternative embodiment, the memory element can store a correction or value factor for other defects in the lens or other aspects of the camera. For example, an indication of bad pixel locations could be stored for subsequent reading and correction by the host.
&iacgr;&ogr;&iacgr;&ogr;
Für ein weiteres Verständnis der Art und der Vorteile der Erfindung sollte auf die folgende Beschreibung in Verbindung mit den zugehörigen Zeichnungen Bezug genommen werden.For a further understanding of the nature and advantages of the invention, reference should be made to the following description taken in conjunction with the accompanying drawings.
KURZBESCHREIBUNG DER ZEICHNUNGENBRIEF DESCRIPTION OF THE DRAWINGS
Fig. 1 ist ein Blockdiagramm einer Videokamera des Standes der Technik;Fig. 1 is a block diagram of a prior art video camera;
Fig. 2 ist ein Blockdiägramm von einem Ausführungsbeispiel der Erfindung, bei dem die Hauptfunktionen in einen Hauptrechner verlagert sind;Fig. 2 is a block diagram of an embodiment of the invention in which the main functions are relocated to a main computer;
Fig. 3 ist . ein Diagramm, das die Operation von parallelen Huffman-Decodiervorgängen darstellt;Fig. 3 is a diagram illustrating the operation of parallel Huffman decoding processes;
Fig. 4 stellt ein Beispiel eines Computersystems dar, das zum Ausführen der Verfahren der Ausführungsbeispiele der vorliegenden Erfindung verwendet wird;4 illustrates an example of a computer system used to carry out the methods of embodiments of the present invention;
Fig. 5 stellt ein vereinfachtes Systemblockdiagramm eines typischen Computer systems 100, das zum Ausführen der Verfahren der Ausführungsbeispiele der vorliegenden Erfindung verwendet wird, dar;5 illustrates a simplified system block diagram of a typical computer system 100 used to carry out the methods of embodiments of the present invention;
Fig. 6 ist ein vereinfachtes Blockdiagramm eines SIMD-Systems 300 gemäß einem Ausführungsbeispiel der vorliegenden Erfindung; 6 is a simplified block diagram of a SIMD system 300 according to an embodiment of the present invention;
Fig. 7 stellt ein vereinfachtes Blockdiagramm eines Systems 400 gemäß einem Ausführungsbeispiel der vorliegenden Erfindung dar; ■7 illustrates a simplified block diagram of a system 400 according to an embodiment of the present invention; ■
iiii
Fig. 8 stellt ein sequentielles Decodierverfahren 500 zum Decodieren von Huffman-codierten Daten gemäß einem Ausführungsbeispiel der vorliegenden Erfindung dar; undFig. 8 illustrates a sequential decoding method 500 for decoding Huffman encoded data according to an embodiment of the present invention; and
Fig. 9 stellt ein paralleles Decodierverfahren 600 zum Decodieren von Huffman-codierten Daten gemäß einem weiteren Ausführungsbeispiel der vorliegenden Erfindung dar,-Fig. 9 illustrates a parallel decoding method 600 for decoding Huffman encoded data according to another embodiment of the present invention,-
Fig. 10 ist eine Zeichnung einer Pixelmatrix und einer HeI-ligkeitskurve, die den Vignettierungseffekt darstellt;Fig. 10 is a drawing of a pixel matrix and a brightness curve illustrating the vignetting effect;
Fig. 11 ist ein Blockdiagramm eines Ausführungsbeispiels einer erfindungsgemäßen Vignettierungskorrektur;Fig. 11 is a block diagram of an embodiment of a vignetting correction according to the invention;
Fig. 12 stellt einen vereinfachten Ablaufplan eines Verfahrens zum Erkennen und Korrigieren von fehlerhaften Pixeln gemäß einem Ausführungsbeispiel der vorliegenden Erfindung dar,-Fig. 12 illustrates a simplified flow chart of a method for detecting and correcting defective pixels according to an embodiment of the present invention,
Fig. 13 ist ein Blockdiagramm eines Videokamerasystems gemäß 0 einem Ausführungsbeispiel der vorliegenden Erfindung;Fig. 13 is a block diagram of a video camera system according to an embodiment of the present invention;
Fig. 14 ist ein Ablaufdiagramm der Impulse, die zu einer CMOS-Sensormatrix geliefert werden, gemäß einem Ausführungsbeispiel der vorliegenden Erfindung.
25Figure 14 is a timing diagram of the pulses provided to a CMOS sensor array according to an embodiment of the present invention.
25
BESCHREIBUNG DER SPEZIELLEN AUSFÜHRUNGSBEISPIELEDESCRIPTION OF SPECIAL EMBODIMENTS
I GESAMTSYSTEM : I OVERALL SYSTEM :
0 Fig. 2 ist ein 'Blockdiagramm eines Ausführungsbeispiels der Erfindung. Eine Kamera 32 umfaßt eine Linse 10, einen Sensor und eine Steuerlogik 12 und einen ADC 14 wie im Stand der Technik. Die anderen Hauptfunktionen sind jedoch beseitigt, abgesehen von einem Komprimierungsblock 26 und einer Bus-Schnittstelle 28. Außerdem ist ein Korrekturregister 34 hin-0 Fig. 2 is a block diagram of an embodiment of the invention. A camera 32 comprises a lens 10, a sensor and control logic 12 and an ADC 14 as in the prior art. However, the other main functions are eliminated, apart from a compression block 26 and a bus interface 28. In addition, a correction register 34 is provided.
• · '· t• · '· t
zugefügt, um einen der Vignettierung der Linse 10 entsprechenden Wert zu speichern.to store a value corresponding to the vignetting of lens 10.
Die Kamera verbindet über einen gemeinsam genutzten Bus 3 0 mit dem Hauptrechner 36. Im Hauptrechner 36 sind die gezeigten Blöcke Programmierblöcke, die vom Prozessor des Hauptrechners 3 6 ausgeführt werden. Diese sind ein Dekomprimierungsblock 38, ein Vignettierungskorrekturblock 40, ein Pixelkorrekturblock 42, ein Farbverarbeitungsblock 44 und ein Skalierblock 46. Es ist auch ein Statistikspeicher 48, der ein Teil des Hauptrechnerspeichers sein kann, zum Speichern von Statistikinformationen über Pixel, die eine Korrektur benötigen, gezeigt.The camera connects to the main processor 36 via a shared bus 30. In the main processor 36, the blocks shown are programming blocks that are executed by the processor of the main processor 36. These are a decompression block 38, a vignetting correction block 40, a pixel correction block 42, a color processing block 44, and a scaling block 46. Also shown is a statistics memory 48, which may be part of the main processor memory, for storing statistical information about pixels that require correction.
II. HUFFMAN-DEKOMPRIMIERUNG II. HUFFMAN DECOMPRESSION
Vorzugsweise umfaßt der vom Hauptrechner 36 verwendete Prozessor die Fähigkeit, Operationen an mehreren gepackten Pixeln in einem einzelnen Register parallel auszuführen. Die Intel MMX™ Technologie stellt beispielsweise eine Anzahl von Befehlen für solche Operationen an gepackten Pixeln in den Mikroprozessorregistern bereit. Folglich ist es erwünscht, solche Funktionen auszunutzen, um die Verarbeitungsgeschwindigkeit zu steigern. Bestimmte Operationen eignen sich jedoch nicht für eine solche simultane Operation. Die Huffman-Komprimierung wird beispielsweise häufig für Videodaten verwendet und wird im Ausführungsbeispiel dieser Erfindung verwendet. Dies ist ein Komprimi erungsmechanismus mit variabler Codelänge. Mit anderen Worten, die Anzahl von Bits, die einem 0 Pixelwert entsprechen, könnten 1, 2, 3, 4 usw. sein und können von Pixel zu Pixel variieren. Ohne die Anzahl von Bits im voraus zu kennen, und mit verschiedenen Größen ist es nicht unmittelbar ersichtlich,- wie ein Register für gepackte Pixel zu verwenden ist, welches für jede der Pixeldarstellungen dieselbe Größe verwendet.Preferably, the processor used by host computer 36 includes the ability to perform operations on multiple packed pixels in a single register in parallel. For example, Intel MMX™ technology provides a number of instructions for such operations on packed pixels in the microprocessor registers. Accordingly, it is desirable to exploit such functions to increase processing speed. However, certain operations do not lend themselves to such simultaneous operation. For example, Huffman compression is often used for video data and is used in the embodiment of this invention. This is a variable code length compression mechanism. In other words, the number of bits corresponding to a 0 pixel value could be 1, 2, 3, 4, etc., and can vary from pixel to pixel. Without knowing the number of bits in advance, and with different sizes, it is not immediately apparent how to use a packed pixel register that uses the same size for each of the pixel representations.
&phgr; ·φ ·
Bei der begrenzten Bandbreite der heutigen USB-Technologie ist es erwünscht, irgendwie eine parallele Dekomprimierungsverarbeitung durchführen zu können, wenn die Kamera Rohdaten senden soll, die eine viel größere Menge an Daten aufweisen als Daten, die vorverarbeitet wurden. Dies wird nur durch Verwendung der Konfiguration von gepackten Pixeln zum Durchführen der Huffman-Decodierung.bewerkstelligt.With the limited bandwidth of today's USB technology, it is desirable to somehow be able to perform parallel decompression processing when the camera is to send raw data that has a much larger amount of data than data that has been preprocessed. This is only accomplished by using the packed pixel configuration to perform Huffman decoding.
Fig. 3 ist ein Diagramm, das allgemein darstellt, wie die parallele Huffman-Decodierung vor sich geht. Ein eingehender Datenstrom 50 ist durch eine Anzahl von Buchstaben dargestellt. Jeder Buchstabe ist ein willkürliches Symbol, das eine unterschiedliche Anzahl von Bits angibt. In dem gezeigten Beispiel wird die erste einer Anzahl von Bits, A, viermal dupliziert und in vier Positionen in einem ersten Register 52 gegeben. Ein zweites Register 54 speichert vier verschiedene Masken. Die Masken ermöglichen einen Vergleich mit. verschiedenen Teilen der Bits im Bitsegment A. Die Anzahl von Bits 0 von A, die untersucht wird, könnte beispielsweise 1, 2, 3 bzw. 4 sein. Diese würden dann mit den Maximalwerten für die Huffman-Codes für 1, 2, 3 und 4 Bits verglichen werden. Diese vier verschiedenen Maximalwerte werden in einem weiteren Register 56 gespeichert. Anstatt die Anzahl von Bits A mit vier verschiedenen Werten nacheinander zu vergleichen, kann dies somit parallel durchgeführt werden, selbst wenn die zu vergleichende Anzahl von Bits variabel ist. Diese Variation-wird unter Verwendung der Maskierungsoperation überwunden. Somit wird im Register an jeder Pixelstelle dieselbe Anzahl von Bits gespeichert, aber eine unterschiedliche Anzahl von Bits wird für jede der Pixelstellen durch die Maskenoperation verglichen. Fig. 3 is a diagram generally illustrating how parallel Huffman decoding proceeds. An incoming data stream 50 is represented by a number of letters. Each letter is an arbitrary symbol indicating a different number of bits. In the example shown, the first of a number of bits, A, is duplicated four times and placed in four positions in a first register 52. A second register 54 stores four different masks. The masks allow comparison to be made with different portions of the bits in bit segment A. For example, the number of bits 0 of A being examined could be 1, 2, 3, and 4, respectively. These would then be compared with the maximum values for the Huffman codes for 1, 2, 3, and 4 bits. These four different maximum values are stored in another register 56. Thus, instead of comparing the number of bits A with four different values one after the other, this can be done in parallel even if the number of bits to be compared is variable. This variation is overcome using the masking operation. Thus, the same number of bits are stored in the register at each pixel location, but a different number of bits are compared for each of the pixel locations by the masking operation.
In dem gezeigten Beispiel entspricht das Bitsegment A der Tatsache, daß es innerhalb des Maximumsegments M3 liegt, dasIn the example shown, the bit segment A corresponds to the fact that it lies within the maximum segment M3, which
dann in einer Gleichung verwendet wird, um eine kombinierte Huffman-Wertetabelle 58 zu indizieren. Unter Verwendung des arithmetischen Ergebnisses des vorherigen Vergleichs als Index, was gewöhnlich im Stand der Technik drei verschiedene Tabellensuchvorgänge erforderte, kann nun in einem einzigen Tabellensuchvorgang durchgeführt werden, wobei somit weitere Verarbeitungszeit gespart wird.is then used in an equation to index a combined Huffman value table 58. Using the arithmetic result of the previous comparison as an index, what usually required three different table lookups in the prior art can now be performed in a single table lookup, thus saving further processing time.
Fig. 4 stellt ein Beispiel eines Computersystems dar, das zum Ausführen der Software der vorliegenden Erfindung verwendet wird. Fig. 4 zeigt ein Computersystem 100, das einen Monitor 104, einen Bildschirm 102, ein Gehäuse 108, eine Tastatur 214 (siehe Fig. 5) und eine Maus 110 umfaßt. Die Maus 110 kann eine oder mehrere Tasten wie z.B. die Maustasten 112 aufweisen. Das Gehäuse 108 kann ein CD-ROM-Laufwerk 106 und ein Festplattenlaufwerk (nicht dargestellt) enthalten, die zum Speichern und Abrufen von Softwareprogrammen, die die vorliegende Erfindung beinhalten, verwendet werden können. Obwohl die CD-ROM 106 als entnehmbares Medium dargestellt ist, können andere entnehmbare greifbare Medien, einschließlich Disketten, Bandlaufwerken, ZI P®-Laufwerken und eines Flash-Speichers, verwendet werden. Das Gehäuse 108 kann auch vertraute Computerkomponenten (nicht dargestellt) wie z.B. einen Prozessor, einen Speicher und dergleichen enthalten.Figure 4 illustrates an example of a computer system used to execute the software of the present invention. Figure 4 shows a computer system 100 that includes a monitor 104, a display 102, a chassis 108, a keyboard 214 (see Figure 5), and a mouse 110. The mouse 110 may include one or more buttons such as the mouse buttons 112. The chassis 108 may include a CD-ROM drive 106 and a hard disk drive (not shown) that may be used to store and retrieve software programs incorporating the present invention. Although the CD-ROM 106 is shown as a removable medium, other removable tangible media may be used, including floppy disks, tape drives, ZI P® drives, and flash memory. The chassis 108 may also include familiar computer components (not shown) such as a processor, memory, and the like.
Fig. 5 stellt ein vereinfachtes Systemblockdiagramm eines typischen Computersystems 100 dar, das zum Ausführen der Software der Ausführungsbeispiele der vorliegenden Erfindung verwendet wird. Wie in Fig. 1 dargestellt, kann das Computersystern 100 den Monitor 104 umfassen. Das Computer system 100 kann ferner Untersysteme wie z.B. eine E/A-Steuereinheit 204, einen Systemspeicher 2 06, einen Zentralprozessor 208, einen Lautsprecher 210, eine entnehmbare Platte 212, eine Tastatur 214, eine Festplatte 216 und eine Netzwerkschnittstelle 218 umfassen. Andere Computersysteme, die zur Verwendung bei derFig. 5 illustrates a simplified system block diagram of a typical computer system 100 used to execute the software of embodiments of the present invention. As shown in Fig. 1, the computer system 100 may include the monitor 104. The computer system 100 may further include subsystems such as an I/O controller 204, a system memory 206, a central processor 208, a speaker 210, a removable disk 212, a keyboard 214, a hard disk 216, and a network interface 218. Other computer systems suitable for use in the
vorliegenden Erfindung geeignet sind, können zusätzliche oder weniger Untersysteme umfassen. Ein anderes Computersystem könnte beispielsweise mehr als einen Prozessor 208 (d.h. ein Mehrprozessorsystem) oder einen Cache-Speicher umfassen. Pfeile wie z.B. 22 0 stellen eine Systembusarchitektur des Computersystems 100 dar. Diese Pfeile 220 stellen jedoch ein beliebiges Verbindungsschema dar, das zum Verbinden der Untersysteme dient.The computer systems suitable for the present invention may include additional or fewer subsystems. For example, another computer system could include more than one processor 208 (i.e., a multiprocessor system) or a cache memory. Arrows such as 220 represent a system bus architecture of the computer system 100. However, these arrows 220 represent any interconnection scheme used to connect the subsystems.
Ein lokaler Bus könnte beispielsweise verwendet werden, um den Zentralprozessor 208 mit dem Systemspeicher 206 zu verbinden. Eine Bilderfassungsvorrichtung wie z.B. eine Kamera mit ladungsgekoppeltem Bauelement (CCD) kann auch mit dem Computersystem 100 zum Erfassen von Bilddaten verbunden sein.For example, a local bus could be used to connect the central processor 208 to the system memory 206. An image capture device such as a charge-coupled device (CCD) camera may also be connected to the computer system 100 for capturing image data.
Die Bilderfassungsvorrichtung kann mit dem Computersystem 100 über dieselbe oder eine andere Busarchitektur, wie z.B. einen universellen seriellen Bus (USB) Und dergleichen, verbunden sein. Der USB kann eine Unterstützung zum Einstecken und Arbeiten für mehr als 100 angeschlossene Peripheriegeräte unter Verwendung einer Identifikationsnummer, die mit einer Datenbank von Gerätetreibern verglichen wird, vorsehen. Der USB kann auch mit dem Computer system 100 über die E/ASteuereinheit 204 oder die Netzwerkschnittstelle 218 verbunden sein. Außerdem kann das Computersystem 100 dazu konfiguriert sein, über beispielsweise die E/A-Steuereinheit 204 oder die Netzwerkschnittstelle 218 mit dem Internet in Verbindung zu stehen.. Folglich können Daten zu und von dem Computersystem 100 durch eine Vielzahl von Geräten übertragen werden. Das in Fig. 4 gezeigte Computersystem 100 ist-.nur ein Beispiel eines Computersystems, das zur Verwendung bei der vorliegenden Erfindung geeignet ist. Andere Konfigurationen von Untersystemen, die zur Verwendung bei der vorliegenden Erfindung geeignet sind, sind für einen üblichen Fachmann leicht ersichtlich.The image capture device may be connected to the computer system 100 via the same or a different bus architecture, such as a universal serial bus (USB), and the like. The USB may provide support for plugging and operating more than 100 connected peripheral devices using an identification number that is compared to a database of device drivers. The USB may also be connected to the computer system 100 via the I/O controller 204 or the network interface 218. In addition, the computer system 100 may be configured to communicate with the Internet via, for example, the I/O controller 204 or the network interface 218. Thus, data may be transferred to and from the computer system 100 by a variety of devices. The computer system 100 shown in FIG. 4 is just one example of a computer system suitable for use with the present invention. Other configurations of subsystems suitable for use with the present invention will be readily apparent to one of ordinary skill in the art.
. .. .
Die vorliegende Erfindung kann in einem beliebigen Mikroprozessor verkörpert werden, der zu einer Ausführung eines einzelnen Befehls an mehreren Daten (SIMD, Single Instruction Multiple Data) in der Lage ist. Die Intel® MMX™ Mikroprozessoren, der Sun® UltraSPARC® mit Visual-Befehlsatz, 3DNow!™ von Advance Micro Device, Inc.®, Intel® MMX™ mit Strearning-SIMD-Erweiterungen und dergleichen können beispielsweise verwendet werden. Beispielhalber wird eine Implementierung unter Verwendung des Intel® MMX™ beschrieben. Die MMX™ Technologie wurde formal im Januar 1997 eingeführt, um die eine CPU erfordernden Multimediaanwendungen zu beschleunigen. Die MMX™ Technologie stellt einen Satz von Befehlen (57 Befehle) bereit, der von der Intel® Corporation eingeführt wurde. Sie kann eine Addition, Subtraktion, Multiplikation, logische und Stellenwertverschiebungen an einer Einheit von 64 Bits in demselben Befehl ausführen. Die Einheit von 64 Bits kann auch als 8 Bytes, 4 Worte, 2 Doppelworte oder 1 Vierfachwort behandelt werden. Befehle zur Sättigung der Arithmetik und zum Packen/Entpacken von Daten werden ebenso wie jene, die Daten zwischen MMX™ Registern und Ganzzahlenregistern übertragen, bereitgestellt. Weitere Informationen hinsichtlich der MMX™ Technologie sind in "Introduction to the Intel® Architecture MMX™ Technology Developer's Manual", Intel® (1996), zu finden, das durch den Hinweis in seiner Gesamtheit und für alle Zwecke hierin aufgenommen wird.The present invention may be embodied in any microprocessor capable of single instruction multiple data (SIMD) execution. For example, the Intel® MMX™ microprocessors, the Sun® UltraSPARC® with Visual instruction set, 3DNow!™ from Advance Micro Device, Inc.®, Intel® MMX™ with streaming SIMD extensions, and the like may be used. For example, an implementation using the Intel® MMX™ is described. The MMX™ technology was formally introduced in January 1997 to accelerate multimedia applications requiring a CPU. The MMX™ technology provides a set of instructions (57 instructions) introduced by Intel® Corporation. It can perform addition, subtraction, multiplication, logical and place shifts on a unit of 64 bits in the same instruction. The unit of 64 bits may also be treated as 8 bytes, 4 words, 2 double words, or 1 quad word. Instructions for saturating arithmetic and packing/unpacking data are provided, as are those that transfer data between MMX™ registers and integer registers. More information regarding MMX™ technology can be found in "Introduction to the Intel® Architecture MMX™ Technology Developer's Manual," Intel® (1996), which is incorporated herein by reference in its entirety and for all purposes.
Fig. 6 ist ein vereinfachtes Blockdiagramm eines SIMD-Systems 3 00. Das System 3 00 umfaßt einen MMX™ Prozessor 302, der derzeit einen Satz von 57 Befehlen unterstützt. Der MMX™ Prozessor kann innerhalb einer CPU implementiert werden oder kann alternativ in einem separaten Chip implementiert werden.Fig. 6 is a simplified block diagram of a SIMD system 300. The system 300 includes an MMX™ processor 302 that currently supports a set of 57 instructions. The MMX™ processor may be implemented within a CPU or, alternatively, may be implemented in a separate chip.
-Der MMX™ Prozessor 302 empfängt Daten von den Registern 304a-h. Jedes der Register 304a-h ist 64 Bits breit. Jedes dieser Register kann 8x8, 16x4, 32x2, 64x1 Datenbits enthalten. Der MMX™ Prozessor 302 empfängt die Daten von den Regi--The MMX™ processor 302 receives data from the registers 304a-h. Each of the registers 304a-h is 64 bits wide. Each of these registers can contain 8x8, 16x4, 32x2, 64x1 data bits. The MMX™ processor 302 receives the data from the registers 304a-h.
17 ·*17 ·*
stern 304a-h und führt die erforderlichen Operationen an den Daten in einem Zyklus aus. Die verarbeiteten Daten werden dann entweder zu einem Speicher 306 oder zu den Registern 304a-h zurück geliefert. Der Speicher 306 kann innerhalb des MMX™ Prozessors 3 02 implementiert werden oder er kann alternativ ein gemeinsam genutzter Speicher sein. Folglich kann der MMX™ Prozessor 302 dieselben Operationen an verschiedenen Daten gleichzeitig ausführen, daher weist er eine SIMD-Architektur auf. . .star 304a-h and performs the required operations on the data in one cycle. The processed data is then returned to either a memory 306 or to the registers 304a-h. The memory 306 may be implemented within the MMX™ processor 302 or it may alternatively be a shared memory. Consequently, the MMX™ processor 302 can perform the same operations on different data simultaneously, hence it has a SIMD architecture. . .
..
Fig. 7 stellt ein vereinfachtes Blockdiagramm eines Systems 400 unter Verwendung des USB dar. Eine Kamera 402 erfaßt Bilder und liefert sie zu einem Bitstrom-Umwandlungsblock 404. Die Kamera 402 kann eine Schaltung zur Umwandlung von analogen Daten in digitale Daten umfassen. Die Kamera 402 kann auch eine Schaltung zum Durchführen einer Datenkomprimierung und/oder -codierung enthalten. Die Kamera 402 und der Bitstrom-Umwandlungsblock 404 sind über eine Anschlußeinheit 406 verbunden. Die Anschlußeinheit 406 kann aus einer Anzahl von Anschlußeinheiten oder Busarchitekturen ausgewählt sein, die üblichen Fachleuten gut bekannt sind. Die Anschlußeinheit 406 ist vorzugsweise ein USB-Anschluß. In einigen Implementierungen sieht USB eine Bandbreite von 12 MB/s vor. Eine andere Wahl für die Anschlußeinheit 406 kann Firewire (IEEE 1394) sein, der eine Bandbreite von 100 MB/s, 200, 400 oder 800 MB/s vorsehen kann. Ein USB-Anschluß ist für einige Ausführungsbeispiele bevorzugt, da er ein gespeister Bus ist, der gegenwärtig bis zu 500 itiA und 5 V liefert. Die vom. USB gelieferte Leistung kann verwendet werden, um die mit dem Bus ver-0 bundenen Geräte zu betreiben, wie z.B. die Kamera 402. Außerdem ist der USB weniger kostspielig zu implementieren. Da der USB nicht dieselbe Bandbreite aufweist wie Firewire, kann der USB in einigen Ausführungsbeispielen verwendet werden,- wenn die Daten vor der Übertragung auf dem USB zuerst komprimiertFigure 7 illustrates a simplified block diagram of a system 400 using USB. A camera 402 captures images and provides them to a bitstream conversion block 404. The camera 402 may include circuitry for converting analog data to digital data. The camera 402 may also include circuitry for performing data compression and/or encoding. The camera 402 and the bitstream conversion block 404 are connected via a connector 406. The connector 406 may be selected from a number of connectors or bus architectures well known to those of ordinary skill in the art. The connector 406 is preferably a USB connector. In some implementations, USB provides a bandwidth of 12 MB/s. Another choice for the connector 406 may be Firewire (IEEE 1394), which may provide a bandwidth of 100 MB/s, 200, 400, or 800 MB/s. A USB connector is preferred for some embodiments because it is a powered bus that currently provides up to 500 μA and 5 V. The power provided by the USB may be used to operate the devices connected to the bus, such as the camera 402. In addition, the USB is less expensive to implement. Since the USB does not have the same bandwidth as Firewire, the USB may be used in some embodiments if the data is first compressed before being transmitted on the USB.
.35 werden. -: · . ..35 will be. - : · . .
18 ·*·18 ·*·
Folglich kann die Kamera 402 eine Komprimierungsschaltung enthalten, um die erfaßten Bilder vor dem Senden der Daten zum Bitstrom-Umwandlungsblock .404 zu komprimieren. Die Kamera 402 kann eine beliebige Anzahl von Vorrichtungen zum Erfassen von Bildern, einschließlich eines CCD, eines komplementären Metalloxid-Halbleiters (CMOS) und dergleichen, sein. Der Bitstrom-Umwandlungsblock 404 kann dazu konfiguriert sein, seriell übertragene Daten in Datenpakete umzuwandeln. Der Bitstrom-Umwandlungsblock 404 kann beispielsweise Daten für jedes Vollbild ansammeln und die angesammelten Daten zu einem Dekomprimierungsblock 408 senden. Das Vollbild von Daten kann eine beliebige Größe aufweisen, ist jedoch vorzugsweise 352x288 Pixel. Das Vollbild kann auch ein Block von 320x240, 176x144 oder 160x120 Pixeln sein. In einigen Ausführungsbeispielen kann das Vollbild von Daten ein Block von 640x480 Pixeln sein. Der Dekomprimierungsblock 408 dekomprimiert und/oder decodiert die vom Bitstrom-Umwandlungsblock 404 empfangenen Daten. Die Decodierung kann gemäß der Huffman-Codierung, arithmetischen Codierung, anderen Arten einer statistischen Codierung und dergleichen erfolgen. Der Bitstrom-Umwandlungsblock 404 kann auch Puffer zum Speichern der von der Kamera 402 empfangenen Daten und der zum Dekomprimierungsblock 408 gesandten Daten umfassen.Thus, camera 402 may include compression circuitry to compress the captured images prior to sending the data to bitstream conversion block 404. Camera 402 may be any number of devices for capturing images, including a CCD, a complementary metal oxide semiconductor (CMOS), and the like. Bitstream conversion block 404 may be configured to convert serially transmitted data into data packets. For example, bitstream conversion block 404 may accumulate data for each frame and send the accumulated data to a decompression block 408. The frame of data may be any size, but is preferably 352x288 pixels. The frame may also be a block of 320x240, 176x144, or 160x120 pixels. In some embodiments, the frame of data may be a block of 640x480 pixels. The decompression block 408 decompresses and/or decodes the data received from the bitstream conversion block 404. The decoding may be performed according to Huffman coding, arithmetic coding, other types of statistical coding, and the like. The bitstream conversion block 404 may also include buffers for storing the data received from the camera 402 and the data sent to the decompression block 408.
■ ..■'..-■ ..■'..-
Die dekomprimierten Daten vom Dekomprimierungsblock 408 werden dann zu einem Farbumwandlungsblock 410 geliefert. Die Daten vom Dekomprimierungsblock 408 können in einem beliebigen Format vorliegen, sie sind jedoch vorzugsweise im YUV-Format, wobei Y die Luminanz ist, U. die Chrominanz Rot (auch als CR bekannt) ist, und V die Chrominanz Blau (auch als CB bekannt) ist. Der Umwandlungsblock 410 wandelt die Daten im YUV-Format in ein für eine Anzeige 412 geeignetes Format um, einschließlich RGB (Rot, Grün und Blau). Die Anzeige 412 kann eine beliebige Ausgabevorrichtung sein, einschließlich eines Druk-The decompressed data from decompression block 408 is then provided to a color conversion block 410. The data from decompression block 408 may be in any format, but is preferably in YUV format, where Y is luminance, U is red chrominance (also known as CR), and V is blue chrominance (also known as CB). Conversion block 410 converts the YUV format data to a format suitable for display 412, including RGB (red, green, and blue). Display 412 may be any output device, including a printer.
kers, eines in der Hand gehaltenen Geräts und dergleichen. Das System 400 umfaßt auch einen Speicher 414, der eine Speicherung für die Anzeige 412, den Farbumwandlungsblock 410 und den Bitstrom-Umwandlungsblock 404 vorsehen kann. Der Speicher 414 kann eine beliebige Art Speicher sein, wie z.B. ein dynamischer Direktzugriffsspeicher (DRAM), ein DRAM mit erweiterter Ausgabe (EDO DRAM) , ein synchroner DRAM (SDRAM) ein Video-RAM (VRAM), ein statischer RAM (SRAM) und dergleichen. Alternativ können der Bitstrom-Umwandlungsblock 404, der Farbumwandlungsblock 410 und die Anzeige 412 ihren eigenen lokalen Speicher aufweisen. Der Dekomprimierungsblock 408 kann auch seinen eigenen Speicher aufweisen oder bei Bedarf den Speicher 414 für seine Speicherung verwenden.ker, a handheld device, and the like. The system 400 also includes a memory 414 that may provide storage for the display 412, the color conversion block 410, and the bitstream conversion block 404. The memory 414 may be any type of memory, such as dynamic random access memory (DRAM), extended output DRAM (EDO DRAM), synchronous DRAM (SDRAM), video RAM (VRAM), static RAM (SRAM), and the like. Alternatively, the bitstream conversion block 404, the color conversion block 410, and the display 412 may have their own local memory. The decompression block 408 may also have its own memory or may use the memory 414 for its storage if desired.
Fig. 8 stellt ein sequentielles Decodierverfahren 500 zum Decodieren von Huffman-codierten Daten dar. Das sequentielle Decodierverfahren 500 verwendet die folgenden vier Tabellen zum Erzeugen des decodierten Werts:Fig. 8 illustrates a sequential decoding method 500 for decoding Huffman encoded data. The sequential decoding method 500 uses the following four tables to generate the decoded value:
MINCODE[I] - minimaler Wert von Codeworten mit der Länge J; MINCODE[I] - minimum value of code words with length J;
MAXCODE[IJ - maximaler Wert von Codeworten mit der Länge J; MAXCODE[IJ - maximum value of code words with length J;
HUFFVAL[J] - Tabelle von Symbolwerten, die dem J-ten Codewort entsprechen; und HUFFVAL[J] - table of symbol values corresponding to the J-th codeword; and
VALPTR[I] - der Index für den Start der Liste von Werten in HUFFVAL, die durch Codeworte der Länge I decodiert werden. VALPTR[I] - the index for the start of the list of values in HUFFVAL that are decoded by codewords of length I.
. Die minimale Länge aller Codeworte ist MinLength und die maximale Länge aller Codeworte ist MaxLength. Daher ist die Größe der Tabellen MINCODE, MAXCODE und VALPTR gleich [Max-0 Length-MinLength+1] . Die Größe von HUFFVAL hängt von der Anzahl von Codeworten ab und wird als N bezeichnet. Die drei Tabellen MINCODE, MAXCODE und VALPTR werden verwendet, um einen Zeiger in die Tabelle HUFFVAL für jeden gültigen Huffman-Code zu decodieren.. The minimum length of all codewords is MinLength and the maximum length of all codewords is MaxLength. Therefore, the size of the MINCODE, MAXCODE and VALPTR tables is equal to [Max- 0 Length-MinLength+1] . The size of HUFFVAL depends on the number of codewords and is denoted as N. The three tables MINCODE, MAXCODE and VALPTR are used to decode a pointer into the HUFFVAL table for each valid Huffman code.
In einem Schritt 502 werden BitStromdaten zum Decodieren empfangen. In einem Schritt 504 wird eine aktuelle Codelänge J auf MinLength gesetzt. Schritt 504 initialisiert auch eine Variable CODE auf NEXTBITS[MinLength], die die Codeworte von dem von Schritt 502 gelieferten Bitstrom enthält. Ein Schritt 506 vergleicht den Wert von CODE mit MAXCODE[I]. Wenn der Wert von CODE größer ist als der Wert von MAXCODE[I], wird angezeigt, daß das aktuelle Codewort eine größere Länge als J aufweist, das zuerst in Schritt 504 auf MinLength initialisiert wurde, und dem Schritt 506 folgt ein Schritt 508. In Schritt 508 wird der Wert von I um Eins inkrementiert. Schritt 508 liest auch das nächste Bit des Bitstroms in CODE. Schritt 508 aktualisiert den Wert von CODE durch Durchführen einer logischen Verschiebung nach links (SLL) am aktuellen Wert von CODE um ein. Bit und Füllen des niedrigstwertigen Bits von CODE mit dem nächsten Bit aus dem Bit strom ■ (NEXTBIT) ...In a step 502, bitstream data is received for decoding. In a step 504, a current code length J is set to MinLength . Step 504 also initializes a variable CODE to NEXTBITS[MinLength] which contains the codewords from the bitstream provided by step 502. A step 506 compares the value of CODE to MAXCODE[I]. If the value of CODE is greater than the value of MAXCODE[I], it is indicated that the current codeword has a greater length than J, which was first initialized to MinLength in step 504, and step 506 is followed by a step 508. In step 508, the value of I is incremented by one. Step 508 also reads the next bit of the bitstream into CODE. Step 508 updates the value of CODE by performing a logical shift left (SLL) on the current value of CODE by one. Bit and filling the least significant bit of CODE with the next bit from the bit stream ■ (NEXTBIT) ...
Wenn andererseits in Schritt 506 festgestellt wird, daß der Wert von CODE nicht größer ist als der Wert von MAXCODE[I], wird angezeigt, daß' das aktuelle Codewort eine Länge gleich oder geringer als J aufweist, und dem Schritt 506 folgt ein Schritt 510. Schritt 510 decodiert den Symbolwert. Schritt 510 berechnet einen Codewertzeiger J und verwendet dann J1 um den Symbolwert zu berechnen. Schritt 510 setzt J auf [VALPTR[I-MinLength] +CODE-MINCODE [ I-MinLength]}. Schritt 510 berechnet dann den Symbolwert durch Setzen von VALUE auf HUFFVAL[J]. Folglich führt Schritt 510 drei Tabellensuchvorgänge durch, einschließlich VALPTJ?, MINCODE und HUFFVAL, um den Symbolwert zu berechnen. Der berechnete Symbolwert (VALUE) wird dann zur Ausgabe zu einem Schritt 512 geliefert.On the other hand, if it is determined in step 506 that the value of CODE is not greater than the value of MAXCODE[I], the current codeword is indicated to have a length equal to or less than J, and step 506 is followed by a step 510. Step 510 decodes the symbol value. Step 510 calculates a code value pointer J and then uses J 1 to calculate the symbol value. Step 510 sets J to [VALPTR[I-MinLength] +CODE-MINCODE [ I-MinLength] }. Step 510 then calculates the symbol value by setting VALUE to HUFFVAL[J]. Thus, step 510 performs three table lookups including VALPTJ?, MINCODE , and HUFFVAL to calculate the symbol value. The calculated symbol value (VALUE) is then provided for output to a step 512.
Das sequentielle Decodierverfahren 500 wird für das nächste Codewort wiederholt.The sequential decoding process 500 is repeated for the next code word.
Die zum Codieren und Decodieren verwendete Huffman-Tabelle kann für jede Implementierung kundenspezifisch angepaßt werden. Aber die meisten Codierstandards sehen eine Standard-Huf fman-Tabel Ie vor. Die nachstehende Tabelle 1 stellt eine empfohlene Huffman-Tabelle für die Luminanz-DC-Differenz gemäß dem JPEG-Standard dar. Weitere Informationen hinsichtlich des JPEG-Standards sind in "JPEG - Still Image Data Compression Standard", Anhang A, ISO DIS 10918-1, Requirements and Guidelines, S. F-26, Van Nostrand Reinhold, 1993, von William B. Pennebaker und Joan L. Mitchell, zu finden, welches durch den Hinweis in seiner Gesamtheit und für alle Zwecke hierin aufgenommen wird.The Huffman table used for encoding and decoding can be customized for each implementation, but most coding standards provide a standard Huffman table. Table 1 below presents a recommended Huffman table for the luminance DC difference according to the JPEG standard. More information regarding the JPEG standard can be found in "JPEG - Still Image Data Compression Standard", Appendix A, ISO DIS 10918-1, Requirements and Guidelines, p. F-26, Van Nostrand Reinhold, 1993, by William B. Pennebaker and Joan L. Mitchell, which is incorporated by reference in its entirety and for all purposes.
Im JPEG-Standard ist MinLength 2 und MaxLength ist 16. Codeworte werden ferner zu einer Gruppierung in der Länge und in einer aufsteigenden Wertereihenfolge in jeder Längengruppe sortiert. Die Werte in MINCODE und MAXCODE sind ganze Zahlen von 16 Bits mit Vorzeichen.In the JPEG standard, MinLength is 2 and MaxLength is 16. Codewords are further grouped by length and sorted in an ascending order of values in each length group. The values in MINCODE and MAXCODE are signed integers of 16 bits.
In Tabelle 1 stellt Codewort die aktuellen Codeworte aus dem Bitstrom dar; Codelänge ist die Länge jedes Codeworts; Huff-Code ist der Wert jedes Codeworts und Huff-Wert ist der Huffman-Code für jedes Symbol.
■ ■ ■ In Table 1, Codeword represents the current codewords from the bitstream; CodeLength is the length of each codeword; HuffCode is the value of each codeword, and HuffValue is the Huffman code for each symbol.
■ ■ ■
Wenn man die Werte aus Tabelle 1 als Beispiel nimmt, wobei MinLength = 2 und MaxLength = 9, sind die Tabellenwerte der drei Tabellen, die von dem sequentiellen Decodierverfahren 500 verwendet werden, folgende:
10Taking the values from Table 1 as an example, where MinLength = 2 and MaxLength = 9, the table values of the three tables used by the sequential decoding method 500 are as follows:
10
MINCODE[8] = {0, 2, 14, 30, 62, 126, 254, 510};
MAXCODE[8] = {0, 6, 14, 30, 62, 126, 254, 510}; und
VALPTR [8] = {0, 1, 6, 7, 8, 9, 10, 11}. MINCODE[8] = {0, 2, 14, 30, 62, 126, 254, 510};
MAXCODE[8] = {0, 6, 14, 30, 62, 126, 254, 510}; and
VALPTR [8] = {0, 1, 6, 7, 8, 9, 10, 11}.
Wenn man beispielsweise einen eingehenden Bitstrom "010" betrachtet, setzt Schritt 504 J auf 2 und CODE auf "01". Schritt 506 erwidert JA, da "01" größer ist als MAXCODE[2-2], das 0 ist. In Schritt 508 wird J auf 3 inkrementiert und CODE wird auf "010" gesetzt. Schritt 506 wird erneut wiederholt und erwidert dieses Mal NEIN, da "010" geringer ist als MAXCODE [3-2], das 6 ist. Dann setzt Schritt 510 J" gleich 1. Schritt 510 sucht auch den Symbolwert für HUFFVAL[I] und gibt diesen Symbolwert (VALCZB) in Schritt 512 aus.For example, considering an incoming bit stream "010", step 504 sets J to 2 and CODE to "01". Step 506 returns YES because "01" is greater than MAXCODE[2-2], which is 0. In step 508, J is incremented to 3 and CODE is set to "010". Step 506 repeats again, this time returning NO because "010" is less than MAXCODE[3-2] , which is 6. Then step 510 sets J" equal to 1. Step 510 also looks up the symbol value for HUFFVAL[I] and outputs that symbol value (VALCZB) in step 512.
Folglich verschiebt das sequentielle Verfahren 500 wiederholt den Bitstrom in CODE und vergleicht den aktuellen Code mit dem maximalen Code derselben Länge. Wenn die Codelänge einmal bekannt ist, benötigt die Decodierung jedes Werts zwei Additionen und drei Tabellensuchvorgänge. Dieser Algorithmus ist 0 in der Art sequentiell, da die Codelängen sequentiell geprüft werden. Das heißt, vor dem Prüfen der Länge I besteht keine Angabe dessen, ob die aktuelle Codelänge J, 1+1, 1+2, usw. ist. . . ■ · ■ . . Thus, the sequential method 500 repeatedly shifts the bit stream into CODE and compares the current code to the maximum code of the same length. Once the code length is known, decoding each value requires two additions and three table lookups. This algorithm is 0 in nature sequential because the code lengths are checked sequentially. That is, before checking the length I, there is no indication of whether the current code length is J, 1+1, 1+2, etc. . . ■ · ■ . .
• ··
Fig. 9 stellt ein paralleles Decodierverfahren 600 zum Decodieren von Huffman-codierten Daten gemäß einem Ausführungsbeispiel der vorliegenden Erfindung dar. Beispielhalber wird eine Implementierung des parallelen Decodierverfahrens 600, wie z.B. mit Bezug auf Fig. 6 erörtert, beschrieben. Muster-JPEG-Werte, die bezüglich Fig. 8 und Tabelle 1 erörtert wurden, werden auch bei dem Musterausführungsbeispiel verwendet. Das parallele Decodierverfahren 600 kann jedoch in irgendeinem Prozessor durchgeführt werden, der zu SIMD-Ausführungen in der Lage ist, einschließlich Intel® MMX™ Mikroprozessoren, des Sun® UltraSPARC® mit Visual-Befehlssatz, 3DNowI™ von Advance Micro Device, Inc.®, Intel® MMX™ mit Streaming-SIMD-Erweiterungen und dergleichen.9 illustrates a parallel decoding method 600 for decoding Huffman encoded data in accordance with an embodiment of the present invention. For example, an implementation of the parallel decoding method 600 as discussed with reference to FIG. 6 is described. Sample JPEG values discussed with reference to FIG. 8 and Table 1 are also used in the sample embodiment. However, the parallel decoding method 600 may be performed in any processor capable of SIMD implementations, including Intel® MMX™ microprocessors, the Sun® UltraSPARC® with Visual instruction set, 3DNowI™ from Advance Micro Device, Inc.®, Intel® MMX™ with streaming SIMD extensions, and the like.
Wie vorstehend genau angegeben, kann die MMX™ Technologie Operationen an einer Einheit von 64.Bits in demselben Befehl ausführen. Die Einheit von 64 Bits kann auch als 8 Bytes, 4 Worte, 2 Doppelworte oder 1 Vierfachwort behandelt werden. Für das Beispiel gemäß Werten aus Tabelle 1 können die 64 Bits als vier 16-Bit-Register (oder 4 Worte) behandelt werden, da die maximale Codewortlänge in Tabelle 1 9 ist. Für das beispielhafte Ausführungsbeispiel von Fig. 9 werden die MMX™ Befehle PSRL, PSLL, und PSRA' verwendet, um den Inhalt von ausgewählten Variablen zu verschieben. PSRL bezeichnet gepacktes logisches Verschieben nach rechts. PSLL bezeichnet gepacktes logisches Verschieben nach links und PSRA bezeichnet gepacktes arithmetisches Verschieben nach rechts.As detailed above, MMX™ technology can perform operations on a unit of 64 bits in the same instruction. The unit of 64 bits can also be treated as 8 bytes, 4 words, 2 double words, or 1 quad word. For the example according to values from Table 1, the 64 bits can be treated as four 16-bit registers (or 4 words) since the maximum code word length in Table 1 is 9. For the exemplary embodiment of Figure 9, the MMX™ instructions PSRL, PSLL, and PSRA' are used to shift the contents of selected variables. PSRL denotes packed logical shift right. PSLL denotes packed logical shift left, and PSRA denotes packed arithmetic shift right.
Das parallele Decodierverfahren 600 empfängt den Bitstrom in einem Schritt 602. In einem Schritt 604 wird der Bitstrom in 4-Bit-Teilen (oder Quadbits (Viererbits)) mit einem mit dem dünnen Ende anfangenden Format angeordnet. Dies bedeutet, wenn der ursprüngliche Bitstrom die Form bO,bl,b2,b3, ... aufweist (wobei bi für das Byte i steht), dann weist der um-The parallel decoding process 600 receives the bit stream in a step 602. In a step 604, the bit stream is arranged in 4-bit parts (or quadbits) with a thin-tail format. This means that if the original bit stream has the form bO,bl,b2,b3, ... (where bi stands for byte i), then the converted
gewandelte Bitstrom die folgende Form auf: bl,b0/bl/b0/bl,b0,bl/b0,b3/b2,b3/b2,b3/b2,b3,b2,b3/b2,.·.converted bit stream has the following form: bl,b0 / bl / b0 / bl,b0,bl / b0,b3 / b2,b3 / b2,b3 / b2,b3,b2,b3 / b2,.·.
Diese Umwandlung kann unter Verwendung von 5,5 Zyklen für jedes 16-Bit-Wort implementiert werden. In einem Schritt 606 werden die Werte von I, MASK und CODE4 initialisiert. Wie vorstehend für das JPEG-Beispiel erörtert, wird J auf 2 initialisiert. Schritt 606 initialisiert CODE4 auf den ersten Satz von 4xl6-Bit-Codes (oder Quadbits) aus dem Bitstrom. Das parallele Decodierverfahren 600 verwendet MASK, um die Bits für eine Vergleichsoperation in Schritt 608 auszublenden. Der Anfangswert für MASK wird aufThis conversion can be implemented using 5.5 cycles for each 16-bit word. In a step 606, the values of I, MASK and CODE4 are initialized. As discussed above for the JPEG example, J is initialized to 2. Step 606 initializes CODE4 to the first set of 4xl6-bit codes (or quadbits) from the bitstream. The parallel decoding method 600 uses MASK to mask out the bits for a comparison operation in step 608. The initial value for MASK is set to
"1100,0000,0000,0000,1110,0000,0000,0000,1111,0000,0000,0000, 1111,1000,0000,0000b" oder "OXCOOO7EOOO7FOOCfSOO" gesetzt."1100,0000,0000,0000,1110,0000,0000,0000,1111,0000,0000,0000, 1111,1000,0000,0000b" or "OXCOOO 7 EOOO 7 FOOCfSOO" is set.
Dies ist die Bitmaske für die Codelängen 2 bis 5, die bei der ersten Iteration des parallelen Decodierverfahrens 600 geprüft werden.This is the bit mask for code lengths 2 to 5 that are checked in the first iteration of the parallel decoding process 600.
In einem Schritt 608 wird CODE4 durch den Wert von MASK ausgeblendet. Schritt 608 setzt MAXCODE4 auch auf MAXCODE4_P[I~I+3], das Werte von MAXCODE4_P für I1 1+1, 1+2 und 1+3 darstellt. Folglich enthält MAXCODE4 die maximalen Werte für die vier aufeinanderfolgenden Codelängen. Da die vier Werte für MAXCODE4 in einem einzelnen Befehl geladen werden, kann die MAXCODS-Tabelle für das parallele Decodierverfahren 600 folgendermaßen erzeugt werden:In a step 608, CODE4 is masked by the value of MASK . Step 608 also sets MAXCODE4 to MAXCODE4_P[I~I+3], which represents values of MAXCODE4_P for I 1 1+1, 1+2, and 1+3 . Consequently, MAXCODE4 contains the maximum values for the four consecutive code lengths. Since the four values for MAXCODE4 are loaded in a single instruction, the MAXCODS table for the parallel decoding method 600 can be generated as follows:
1 = 01 = 0
while I is less than (MaxLength-MinLength+2) do
: J = (J/4)*4+3-I%4while I is less than (MaxLength-MinLength+2) do
: J = (J/4)*4+3-I%4
MAXCODE4_P[I] = (2{16'MinLength'J) * MAXCODE [J] )+1 MAXCODE4_P[I] = (2 {16 ' MinLength ' J) * MAXCODE [J] )+1
1=1 + 11=1 + 1 ■■■■ . . '. . '
end whileendwhile
wobei "/" Division durch Abbruch bezeichnet und "%" eine Modulo-Operation bezeichnet. Die Werte von MAXCODE_P sind ganze Zahlen von 16 Bits ohne Vorzeichen. Die MAXCODE-Täbelle muß nur einmal für jede Huffman-Tabelle erzeugt werden.
. .where "/" denotes division by truncation and "%" denotes a modulo operation. The values of MAXCODE_P are 16-bit unsigned integers. The MAXCODE table only needs to be generated once for each Huffman table.
. .
Wenn man dasselbe Beispiel wie bei dem sequentiellen Huffman-Decodieralgorithmus, der mit Bezug auf Fig. 8 erörtert wurde, nimmt, weist die MAXCODE-Täbelle für den parallelen Algorithmus die folgenden Werte auf:
10Taking the same example as the sequential Huffman decoding algorithm discussed with reference to Fig. 8, the MAXCODE table for the parallel algorithm has the following values:
10
MAXC0DE_P[8] = {61441, 57345, 49153, 1, 65281, 65025, 64513, 63489} MAXC0DE_P[8] = {61441, 57345, 49153, 1, 65281, 65025, 64513, 63489}
Für dieses Beispiel muß die Dimension dieser Tabelle ein Vielfaches von 4 sein. Außerdem wird Null für jene Codelängen angenommen, die in der Huffman-Codetabelle nicht existieren.For this example, the dimension of this table must be a multiple of 4. In addition, zero is assumed for those code lengths that do not exist in the Huffman code table.
In einem Schritt 610 wird der Wert von MAXCODE4 mit CODE4 verglichen, das in den Schritten 606 und 608 initialisiert und maskiert wurde. Da bei den Ausführungsbeispielen, die die MMX™ Technologie verwenden, der MMX™ Befehl PCMPEQ nur Worte mit Vorzeichen vergleicht, kann diese Vergleichsoperation durch eine Subtraktion ohne Vorzeichen mit Sättigung und einen Vergleich mit Null durchgeführt werden. Die Werte von MÄXCODE+1 können in MAXCODE4 gespeichert werden. Wenn festgestellt wird, daß CODE4 größer ist als MAXCODE4, dann wird in einem Schritt 612 J um 4 inkrementiert und MASK wird durch arithmetisches Verschieben seines Werts um 4 Bits nach rechts aktualisiert. Der neue Wert von MASK erzeugt die Bitmaske für 0 die nächsten restlichen 4 Codewortlängen (6 bis 9) . Nach Schritt 612 werden die Schritte 608 und 610 wiederholt. Folglich werden für das Beispiel von Tabelle 1 die Schritte 608 und 610 zweimal wiederholt, einmal für Codewortlängen 2 bis 5 und einmal für Codewortlängen 6 bis 9.In a step 610, the value of MAXCODE4 is compared to CODE4 , which was initialized and masked in steps 606 and 608. Since in the embodiments using MMX™ technology, the MMX™ instruction PCMPEQ only compares signed words, this comparison operation can be performed by an unsigned subtraction with saturation and a comparison with zero. The values of MAXCODE+1 can be stored in MAXCODE4 . If CODE4 is determined to be greater than MAXCODE4, then in a step 612, J is incremented by 4 and MASK is updated by arithmetically shifting its value 4 bits to the right. The new value of MASK generates the bit mask for 0 for the next remaining 4 codeword lengths (6 through 9). After step 612, steps 608 and 610 are repeated. Consequently, for the example of Table 1, steps 608 and 610 are repeated twice, once for codeword lengths 2 to 5 and once for codeword lengths 6 to 9.
· ■ ■ .· ■ ■ .
IfIf
Wenn Schritt 610 einmal ein JA erwidert, stellt ein Schritt 614 fest, welche der vier Längen, die geprüft werden, das Symbol enthält. Folglich berechnet Schritt 614 einen Wert DIF1 der auf [MAXC0DE4-CODEZ-I] , um 4 Bits logisch nach rechts verschoben, gesetzt wird. Schritt 610 führt auch einen Tabellensuchvorgang durch, um den gefundenen Symbolwert (VALUE) zu liefern. Schritt 614 sucht den Symbolwert (VALUE) in einer Tabelle HUFFVAL_P. . Once step 610 returns YES, step 614 determines which of the four lengths being tested contains the symbol. Consequently, step 614 calculates a value DIF 1 which is set to [MAXC0DE4-CODEZ-I] logically shifted 4 bits to the right. Step 610 also performs a table lookup to provide the found symbol value (VALUE) . Step 614 looks up the symbol value (VALUE) in a table HUFFVAL_P. .
Für dieses Beispiel kann unter der Annahme 1<K17 eine Tabelle HUFFVAL_P unter Verwendung von [1+16* (MAXCODE[I]-CODE)] als Index erstellt werden. Es soll gelten:For this example, assuming 1<K17, a table HUFFVAL_P can be created using [1+16* (MAXCODE[I]-CODE)] as an index. The following applies:
M = max (MAXCODE[I] -MINCODE[I]) ; und
I=O, 1, 2, .... MaxLength-MinLength. M = max (MAXCODE[I] -MINCODE[I]) ; and
I=O, 1, 2, .... MaxLength-MinLength.
Die Tabelle HUFFVAL_P weist eine Größe von [16*(M+2)] auf. CODENUM[I] soll die Anzahl der Codeworte bezeichnen, deren Codelänge (I+MinLength) ist. CODE[J] soll den Codewert des J-ten Codes mit der Codelänge I bezeichnen. Die Einträge der großen HUFFVAL-Tabelle können folgendermaßen berechnet werden: The table HUFFVAL_P has a size of [16*(M+2)]. CODENUM[I] shall denote the number of code words whose code length is ( I+MinLength) . CODE[J] shall denote the code value of the J-th code with code length I. The entries of the large HUFFVAL table can be calculated as follows:
1=01=0
while J is less than (MaxLength-MinLength+1) dowhile J is less than (MaxLength-MinLength+1) do
J=O
while J is less than CODENUM[I] do J=O
while J is less than CODENUM[I] do
HUFFVAL_P[J+l6* (MAXCODE[I]+1-CODE[J]) ]=HUFFVAL[VALPTR[I] +CODE[J]
-MINCODE[I]] HUFFVAL_P[ J+l6* (MAXCODE[I] +1- CODE[J]) ]=HUFFVAL[VALPTR[I] +CODE[J]
-MINCODE[I]]
-- J = J +1J = J +1 ■ , ■■ , ■
end while
J = J + 1
end while
'■■..■ endwhile
J = J + 1
endwhile
'■■..■
Folglich sind die Werte in der Tabelle HUFFVAL_P die maximale Größe von ganzen Zahlen von 16 Bits ohne Vorzeichen in Abhängigkeit von der Anzahl der Huffman-Codes. Durch Kombinieren der drei Tabellensuchvorgänge des sequentiellen Verfahrens zu einem werden die Befehle, die zum Indizieren eines Huffman-Codewerts erforderlich sind, signifikant verringert. Gleichzeitig spart die Verringerung der Anzahl von Tabellensuchvorgängen wertvollen Registerplatz. Man beachte auch, daß {MAXCODE[I]+1-CODE) berechnet wurde, als die Codelänge ermittelt wurde, und für diesen Tabellensuchvorgang zur Verfügung steht.Consequently, the values in the HUFFVAL_P table are the maximum size of 16-bit unsigned integers depending on the number of Huffman codes. By combining the three table lookups of the sequential method into one, the instructions required to index a Huffman code value are significantly reduced. At the same time, reducing the number of table lookups saves valuable register space. Also note that {MAXCODE[I]+1-CODE) was calculated when the code length was determined and is available for this table lookup.
In einem Schritt 616 wird der berechnete Symbolwert (VALUE) ausgegeben. Wenn die Codelänge des aktuellen Huffman-Codes in Schritt 614 einmal ermittelt ist, kann das aktuelle 4xl6-Bit-Codewort nach links verschoben werden und die gleiche Anzahl von Bits vom nächsten 4xl6-Bit-Codewort kann eingeschoben werden. Das Decodieren des nächsten Huffman-Codes kann dann gestartet werden.In a step 616, the calculated symbol value (VALUE) is output. Once the code length of the current Huffman code is determined in step 614, the current 4xl6-bit code word can be shifted to the left and the same number of bits from the next 4xl6-bit code word can be inserted. Decoding of the next Huffman code can then be started.
Folglich liest das parallele Decodierverfahren 600 4 Datenbits auf einmal aus dem Bitstrom ein. Alle fortlaufenden 4-Bit-Längen werden parallel geprüft, um festzustellen, ob das aktuelle Codewort in diesen Bereich fällt. Anstatt der erforderlichen 16 Prüfungen, um den Bereich 1 bis 16 in dem sequentiellen Algorithmus zu erfassen, sind nur 4 Prüfungen erforderlich, um denselben Bereich zu erfassen. Eine weitere signifikante Verbesserung besteht darin, die drei Tabellensuchvorgänge zum Decodieren zu einem einzigen Tabellensuch-Vorgang zu kombinieren. Dies hat den Effekt, Berechnungen sowie die Registernutzung zu minimieren, was in vielen Situationen sehr wertvoll sein kann.Thus, the parallel decoding method 600 reads 4 bits of data at a time from the bit stream. All consecutive 4-bit lengths are checked in parallel to determine if the current codeword falls within that range. Instead of the 16 checks required to cover the range 1 to 16 in the sequential algorithm, only 4 checks are required to cover the same range. Another significant improvement is to combine the three table lookups for decoding into a single table lookup. This has the effect of minimizing computations as well as register usage, which can be very valuable in many situations.
MUSTERAUSFÜHRUNGSBEISPIEL FÜR LÄNGEN 1 BIS 8 ■ .' SAMPLE DESIGN EXAMPLE FOR LENGTHS 1 TO 8 ■ .'
' ■' ■
Das vorstehend erörterte beispielhafte Ausführungsbeispiel nimmt an, daß die Codeworte Längen zwischen 2 und 9 aufweisen. Wenn jedoch die Codeworte Längen zwischen 1 und 8. aufweisen, kann die Decodierung an Einheiten von 8 Bits ausgeführt werden. Ein Maximum von einer Prüfung anstatt von 8 ist für jedes Codewort erforderlich. Dies erfordert, daß der Bitstrom zu 8x8 Bits erweitert wird. Wenn beispielsweise der Eingangsbitstrom "bO,bl,..." ist (wobei bi für das Byte i steht), ist der umgewandelte Bitstrom bO^CbCbO^O^O^O^O^l^l^l^l^l^l^l^l, . . . ". Die anfängliche Bitmaske ist nunThe exemplary embodiment discussed above assumes that the codewords have lengths between 2 and 9. However, if the codewords have lengths between 1 and 8, the decoding can be performed in units of 8 bits. A maximum of one check instead of 8 is required for each codeword. This requires that the bitstream be expanded to 8x8 bits. For example, if the input bitstream is "bO,bl,..." (where bi stands for byte i), the converted bitstream is bO^CbCbO^O^O^O^O^l^l^l^l^l^l^l, . . . ". The initial bitmask is now
"10000000,11000000,11100000,11110000,11111000,11111100,111111 10,11111111 b" oder"10000000,11000000,11100000,11110000,11111000,11111100,111111 10,11111111 b" or
Die Tabelleneinträge werden folgendermaßen erzeugt:The table entries are created as follows:
J=OJ=O
while J is less than (MaxLength-MinLength +1) dowhile J is less than (MaxLength-MinLength +1) do
J = (1/8)*8 + 7 - J%8
MAXCODE_P [I ]= (2i8-MinLength~I) * MAXCODE [J] )+l J = (1/8)*8 + 7 - J%8
MAXCODE_P [I ]= (2 i8 - MinLength ~ I) * MAXCODE [J] )+l
1=1 + 1
end while 1=1 + 1
endwhile
J=I .J=I .
while J is less than 9 dowhile J is less than 9 do
J=O
while J is less, than CODENUM[I] doJ=O
while J is less than CODENUM[I] do
HUFFVAL_P[J+8*(MAXCODE[I]+1-CODE
[J] ) ] =HUFFVAL [ VALPTR [I] + CODE[J]
-MINCODE[I]] HUFFVAL_P [J+8*( MAXCODE[I]+1-CODE [J] ) ] =HUFFVAL [ VALPTR [I] + CODE[J]
-MINCODE[I]]
J = J + 1
end while
1=1+1 J = J + 1
endwhile
1=1+1
end while . 'end while . '
■35 ' ■ · . ■ ■ ' ' ■'-·■35 ' ■ · . ■ ■ ' ' ■'-·
Die Werte für die Tabelle HUFFVAL_P sind ganze Zahlen von 8 Bits ohne Vorzeichen. Die Werte für die Tabelle MAXCODE_P sind ganze Zahlen von 8 Bits ohne Vorzeichen.The values for the HUFFVAL_P table are 8-bit unsigned integers. The values for the MAXCODE_P table are 8-bit unsigned integers.
MUSTERAUSFÜHRUNGSBEISPIEL FÜR LÄNGEN 1 BIS 32SAMPLE DESIGN EXAMPLE FOR LENGTHS 1 TO 32
Wenn die Länge der Codeworte zwischen 1 und 32 liegt, kann die Decodierung an Einheiten von 32 Bits durchgeführt werden. Ein Maximum von 8 Prüfungen anstelle von 16 Prüfungen ist erforderlich, um die Länge eines Codeworts zu ermitteln. Der Bitstrom wird in eine Form von 2x32 Bits folgendermaßen erweitert: If the length of the codewords is between 1 and 32, decoding can be performed on units of 32 bits. A maximum of 8 checks instead of 16 checks are required to determine the length of a codeword. The bit stream is expanded into a form of 2x32 bits as follows:
Eingangsbitstrom: b0,bl,b2,b3,b4,b5,b6,b7,...
Ausgangsbitstrom:Input bit stream: b0,bl,b2,b3,b4,b5,b6,b7,...
Output bit stream:
b3,b2,bl,b0,b3,b2,bl,b0,b7,b6,b5,b4,b7,b6,b5,b4,...b3,b2,bl,b0,b3,b2,bl,b0,b7,b6,b5,b4,b7,b6,b5,b4,...
Die anfängliche Bitmaske ist nunThe initial bitmask is now
"10000000,00000000,00000000,00000000,11000000,00000000,000000"10000000,00000000,00000000,00000000,11000000,00000000,000000
00,00000000,00000000. b" oder "0x8000,0000,C000,0000".
2000,00000000,00000000. b" or "0x8000,0000,C000,0000".
20
Die Tabelleneinträge werden auch folgendermaßen berechnet:The table entries are also calculated as follows:
J=O ' 'J=O ' '
while J is less than 32 do
J = (1/2)*2 + 1 - J%2while J is less than 32 do
J = (1/2)*2 + 1 - J%2
■ MAXCODE_P[I]=(2{32~MinLengch'I) *MAXCODE[J] ) +1■ MAXCODE_P[I]=(2 {32 ~ MinLengch ' I) *MAXCODE[J] ) +1
1=1 + 1
end while1=1 + 1
endwhile
I=I ■ .·■ . ■I=I ■ .·■ . ■
while I is less than 32 do
J=O
while J is less than CODENUM[I] dowhile I am less than 32 do
J=O
while J is less than CODENUM[I] do
HUFFVAL_P[1+32*(MAXCODE[I]+1-CODE[J])]=HUFFVAL[VALPTR[I]+CODE[J]
HUFFVAL_P [ 1+ 32*( MAXCODE[I]+ 1- CODE[J])]=HUFFVAL[VALPTR[I]+CODE[J]
-MINCODE[I]]-MINCODE[I]]
J =_J +1
end while
J= J +' 1
end while J =_J +1
endwhile
J= J +' 1
endwhile
Die Werte für die Tabelle MAXCODE_P sind folglich ganze Zahlen von 32 Bits ohne Vorzeichen. Die Werte der Tabelle HUFFVAL_P sind die maximale Größe von ganzen Zahlen von 32 Bits ohne Vorzeichen.The values for the MAXCODE_P table are therefore 32-bit unsigned integers. The values of the HUFFVAL_P table are the maximum size of 32-bit unsigned integers.
Der vorgeschlagene parallele Huffman-Decodieralgorithmus wurde in einem MMX™ Assemblercode implementiert. Für diesen Abschnitt ist die CPU-Zeit zum Erweitern des ursprünglichen Bitstroms in 4xl6-Bit-Teile in der Decodierzeit enthalten.The proposed parallel Huffman decoding algorithm was implemented in an MMX™ assembly code. For this section, the CPU time to expand the original bitstream into 4xl6-bit parts is included in the decoding time.
Wenn Codeworte der Länge I mit einer Wahrscheinlichkeit von 2"1 erscheinen, dann ist die Wahrscheinlichkeit, daß ein Codewort die Länge I aufweist, CODENUM [ I ]* 2'1. Wenn T[I] die Zeit zum Decodieren eines Codeworts der Länge I sein soll, dann kann die mittlere Decodierzeit für ein Symbol folgendermaßen berechnet werden:If codewords of length I appear with a probability of 2" 1 , then the probability that a codeword has length I is CODENUM [ I ]* 2' 1 . If T[I] is the time to decode a codeword of length I, then the average decoding time for a symbol can be calculated as follows:
1616
CODENUM[I] * T[I]CODENUM[I] * T[I]
1 = 21 = 2
Unter der Annahme der Komprimierung von zehn Bildern im allgemeinen Zwischenformat (CIF, Common Intermediate Format) unter Verwendung eines sequentiellen Algorithmus, und wenn nur ein Viertel der Koeffizienten der diskreten Cosinustransformation (DCT) unter Verwendung der RUN-LEVEL-Symbole codiert werden, kann die Anzahl der zu decodierenden Huffman-Codeworte folgendermaßen berechnet werden:Assuming compression of ten images in Common Intermediate Format (CIF) using a sequential algorithm, and if only a quarter of the discrete cosine transform (DCT) coefficients are encoded using the RUN-LEVEL symbols, the number of Huffman codewords to be decoded can be calculated as follows:
(352*288/4)*10 = 253440(352*288/4)*10 = 253440
Selbst wenn die DCT für dieses Beispiel ausgewählt wird, wäre es für übliche Fachleute offensichtlich, beliebige Transformationen zu verwenden, wie z.B. eine Differential-Analysecodemodulation (DPCM, Differential Parse Code Modulation) , Wellenlänge, Teilband-Transformation, Vektorquantisierung und dergleichen. Unter Verwendung eines 166 MHz Intel® Pentium® Prozessors mit MMX™ ist der Dekomprimierungszeitablauf für den besten Fall (bei dem alle Codeworte 2 bis 5 Bits lang sind), den schlimmsten Fall (bei dem alle Codeworte 12 bis 15 Bits lang sind), und den mittleren Fall (bei dem die Codelängen zwischen 2 und 16 Bits verteilt sind) in der nachstehenden Tabelle 2 gezeigt.Even if DCT is chosen for this example, it would be obvious to one of ordinary skill in the art to use arbitrary transforms such as differential parse code modulation (DPCM), wavelength, subband transform, vector quantization, and the like. Using a 166 MHz Intel® Pentium® processor with MMX™, the decompression timing for the best case (where all codewords are 2 to 5 bits long), the worst case (where all codewords are 12 to 15 bits long), and the intermediate case (where code lengths are distributed between 2 and 16 bits) is shown in Table 2 below.
Tabelle 2 demonstriert, daß der parallele Algorithmus den Zeitablauf des schlimmsten Falls signifikant verringert, während sich eine überlegene Leistung für den mittleren Fall ergibt. Man beachte auch, daß noch bessere Ergebnisse durch weiteres Optimieren des Assemblercodes erreicht werden kön-Table 2 demonstrates that the parallel algorithm significantly reduces the worst case timing while providing superior performance for the middle case. Note also that even better results can be achieved by further optimizing the assembly code.
nen. · ■ . .· ■ . .
Wie für übliche Fachleute selbstverständlich ist, kann die vorliegende Erfindung in anderen speziellen Formen verkörpert werden, ohne von deren Gedanke oder deren wesentlichen Eigenschäften abzuweichen. Die Verfahren der vorliegenden Erfindung können beispielsweise auch auf andere SIMD-Systeme ange-As will be understood by those of ordinary skill in the art, the present invention may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. For example, the methods of the present invention may also be applied to other SIMD systems.
wendet werden, wie z.B. das Sun® UltraSPARC® mit Visual-Befehlsatz, 3DNow!™ von Advance Micro Device, Inc.®, und dergleichen können verwendet werden.such as the Sun® UltraSPARC® with Visual Instruction Set, 3DNow!™ from Advance Micro Device, Inc.®, and the like may be used.
Auch der neue Pentium® III von Intel® (auch als Katmai bekannt), der Nachfolger des Pentium® II, fügt Strearning-SIMD-Erweiterungen hinzu. Der Pentium® III stellt 70 neue Befehle bereit. Viele Befehle sind für Gleitkomma-SIMD-Operationen, die auf 3-D-Anwendungen abzielen. Verschiedene Befehle für Festkommazahlen-Operationen wurden auch hinzugefügt. Diese Befehle zielen teilweise auf die MPEG-Codierung/Decodierung (Bewegungsabschätzung, Bewegungskompensation) ab. Übliche Fachleute würden jedoch verstehen, daß diese neuen Befehle ausgenutzt werden können, um die Decodierverfahren der vorliegenden Erfindung weiter zu beschleunigen. Min- und Max-Operationen können beispielsweise die Codelängenerfassung beschleunigen. Ein Einfügungsbefehl zum Übertragen von Ganzahlenregistern und einem Teil von MMX™ Registern sieht auch eine Beschleunigung vor. Ebenso kann ein Sammelbefehl den Bitstrom in effizienterer Weise duplizieren.Intel®'s new Pentium® III (also known as Katmai), the successor to the Pentium® II, also adds streaming SIMD extensions. The Pentium® III provides 70 new instructions. Many instructions are for floating point SIMD operations aimed at 3-D applications. Several instructions for fixed point number operations have also been added. These instructions are partly aimed at MPEG encoding/decoding (motion estimation, motion compensation). However, those of ordinary skill in the art would understand that these new instructions can be exploited to further speed up the decoding methods of the present invention. For example, min and max operations can speed up code length detection. An insert instruction for transferring integer registers and a portion of MMX™ registers also provides a speedup. Likewise, a collect instruction can duplicate the bit stream in a more efficient manner.
Alternativ können die Verfahren der vorliegenden Erfindung in einem Computersystem implementiert werden. Die Verfahren 500 und 600 können beispielsweise in einer Karte zur peripheren Komponentenverbindung (PCI, Peripheral Component Interconnect) implementiert werden. Die PCI-Karte kann am PCI-Bus eines Personalcomputers installiert sein. Auch andere Bustechnologien, wie z.B. NUBUS, ISA, EISA, universeller serieller Bus (USB), 1394 Firewire und beschleunigter Graphikkarten-0 Steckplätz (AGP, Accelerated Graphics Port), können auch verwendet werden. Überdies können die Verfahren der vorliegenden Erfindung unter Verwendung der verfügbaren Routinen und Merkmale, wie z.B. Cachespeicherung, neuen Befehlssätzen, Mehrprozessorsystemen und ihren Äquivalenten, implementiert wer-5 den.Alternatively, the methods of the present invention may be implemented in a computer system. For example, the methods 500 and 600 may be implemented in a peripheral component interconnect (PCI) card. The PCI card may be installed on the PCI bus of a personal computer. Other bus technologies such as NUBUS, ISA, EISA, universal serial bus (USB), 1394 Firewire, and accelerated graphics port (AGP) may also be used. Moreover, the methods of the present invention may be implemented using available routines and features such as caching, new instruction sets, multiprocessor systems, and their equivalents.
III. VIGNETTIERUNGSKORREKTUR III. VIGNETTING CORRECTION
Das Register 34 von Fig. 2 ermöglicht, daß eine Vignettierungskorrektur angewendet wird, wobei somit ermöglicht wird, daß eine preisgünstigere Linse 10 in der Kamera 32 verwendet wird. Dies ermöglicht, daß die Kosten der Kamera noch weiter nach unten gebracht werden.The register 34 of Fig. 2 allows vignetting correction to be applied, thus allowing a less expensive lens 10 to be used in the camera 32. This allows the cost of the camera to be brought down even further.
Im Betrieb fragt &ngr; der. Prozessor im Hauptrechner 36 die Kamera ab, um den Wert des Registers 34 zu lesen. Dieser wird dann im Vignettierungskorfeekturblock 40 des Hauptrechners verwendet, um Vignettierungsfehler der Kamera zu korrigieren. Dies wird vor der Pixelkorrektur des Blocks 42 durchgeführt, um zu vermeiden, daß die Vignetfeierung als fehlerhaftes Pixel mißverstanden wird. Die Korrektur kann durch Addieren eines Verschiebungswerts zum gelieferten Pixelhelligkeitswert durchgeführt werden.In operation, the processor in the host 36 polls the camera to read the value of register 34. This is then used in the vignetting correction block 40 of the host to correct camera vignetting errors. This is done before the pixel correction of block 42 to avoid the vignetting being mistaken for a bad pixel. The correction can be done by adding an offset value to the supplied pixel brightness value.
Fig. 10 stellt eine Pixelmatrix 11 und eine entsprechende Helligkeitskurve 13 über der Y-Achse dar. Ein zentrales Pixel 17 mit dem Wert (xo/Yo) entspricht dem Punkt der maximalen Helligkeit der Linse. Ein zweites Beispielpixel 15 liegt nahe der minimalen Helligkeit, wobei es einen Vignettierungseffekt "mit der Differenz zwischen der Kurve 13 und einem maximalen Helligkeitswert 19 zeigt. Die vorliegende Erfindung korrigiert diesen Vignettierungseffekt sowohl in X- als auch in Y-Richtung. Fig. 10 illustrates a pixel matrix 11 and a corresponding brightness curve 13 over the Y axis. A central pixel 17 with the value (xo/Yo) corresponds to the point of maximum brightness of the lens. A second example pixel 15 is close to the minimum brightness, showing a vignetting effect "with the difference between the curve 13 and a maximum brightness value 19. The present invention corrects this vignetting effect in both the X and Y directions.
Bei einem Ausführungsbeispiel ist eine mit rT angegebene Schwelle dargestellt, innerhalb der die Kurve 13 nahe dem Maximalwert 19 liegt und keine Vignettierungskorrektur angewendet werden muß. Alternativ kann die Korrektur trotzdem auf alle Pixel angewendet werden, um irgendwelche· Übergangseffekte an den Punkten rT zu vermeiden.In one embodiment, a threshold indicated by r T is shown within which the curve 13 is close to the maximum value 19 and no vignetting correction needs to be applied. Alternatively, the correction can still be applied to all pixels in order to avoid any transition effects at the points r T .
In Abhängigkeit von der speziellen Linse, die gewählt wird, kann ihr.festgelegtes Vignettierungsausmaß verwendet werden, um in einem Register 72 eine Konstante vorzusehen. Somit könnten verschiedene Linsen bei der Herstellung einer Kamera verwendet werden/ indem einfach ein unterschiedlicher konstanter Wert in das Register 72 programmiert wird. Dies ermöglicht, daß mehrere Quellen für die Linsen verwendet werden, und ermöglicht eine Kompensation hinsichtlich Änderungen der Linsengualitat von Posten zu Posten oder von Hersteller zu Hersteller.Depending on the particular lens chosen, its specified amount of vignetting can be used to provide a constant in register 72. Thus, different lenses could be used in the manufacture of a camera by simply programming a different constant value into register 72. This allows multiple sources of lenses to be used and allows compensation for variations in lens quality from lot to lot or manufacturer to manufacturer.
Ein Ausführungsbeispiel einer Gleichung zum Implementieren und einer Hardware oder Software zum Durchführen der Vignettierungskorrektur wird nachstehend dargelegt. Obwohl die Konstante in der Kamera gespeichert ist, kann die Vignettierungskorrektur entweder durch die Hardware/Software in der . Kamera oder die Software in einem Hauptrechner durchgeführt werden. Der Vignettierungsfehler einer Linse mit geringer Qualität kann als Durchgang in der Mitte der Linse und eine parabolische Kurve nahe der Kante der Linse modellhaft dargestellt werden. Die Transformationsfunktion ist isotrop: pi und po soll der Pixelwert vor und nach der Vignettierungskorrektur sein, und xo und y0 soll die Koordinate der Mitte der Linse sein (sollte die Mitte des Bildes sein, wenn die Linse korrekt montiert ist). Dann giltAn example of an equation for implementing and a hardware or software for performing vignetting correction is given below. Although the constant is stored in the camera, vignetting correction can be performed by either the hardware/software in the camera or the software in a host computer. The vignetting error of a low quality lens can be modeled as a pass through the center of the lens and a parabolic curve near the edge of the lens. The transformation function is isotropic: let pi and po be the pixel value before and after vignetting correction, and let x o and y 0 be the coordinate of the center of the lens (should be the center of the image if the lens is mounted correctly). Then
Po = pi*(a*r2+l) ■'.,·■Po = pi*(a*r 2 +l) ■'.,·■
= pi* (a* ((X-X0)2+(Y-Yo) 2)+l= pi* (a* ((XX 0 ) 2 +(Y-Yo) 2 )+l
"a" ist eine kleine positive Konstante. Um auf der sicheren Seite zu sein, kann ein Maximum von 50% Vignettierung korrigiert werden, was bedeutet:"a" is a small positive constant. To be on the safe side, a maximum of 50% vignetting can be corrected, which means:
. 1,0 = 0,5*(a*(176*176+144*144)+l). 1.0 = 0.5*(a*(176*176+144*144)+l)
• ··
a = l,9338*10"5 a = l,9338*10" 5
Normiert mit 226 ergibt dies a - 1298. Durch Begrenzen von a auf 0 bis 1023 und Durchführen der umgekehrten Berechnung ist die maximale korrigierbare Vignettierung 56%.Normalized by 2 26 this gives a - 1298. By limiting a to 0 to 1023 and performing the reverse calculation, the maximum correctable vignetting is 56%.
Man beachte, daß in der oben angegebenen Formel das Pixelseitenverhältnis nicht berücksichtigt wird. Für ein quadratisches Pixel ist die Gleichung exakt, für ein Pixelseitenverhältnis von 12/11 weicht das Ergebnis geringfügig ab. a wird auch mit 1A skaliert, wenn das Sensorformat nicht skaliertes QCIF (unterabgetastetes QCIF aus CIF durch Auslassen von jedem zweiten Pixel in sowohl horizontaler als auch vertikaler Richtung) ist. .'■'■ Note that the above formula does not take the pixel aspect ratio into account. For a square pixel, the equation is exact, but for a pixel aspect ratio of 12/11, the result differs slightly. a is also scaled by 1 A when the sensor format is unscaled QCIF (subsampled QCIF from CIF by dropping every other pixel in both horizontal and vertical directions). .'■'■
Wenn yA 10 Bits ist, (x-x0)2 und (y-y0)2 16 Bits (für CIF-Größe) ist und y0 10 Bits ist, legt dies fest, daß a 10 Bits sein muß (0 bis 1023)..If y A is 10 bits, (xx 0 ) 2 and (yy 0 ) 2 are 16 bits (for CIF size) and y 0 is 10 bits, this specifies that a must be 10 bits (0 to 1023).
Fig. 11 ist ein Blockdiagramm eines Ausführungsbeispiels eines Hardwaresystems oder von Softwareblöcken zum Implementieren der vorstehend beschriebenen Gleichung. Insbesondere wird ein wahlfreier Ansteuerschältkreis/-block 80 an den Ansteuereingang eines Multiplexers 82 angelegt. Wenn die Pixelposition geringer als die Schwelle 1C2 [rT] ist, wird das Eingangspixel pi auf der Leitung 84 einfach zum Ausgangspixel po auf der Leitung 86 durchgeleitet. Wenn sie größer ist als die Schwelle, wird durch Implementieren der obigen Formel mit der in Fig. 11 gezeigten Hardware eine VignettierungskorrekturFig. 11 is a block diagram of one embodiment of a hardware system or software blocks for implementing the equation described above. In particular, a random drive circuit/block 80 is applied to the drive input of a multiplexer 82. If the pixel position is less than the threshold 1C2 [r T ], the input pixel pi on line 84 is simply passed through to the output pixel po on line 86. If it is greater than the threshold, vignetting correction is achieved by implementing the above formula with the hardware shown in Fig. 11.
0 angewendet. >0 applied. >
Insbesondere wird der aktuelle x-Wert des Pixels xi an den arithmetischen Schaltkreis/Block 88 angelegt,, wo das zentrale Pixel Xo von diesem subtrahiert wird. Dieser Wert wird dann durch zweimaliges Anlegen seines Eingangssignals über einenIn particular, the current x-value of pixel xi is applied to the arithmetic circuit/block 88, where the central pixel Xo is subtracted from it. This value is then calculated by applying its input signal twice via a
Multiplexer 90 an einen Multiplizierschaltkreis/-block 92 quadriert, wobei er in einem Addierer/Akkumulator 94 aufsummiert wird. Ebenso wird der y-Wert yi zu einem Schaltkreis/Block 96 geliefert, wo die Differenz vom zentralen y-Wert Yo ermittelt wird. Dieser wird ebenso als zwei Werte über den Multiplexer 90 an einen Multiplizierer 92 angelegt, wo er quadriert und zum Addierer/Akkumulator 94 geliefert wird, wo er zum quadrierten x-Wert addiert wird. Die Verwendung des Multiplexers ermöglicht einfach durch Zeitmultiplextechnik, daß derselbe Multiplizierer 92 für beide Berechnungen verwendet wird. Offensichtlich wäre eine Alternative, zwei separate Multipliziereinheiten bereitzustellen.Multiplexer 90 to a multiplier circuit/block 92 where it is summed in an adder/accumulator 94. Similarly, the y value yi is supplied to a circuit/block 96 where the difference from the central y value Yo is determined. This is also supplied as two values via multiplexer 90 to a multiplier 92 where it is squared and supplied to adder/accumulator 94 where it is added to the squared x value. The use of the multiplexer simply allows, by time division multiplexing, the same multiplier 92 to be used for both calculations. Obviously, an alternative would be to provide two separate multiplier units.
Das Ausgangssignal des Akkumulators 94 wird dann zu einem zweiten Multiplizierer 96 geliefert, wo es mit dem konstanten Wert aus dem Register 72 multipliziert wird. Der Wert von Eins wird dann in einer Einheit 98 subtrahiert und dieser Wert wird mit dem Pixelwert pi in einem Multiplizierer 100 multipliziert. Das Ausgangssignal wird auf einer Leitung 102 über den Multiplexer 82 zur Ausgangsleitung 86 geliefert. Offensichtlich könnten Variationen der Schaltung bereitgestellt werden, wie z.B. Verwendung derselben Multiplizierschaltung für die Multiplizierer 92, 96 und 100, wobei der Multiplizierer für verschiedene Zwecke in verschiedenen Zeitschlitzen verwendet wird.The output of accumulator 94 is then provided to a second multiplier 96 where it is multiplied by the constant value from register 72. The value of one is then subtracted in a unit 98 and this value is multiplied by the pixel value pi in a multiplier 100. The output is provided on a line 102 via multiplexer 82 to output line 86. Obviously, variations of the circuit could be provided, such as using the same multiplier circuit for multipliers 92, 96 and 100, with the multiplier being used for different purposes in different time slots.
Der wahlfreie Schaltkreis/-block 80 stellt einen Vergleicher 104 bereit, der das Ausgangssignal des Addierers/Akkumulators 94 (den Radiuswert der Werte x2+y2) mit dem Schwellenradius 0 in einem Register 106 vergleicht.The optional circuit/block 80 provides a comparator 104 which compares the output of the adder/accumulator 94 (the radius value of the values x 2 +y 2 ) with the threshold radius 0 in a register 106.
Vorzugsweise weist die Konstante a dieselbe Anzahl von Bits wie der Pixelwert pi auf. Wenn pi 10 Bits ist, während die x- und y-Werte 16 Bits sind, wäre die Konstante a folglich 10 Bits, a kann auch mit 1A skaliert werden, wenn das Sensorfor-Preferably, the constant a has the same number of bits as the pixel value pi. If pi is 10 bits while the x and y values are 16 bits, the constant a would therefore be 10 bits, a can also be scaled by 1 A if the sensor format
mat nicht skaliertes QCIF (beschnitten) ist. Somit wird eine Korrektur bereitgestellt, wobei das Bild vor der Vignettierungskorrektur beschnitten wird.mat is unscaled QCIF (cropped). Thus, a correction is provided whereby the image is cropped before vignetting correction.
Außerdem kann die Korrektur hinsichtlich des Pixelseitenverhältnisses durch Multiplizieren des y-Werts mit 11/12 durchgeführt· werden, wenn ein TV verwendet wird.In addition, pixel aspect ratio correction can be made by multiplying the y value by 11/12 when a TV is used.
Bei einem Ausführungsbeispiel findet die Korrektur nur außerhalb eines vordefinierten Durchmessers statt. Dieses nimmt an, daß die Linse um die Mitte der Linse zufriedenstellend arbeitet, was häufig eine vernünftige Annahme ist. Dabei kann ein genaueres Korrekturmodell hergeleitet werden. rT soll der Durchmesser sein, innerhalb dessen der Vignettierungsfehler ignoriert werden kann. Dann giltIn one embodiment, the correction only takes place outside a predefined diameter. This assumes that the lens works satisfactorily around the center of the lens, which is often a reasonable assumption. A more accurate correction model can be derived. Let r T be the diameter within which the vignetting error can be ignored. Then
wenn r<=rT if r<=r T
Po=Pi/Po=Pi/
wenn r>=rT if r>=r T
Po=Pi* (a*(r2-rT 2)+l)Po=Pi* (a*(r 2 -r T 2 )+l)
=Pi* (a* (( (X-X0)2+ (Y-Yo)2- ( (xt-Xo) 2+ (Yt- =Pi* (a* (( (XX 0 ) 2 + (Y-Yo) 2 - ( (xt-Xo) 2 + (Yt-
Yo)2)Yo) 2 )
Die vorliegende Erfindung gestattet somit eine Variation in Linsen, und auch, daß preiswertere Linsen verwendet werden. Sie verbessert die automatische Verstärkungsregelung (AGC, Automatic Gain Control) und die AWB im Hauptrechner.. Außerdem ermöglicht sie eine bessere Objektbewegungsverfolgung. Die Objektbewegung [sverfolgung] wird gewöhnlich durch Annehmen, daß der Luminanzwert derselbe ist, wenn sich das Objekt zur Kante eines Sensors bewegt, und somit Verfolgen durch Suchen nach demselben Luminanzwert durchgeführt. Offensichtlich können Vignettierungseffekte die Anstrengungen, um das Objekt aufzufinden, vereiteln. Durch Anwenden der vignettierungskorrektur nahe beim Sensor kann dies überwunden werden. Die Er-The present invention thus allows for variation in lenses, and also for cheaper lenses to be used. It improves the automatic gain control (AGC) and AWB in the host computer. It also allows for better object motion tracking. Object motion tracking is usually done by assuming that the luminance value is the same as the object moves to the edge of a sensor, and thus tracking by looking for the same luminance value. Obviously, vignetting effects can thwart efforts to locate the object. By applying vignetting correction close to the sensor, this can be overcome. The
findung stellt auch eine insgesamt verbesserte Videoqualität bereit.finding also provides overall improved video quality.
IV. PIXELKORREKTUR
5IV. PIXEL CORRECTION
5
Der Block 42 von Fig. 2 führt eine Pixelkorrektur im Hauptrechner durch. Dies ermöglicht, daß fehlerhafte Detektorstellen in der CMOS- oder CCD-Sensormatrix korrigiert werden. Im allgemeinen wird dies durch Vergleichen eines Helligkeitswerts mit dem Helligkeitswert der benachbarten Detektorele-. mente durchgeführt. Wenn die Differenz mehr als ein Schwellenwert ist, wird angenommen, daß dies an einem fehlerhaften Sensorelement liegt. Folglich wird ein korrigierter Wert eingesetzt, typischerweise ein Mittelwert der Umgebungspixelwerte. Block 42 of Fig. 2 performs pixel correction in the host computer. This allows faulty detector locations in the CMOS or CCD sensor array to be corrected. Generally, this is done by comparing a brightness value with the brightness value of the neighboring detector elements. If the difference is more than a threshold value, it is assumed that this is due to a faulty sensor element. Consequently, a corrected value is substituted, typically an average of the surrounding pixel values.
Damit dies im Hauptrechner durchgeführt wird, ohne die Bildrate des Video zu beeinträchtigen, wird der Algorithmus einfach gehalten. Dies wird durch zwei Hauptmerkmale bewerkstelligt. Erstens wird die Erkennung von fehlerhaften Pixeln nicht an irgendeinem Vollbild durchgeführt, sondern nur an einer Unterabtastung der Vollbilder. Die Erkennung kann beispielsweise nur alle 32-128 Vollbilder durchgeführt werden. Zweitens ist die geführte Statistik einfach, um die Menge an erforderlicher Verarbeitung zu verringern. Insbesondere kann die Statistik einfach den Ort des Pixelelements und die Häufigkeit oder Anzahl von Malen, die ein fehlerhaftes Pixel erkannt wurde, umfassen.To allow this to be done in the host computer without affecting the frame rate of the video, the algorithm is kept simple. This is accomplished by two main features. First, the detection of bad pixels is not performed on any frame, but only on a subsample of the frames. For example, detection may only be performed every 32-128 frames. Second, the statistics kept are simple to reduce the amount of processing required. In particular, the statistics may simply include the location of the pixel element and the frequency or number of times a bad pixel was detected.
0 Das System arbeitet durch Auslesen oder Abtasten der Bildrohdaten aus einer Bildaufnahmevorrichtung nach Pixeln, die in der Intensität von ihren benachbarten Pixeln um mehr als ein spezielles Ausmaß abweichen. Die Bildsensor-Rohdaten sind das unverarbeitete Helligkeitsdaten-Ausgangssignal, das vom BiId-5 sensor erhalten wird und das nicht irgendeine verlustbehafte-0 The system operates by reading or scanning the raw image data from an image capture device for pixels that differ in intensity from their neighboring pixels by more than a specified amount. The image sensor raw data is the unprocessed brightness data output signal obtained from the image sensor and does not contain any lossy
te Komprimierung oder Farbverarbeitung durchlaufen hat. Der Bildsensor liest eine analoge Spannung oder einen analogen Strom, wandelt in digital um und sendet das Signal ohne Weiterverarbeitung oder Komprimierung zu einem Hauptrechner. Die Photostellen auf dem Bildsensor werden verwendet, um entweder digitale Färb- oder Monochrom-Stand- oder
Videobilder zu erfassen. Die Bildrohdaten werden über einen Bus mit einer Datenübertragungsrate, die durch das Busprotokoll des speziellen Busses, wie z.B. eines universellen seriellen Busses (USB) oder eines parallelen Anschlusses, festgelegt ist, zum intelligenten Hauptrechner gesandt.compression or color processing. The image sensor reads an analog voltage or current, converts it to digital and sends the signal to a host computer without further processing or compression. The photosites on the image sensor are used to create either digital color or monochrome still or
The raw image data is sent to the intelligent host computer over a bus at a data transfer rate determined by the bus protocol of the specific bus, such as a universal serial bus (USB) or a parallel port.
Die Bildsensor-Rohdaten, der Ort und die Häufigkeit des Auftretens jedes fehlerhaften Pixels und die Ergebnisse aller Zwischenberechnungen, die vom Computerprogramm ausgeführt werden, werden alle im Speicher gespeichert. Andere Algorithmen werden dann verwendet, um die Werte von benachbarten Pixeln eines anomalen Pixels zu mitteln, um die Daten von dem fehlerhaften Pixel zu ersetzen. Die korrigierten Daten können 0 dann weiterverarbeitet und schließlich auf dem Monitor angezeigt werden. Das Verfahren umfaßt eine Videounterabtastung, was bedeutet, daß die Erkennung in verschiedenen Vollbildintervallen ausgeführt und wiederholt wird.' Die Videounter abtastung wird an einem von jeweils 128 (1/128) Vollbildern ausgeführt. Alternativ kann die Videounterabtastung an jeweils 1/64 Videovollbildern ausgeführt werden. Und noch bei einem zusätzlichen Ausführungsbeispiel wird die Videounterabtastung an jeweils l/(n mal X) Vollbildern ausgeführt, wobei &eegr; eine ganze Zahl ist und X nicht gleich 50 oder 60 ist. 50 und 60 entsprechen 50 Hz und 60 Hz, welche Wechselstrom-Beleuchtungsfrequenzen sind, die in den Vereinigten Staaten bzw. Europa verwendet werden. Auf diese Art und Weise wird sichergestellt,, daß anomale Rohdatenpixel keine Bildfehler der künstlichen Beleuchtungssysteme sind. Die Verwendung der Videounterabtastung ermöglicht schnelle und optimale Korrek-The raw image sensor data, the location and frequency of occurrence of each faulty pixel, and the results of any intermediate calculations performed by the computer program are all stored in memory. Other algorithms are then used to average the values of neighboring pixels of an anomalous pixel to replace the data from the faulty pixel. The corrected data can then be further processed and ultimately displayed on the monitor. The method involves video subsampling, which means that the detection is performed and repeated at different frame intervals. The video subsampling is performed on one in every 128 (1/128) frames. Alternatively, the video subsampling can be performed on every 1/64 video frames. And in yet another embodiment, the video subsampling is performed on every l/(n times X) frames, where η is an integer and X is not equal to 50 or 60. 50 and 60 correspond to 50 Hz and 60 Hz, which are AC lighting frequencies used in the United States and Europe, respectively. This ensures that anomalous raw data pixels are not image errors of the artificial lighting systems. The use of video subsampling enables fast and optimal corrections.
* * it*** * it**
türen ohne die Notwendigkeit, jedes Vollbild abzutasten, was sich auf die Verarbeitungsgeschwindigkeit des Prozessors und des Systems nachteilig auswirken würde. Natürlich wird keine Videounterabtastung verwendet, wenn fehlerhafte Pixel in Standbildern erkannt und korrigiert werden.doors without the need to sample each frame, which would adversely affect the processing speed of the processor and the system. Of course, video subsampling is not used when detecting and correcting bad pixels in still images.
Eine statistische Datenbank, die den Ort und die Häufigkeit des Auftretens von fehlerhaften Pixeln aufzeichnet, wird erzeugt und im Speicher gespeichert, um zu ermöglichen, daß das System seine Operation mit der Zeit lernt und anpaßt. Die Tendenzen aus der statistischen Datenbank werden gespeichert, so daß wahrhaft anomale Pixel mit der Zeit von der falschen Erkennung von echten Anomalien in dem Zielbild, Beleuchtung oder anderen durch die Umgebung induzierten Anomalien unterschieden werden können. Die Operationslogik der statistischen Datenbank und die Einzelheiten der Operation des Computerprogramms werden nachstehend beschrieben.A statistical database recording the location and frequency of occurrence of defective pixels is created and stored in memory to allow the system to learn and adapt its operation over time. The trends from the statistical database are stored so that truly anomalous pixels can be distinguished over time from false detections of true anomalies in the target image, lighting, or other anomalies induced by the environment. The operational logic of the statistical database and the details of the operation of the computer program are described below.
Fig. 12 stellt einen vereinfachten Ablaufplan dar, der die 0 Wirkungsweise des Softwareprogramms beschreibt, das in einem System zum Erkennen und Korrigieren von fehlerhaften Pixeln gemäß einem Ausführungsbeispiel der vorliegenden Erfindung implementiert wird. Der erste Schritt bei der Erkennung und Korrektur von fehlerhaften Pixeln umfaßt das Erfassen eines Teils eines Vollbildes von Bildrohdaten von einer Bildsensormatrix, Schritt 1210. Die Bildrohdaten können Daten sein, die einer Liveszene entsprechen, welche digitalisiert werden, oder sie können Daten sein, die einer Kalibrierung oder einem "schwarzen" Hintergrundbild entsprechen. Das "schwarze" Hin-0 tergrundbild kann durch Verringern der Integrationszeit der Sensormatrix oder durch Verringern der Verstärkung des Bildsignals erhalten werden. Die Rohdaten vom "schwarzen" Bild . können.verwendet werden, um überaktive Photostellen zu erkennen. Die dem "schwarzen" Bild entsprechenden Rohdaten müssen ebenfalls schwarz sein, und wenn irgendein Pixel dies nicht12 illustrates a simplified flow chart describing the operation of the software program implemented in a system for detecting and correcting defective pixels in accordance with an embodiment of the present invention. The first step in detecting and correcting defective pixels involves acquiring a portion of a frame of raw image data from an image sensor array, step 1210. The raw image data may be data corresponding to a live scene being digitized, or it may be data corresponding to a calibration or "black" background image. The "black" background image may be obtained by reducing the integration time of the sensor array or by reducing the gain of the image signal. The raw data from the "black" image may be used to detect overactive photosites. The raw data corresponding to the "black" image must also be black, and if any pixel is not
00
»»♦» ·»»♦» ·
ist, dann entspricht es einer überaktiven Photosteile. Die Verwendung des "schwarzen" Bildes kann die Erkennung von fehlerhaften Pixeln durch Entfernen von irgendwelchen Helligkeit sabweichungen, die von der Szene selbst stammen, verbessern. then it corresponds to an overactive photoelectric part. Using the "black" image can improve the detection of bad pixels by removing any brightness deviations that come from the scene itself.
Obwohl die Daten von einem gesamten Vollbild für die Erkennung und Korrektur von fehlerhaften Pixeln auf einmal verarbeitet werden können, beginnt der Algorithmus seine Funktion, sobald Daten von drei Zeilen aus dem Bildsensor am Hauptrechner eingetroffen sind. Drei Zeilen von Daten aus der Bildsensormatrix ermöglichen die Verarbeitung von Daten für ein Pixel und alle seine umgebenden Nachbarn. Wenn die Sensormatrix zum Erfassen von Videobildern verwendet wird, wird überdies die Videounterabtastung verwendet, so daß nicht jedes Vollbild des von der Bildsensormatrix erfaßten Videos für die Operation der Erkennung von fehlerhaften Pixeln erforderlich ist. Bei einem bevorzugten Ausführungsbeispiel wird die Fehlererkennung wie vorstehend beschrieben in vorbestimmten Vollbildintervallen ausgeführt und die Korrektur wird auf alle Videovollbilder angewendet. Die vernünftige Verwendung der Videounterabtastung ermöglicht, daß das Verfahren sehr schnell und effizient ist.Although data from an entire frame may be processed at once for faulty pixel detection and correction, the algorithm begins operation as soon as three lines of data from the image sensor have arrived at the host computer. Three lines of data from the image sensor array allow data for one pixel and all of its surrounding neighbors to be processed. Moreover, when the sensor array is used to capture video images, video subsampling is used so that not every frame of video captured by the image sensor array is required for the faulty pixel detection operation. In a preferred embodiment, fault detection is performed at predetermined frame intervals as described above and correction is applied to all video frames. Judicious use of video subsampling enables the method to be very fast and efficient.
Bei einem alternativen Ausführungsbeispiel wird keine Videounterabtastung verwendet, so daß die Erkennung von fehlerhaften Pixeln an jedem Videovollbild ausgeführt wird. Die Verwendung der Videounterabtastung ist eine Funktion der Geschwindigkeit des Prozessors des intelligenten Hauptrechners.In an alternative embodiment, no video subsampling is used, so that the detection of bad pixels is performed on each video frame. The use of video subsampling is a function of the speed of the intelligent host processor.
0 Wenn ein Prozessor schnell genug ist, um eine Erkennung von anomalen Pixeln in jedem Vollbild zu ermöglichen, dann wird die Videounterabtastung nicht verwendet. Wenn der Prozessor andererseits nicht schnell genug ist, um eine Videoverarbeitung mit einer gewünschten Vollbildrate zu ermöglichen, dann wird die Videounterabtastung verwendet, um die Datenübertra-0 If a processor is fast enough to allow detection of anomalous pixels in every frame, then video subsampling is not used. On the other hand, if the processor is not fast enough to allow video processing at a desired frame rate, then video subsampling is used to speed up data transfer.
•&phgr; · » &phgr; · ·· &phgr; &phgr; &phgr; &phgr; &phgr; &phgr; # &phgr; &phgr; · · •&phgr; · » φ · ·· φ φ φ φ φ φ # φ φ · ·
gung mit dieser gewünschten Vollbildrate sicherzustellen. Ohne die Videounterabtastung ist die Korrektur von anomalen Pi-' xeln unmittelbar, so daß Fehler genau in dem Vollbild, in dem sie erkannt werden, korrigiert werden. Mit der Videounterabtastung wird die Korrektur von anomalen Pixeln verzögert, bis ein Vollbild abgetastet ist, um anomale Pixel zu erkennen. Daher sind die Wahl der Verwendung der Videounterabtastung und der Rate der Unterabtastung eine Funktion der Prozessorgeschwindigkeit und einer Abwägung zwischen der Prozessorleistung und der Verzögerung vor der Korrektur.ration at this desired frame rate. Without video subsampling, correction of anomalous pixels is immediate, so that errors are corrected exactly in the frame in which they are detected. With video subsampling, correction of anomalous pixels is delayed until a frame has been sampled to detect anomalous pixels. Therefore, the choice of using video subsampling and the rate of subsampling are a function of processor speed and a trade-off between processor performance and delay before correction.
Nach der Datenerfassung werden für jedes der erfaßten Pixel der lokale Pixelhelligkeitswert und auch der mittlere Helligkeitswert aller seiner unmittelbar benachbarten Pixel berechnet und gespeichert, Schritt 1212. Als nächstes wird ein Abweichungsschwellenwert festgelegt, Schritt 1214. Die Abweichungsschwelle legt das annehmbare Niveau der Varianz zwischen dem Helligkeitswert eines Pixels und dem mittleren Helligkeitswert aller seiner unmittelbar benachbarten Pixel 0 fest. Als nächstes wird für jedes erfaßte Pixel eine lokale Helligkeitsabweichung berechnet, Schritt 1216. Die lokale Helligkeitsabweichung ist der Absolutwert der Differenz zwischen dem Helligkeitswert eines. Pixels und dem Mittelwert des Helligkeitswerts aller seiner unmittelbar benachbarten Pixel.After data acquisition, for each of the captured pixels, the local pixel brightness value and also the average brightness value of all of its immediately neighboring pixels are calculated and stored, step 1212. Next, a deviation threshold is set, step 1214. The deviation threshold sets the acceptable level of variance between the brightness value of a pixel and the average brightness value of all of its immediately neighboring pixels. Next, for each captured pixel, a local brightness deviation is calculated, step 1216. The local brightness deviation is the absolute value of the difference between the brightness value of a pixel and the average brightness value of all of its immediately neighboring pixels.
Als nächstes wird für jedes Pixel, dessen Daten erfaßt wurden, seine lokale Helligkeitsabweichung mit. der Abweichungsschwelle verglichen, Schritt 1218. Jedes Pixel, dessen lokale Helligkeitsabweichung den Schwellenabweichungswert übersteigt, wird dann als fehlerhaftes Pixel gekennzeichnet. Der physische Ort und die Häufigkeit des Auftretens jedes fehlerhaften Pixels wird dann in einer statistischen Datenbank aufgezeichnet, Schritt 1220. Die statistische Datenbank wird dann abgefragt, um festzustellen, ob der Datenwert des feh-5 lerhaften Pixels korrigiert werden sollte, Schritt 1222.. DieNext, for each pixel whose data was acquired, its local brightness deviation is compared to the deviation threshold, step 1218. Any pixel whose local brightness deviation exceeds the threshold deviation value is then marked as a defective pixel. The physical location and frequency of occurrence of each defective pixel is then recorded in a statistical database, step 1220. The statistical database is then queried to determine whether the data value of the defective pixel should be corrected, step 1222. The
statistische Datenbank entwickelt durch Speichern des Orts und der Häufigkeit der fehlerhaften Pixel mit der Zeit Tendenzen, die bestätigen, welches der fehlerhaften Pixel eine Korrektur rechtfertigt. Die Logik der Tendenzen von der statistischen Datenbank . rechtfertigt anfänglich eine Korrektur aller gekennzeichneten fehlerhaften Pixel als Vorgabe und rechtfertigt mit der Zeit eine Pixelkorrektur nur, wenn ein spezielles Pixel eine Auftrethäufigkeit von mindestens zwei aus den letzten vier Abfragen aufweist.By storing the location and frequency of the defective pixels, the statistical database develops trends over time that confirm which of the defective pixels warrants correction. The logic of the trends from the statistical database initially justifies correction of all flagged defective pixels as a default, and over time justifies pixel correction only when a particular pixel has a frequency of occurrence of at least two out of the last four samples.
Die fehlerhaften Pixel, die durch den Filter der statistischen Datenbank gelaufen sind, werden als nächstes korrigiert, Schritt 1224. Um ein fehlerhaftes Pixel zu korrigieren, werden die fehlerhaften Helligkeitsrohdaten für ein fehlerhaftes Pixel durch den lokalen mittleren Helligkeitswert dieses Pixels ersetzt, welcher der mittlere Helligkeitswert aller seiner unmittelbar benachbarten Pixel ist. Als nächstes werden die korrigierten Daten von den fehlerhaften Pixeln sowie Daten von nicht fehlerhaften Pixeln vorbereitet, damit sie zur anschließenden Verarbeitung gesandt werden, Schritt 1226. Die anschließende Verarbeitung kann eine Komprimierung, Farbverarbeitung und Codierung in Datenformate, die sich zur Anzeige eignen, umfassen. Die Erkennung und Korrektur von fehlerhaften Pixeln wird an den Rohdaten von der Bildsensormatrix ausgeführt, da es bevorzugt ist, die Daten zu korrigieren, bevor irgendeine anschließende Verarbeitung stattgefunden hat, da diese Verarbeitung selbst Bildfehler einführen kann, die von Bildfehlern, die infolge fehlerhafter Photostellen erzeugt wurden, schwierig zu unterscheiden sind.The defective pixels that have passed through the statistical database filter are next corrected, step 1224. To correct a defective pixel, the raw defective brightness data for a defective pixel is replaced by the local average brightness value of that pixel, which is the average brightness value of all of its immediately neighboring pixels. Next, the corrected data from the defective pixels, as well as data from non-defective pixels, are prepared for subsequent processing, step 1226. Subsequent processing may include compression, color processing, and encoding into data formats suitable for display. Detection and correction of defective pixels is performed on the raw data from the image sensor array, since it is preferable to correct the data before any subsequent processing has taken place, since this processing itself may introduce image defects that are difficult to distinguish from image defects produced as a result of defective photosites.
Der Softwarealgorithmus wird absichtlich sehr einfach gehalten, so daß die Prozessorlast und/oder die Videobildrate minimal beeinflußt wird. Erstens wird der Softwarealgorithmus einfach gehalten, da er nur drei Funktionen erfüllt, nämlich die Erkennung, Korrektur und Statistikfunktionen. Die Stati-The software algorithm is intentionally kept very simple so that the processor load and/or the video frame rate is minimally affected. Firstly, the software algorithm is kept simple because it only performs three functions, namely detection, correction and statistical functions. The statistical
stikroutine wird einfach gehalten, da nur Positionsinformationen und die Häufigkeit des Auftretens von anomalen Pixeln verfolgt werden. Zweitens wird der Softwarealgorithmus einfach gehalten, damit eine minimale Auswirkung auf die Rate vorliegt, mit der Daten zum Hauptrechner übertragen werden, so daß, während ein Vollbild auf fehlerhafte Pixel abgetastet wird, nachfolgende Vollbilder nicht aufgehalten werden. Die maximale Auswirkung des Softwarealgorithmus ist schlimmstenfalls die Verringerung der Videodatenübertragungsrate von 10 Vollbildern pro Sekunde (fps, frames per second) auf 9 fps. Drittens wird der Softwarealgorithmus derart einfach gehalten, daß die Last des Hauptrechnerprozessors nicht um mehr als 1% erhöht wird, wenn der Algorithmus ausgeführt wird. Die anomalen Pixel werden in einem Vollbild erkannt und die Korrekturen werden später an nachfolgenden Vollbildern eingeleitet, wenn sie aus dem Bildsensor ausgelesen werden.stikroutine is kept simple, since only position information and the frequency of occurrence of anomalous pixels are tracked. Second, the software algorithm is kept simple so that there is minimal impact on the rate at which data is transferred to the host computer, so that while one frame is being scanned for faulty pixels, subsequent frames are not held up. The maximum impact of the software algorithm is, in the worst case, a reduction in the video data transfer rate from 10 frames per second (fps) to 9 fps. Third, the software algorithm is kept simple so that the load on the host computer processor is not increased by more than 1% when the algorithm is running. The anomalous pixels are detected in one frame, and corrections are later initiated on subsequent frames as they are read from the image sensor.
Wenn das System arbeitet, werden folglich, wenn Bildrohdaten vom Bildsensor erhalten und zur Verarbeitung auf einem Hauptrechner gesandt werden, Vollbilder zur Erkennung und Korrektur von fehlerhaften Pixeln, wie vorstehend beschrieben, erfaßt. Wenn ein fehlerhaftes Pixel einmal identifiziert wurde und seine Korrektur durch die statistische Datenbank gerechtfertigt wurde, fährt diese Korrektur für alle nachfolgenden Vollbilder fort, bis die nächste Abfrage an die statistische Datenbank ausgeführt wird. Wenn zu diesem Zeitpunkt das anfänglich gekennzeichnete fehlerhafte Pixel weiterhin als ein fehlerhaftes festgelegt wird, dann fahren die Korrekturen fort, wie vorstehend beschrieben. Wenn andererseits die sta-0 tistische Datenbank die Korrektur von fehlerhaften Pixeln nicht rechtfertigt, dann werden diese Pixel nicht mehr korrigiert, bis die. nächste Abfrage an die statistische Datenbank durchgeführt wird. Die dynamische Art dieses Systems ermöglicht auch Korrekturen von Daten von Photostellen, die mitThus, when the system is operating, as raw image data is received from the image sensor and sent for processing on a host computer, frame by frame is captured for detection and correction of defective pixels as described above. Once a defective pixel has been identified and its correction justified by the statistical database, this correction continues for all subsequent frame by frame until the next query to the statistical database is made. If at this time the initially identified defective pixel is still determined to be defective, then corrections continue as described above. On the other hand, if the statistical database does not justify correction of defective pixels, then these pixels will no longer be corrected until the next query to the statistical database is made. The dynamic nature of this system also allows corrections to be made to data from photosites that have been
der Zeit aufgrund von Umgebungsänderungen nach der Herstellung fehlerhaft werden.may become faulty over time due to environmental changes after manufacturing.
Das statistische Analysesegment des Fehlererkennungs- und -korrekturalgorithmus ist ein wahlfreies. Es zielt auf die Steigerung der Effizienz der Pixelkorrekturen ab, um keine Anomalien zu korrigieren, die nicht durch fehlerhafte Photostellen verursacht wurden, und spart daher Verarbeitungszeit und -last. Die Effizienzgewinne müssen jedoch gegen die durch den statistischen Analyseteil selbst auferlegte Belastung abgewogen werden. Bei einem alternativen Ausführungsbeispiel, das den statistischen Analyseteil nicht verwendet, werden alle Pixel, die als fehlerhaft gekennzeichnet werden, korrigiert. Wie bei der Wahl der Verwendung oder nicht Verwendung der Videounterabtastung hängt die Entscheidung für die Verwendung des statistischen Analyseteils des Fehlererkennungsund -korrekturalgorithmus von einer Abwägung zwischen der Effizienz und der Prozessorleistung ab. Wenn der Prozessor schnell genug ist, dann sind Effizienzbelange nicht so wichtig. Wenn der Prozessor andererseits nicht schnell genug ist, dann wird die Pixelkorrektureffizienz wichtig genug, um die Implementierung des statistischen Analyseteils des Fehlererkennungs -'und -korrekturalgorithmus zu rechtfertigen.The statistical analysis segment of the error detection and correction algorithm is an optional one. It aims to increase the efficiency of pixel corrections to correct anomalies not caused by defective photosites, and therefore saves processing time and load. However, the efficiency gains must be weighed against the burden imposed by the statistical analysis portion itself. In an alternative embodiment that does not use the statistical analysis portion, all pixels that are flagged as defective are corrected. As with the choice of using or not using video subsampling, the decision to use the statistical analysis portion of the error detection and correction algorithm depends on a trade-off between efficiency and processor performance. If the processor is fast enough, then efficiency concerns are not as important. On the other hand, if the processor is not fast enough, then pixel correction efficiency becomes important enough to justify implementing the statistical analysis portion of the error detection and correction algorithm.
Wie für Fachleute selbstverständlich ist, kann die vorliegende Erfindung in anderen speziellen Formen verkörpert werden, ohne von deren wesentlichen Eigenschaften abzuweichen. Die Rate der Videounterabtastung könnte beispielsweise verändert oder diese überhaupt nicht ausgeführt werden. Alternativ könnte die Logik der wahlfreien statistischen Datenbank von einer zum Korrigieren von fehlerhaften Pixeln als Vorgabe zu einer, bei der fehlerhafte Pixel nur korrigiert werden, wenn dies durch die Tendenzen von der statistischen Datenbank gerechtfertigt wird, geändert werden.As will be understood by those skilled in the art, the present invention may be embodied in other specific forms without departing from its essential characteristics. For example, the rate of video subsampling could be changed or not performed at all. Alternatively, the logic of the random statistical database could be changed from one for correcting defective pixels by default to one in which defective pixels are corrected only when justified by the trends from the statistical database.
■ ■ ' .■ ;■ . .-■.'-.■ ■ ' .■ ;■ . .-■.'-.
V. KEIN BILDPUFFERSPEICHER V. NO FRAME BUFFER MEMORY
Die Beseitigung der Verarbeitung in der Kamera ermöglicht die Beseitigung des Bildpufferspeichers, da digitale Pixeldaten für eine derartige Verarbeitung nicht gespeichert werden müs- ; sen. Ein weiteres potentielles Problem besteht jedoch darin, daß die Ausgabe von Daten aus dem Sensor in Abhängigkeit von der Verfügbarkeit des Busses gehalten werden muß. Dies kann einen sehr großen Pufferspeicher erfordern. Bei einem Ausführungsbeispiel der Kamera wird nur ein kleiner Puffer in der Busschnittstelle verwendet. Ein kleiner Puffer ist durch Steuern des Zeitablaufs dessen, wann der Sensor gelesen wird, entsprechend dem, wann der Hauptrechnerbus verfügbar ist, und nur Lesen einer Menge an Daten, die bis zur nächsten Busverfügbarkeit gepuffert werden können, erreichbar.Eliminating processing in the camera allows for elimination of the frame buffer since digital pixel data does not need to be stored for such processing . Another potential problem, however, is that the output of data from the sensor must be kept dependent on the availability of the bus. This can require a very large buffer. In one embodiment of the camera, only a small buffer is used in the bus interface. A small buffer is achievable by controlling the timing of when the sensor is read according to when the host bus is available and only reading an amount of data that can be buffered until the next bus availability.
Fig. 13 ist ein Blockdiagramm einer erfindungsgemäßen Videokamera. Das System umfaßt eine Linse 1310 und eine Sensormatrix, wie z.B. eine CMOS-Sensormatrix 1312, und ist mit einem USB 1320 verbunden.. ■Fig. 13 is a block diagram of a video camera according to the invention. The system includes a lens 1310 and a sensor array, such as a CMOS sensor array 1312, and is connected to a USB 1320. ■
Die digitalisierten Signale vom CMOS-Sensorchip werden, anstatt daß sie wie im Stand der Technik in einem Bildpufferspeicher gespeichert werden, direkt zu einer Digitalverarbeitungsschaltung 1348 geliefert. Sie werden zuerst zu einem Video-Digitalsignalprozessor 1350 geliefert, der die Komprimierung und gegebenenfalls Größenordnungsfunktionen für eine minimierte Datenübertragung wie z.B. Beschneiden, Skalieren und digitale Filterung durchführt. Wenn sie einmal verarbeitet sind, werden die digitalen Daten zu einer Busschnittstelle 1354 geliefert.The digitized signals from the CMOS sensor chip, rather than being stored in a frame buffer as in the prior art, are provided directly to a digital processing circuit 1348. They are first provided to a video digital signal processor 1350 which performs compression and optional scaling functions for minimized data transfer such as cropping, scaling and digital filtering. Once processed, the digital data is provided to a bus interface 1354.
Die Busschnittstelle 1354 umfaßt einen Bussteuereinheitspuffer 1356 und eine Bussteuereinheit 1358. Der Puffer 1356 5 speichert mindestens eine einzelne Zeile von Daten aus einerThe bus interface 1354 includes a bus control unit buffer 1356 and a bus control unit 1358. The buffer 1356 5 stores at least a single line of data from a
CMOS-Sensorzeile. Vorzugsweise ist der Bussteuereinheitspuffer 1356 in der Lage, zwei USB-Vollbilder mit der maximal möglichen Rate oder 2 kBytes zu speichern. In Abhängigkeit von der Vollbildrate, Komprimierungsrate usw. kann dies typischerweise um bis zu 10 Zeilen oder sogar 15-20 Zeilen variieren, wenn eine Dezimierung durchgeführt wird.CMOS sensor line. Preferably, the bus controller buffer 1356 is capable of storing two USB frames at the maximum possible rate, or 2 kBytes. Depending on the frame rate, compression rate, etc., this can typically vary by up to 10 lines, or even 15-20 lines if decimation is performed.
Die Bussteuereinheit 1358 liefert ein Steuersignal auf einer Leitung 1360 zum Takt- und Steuergenerator 1326. Der Taktgenerator 1326 liefert Taktsignale auf der Leitung 1364 zur GMOS-Sensormatrix 1322. Die Taktsignale 1364 umfassen die Zeilen- und Spaltenübertragungsimpulse. Die Spaltenübertragungsimpulse werden wie im Stand der Technik geliefert, wobei sie periodisch die geladenen Werte aus der CMOS-Sensormatrix laden. Die Zeilenübertragungsimpulse werden jedoch verändert, um das Auslesen der Daten aus der CMOS-Sensormatrix mit der Verarbeitung durch die folgende Schaltung und der Übertragung der Daten zum USB abzustimmen.The bus controller 1358 provides a control signal on line 1360 to the clock and control generator 1326. The clock generator 1326 provides clock signals on line 1364 to the GMOS sensor array 1322. The clock signals 1364 include the row and column transfer pulses. The column transfer pulses are provided as in the prior art, periodically loading the loaded values from the CMOS sensor array. However, the row transfer pulses are varied to coordinate the reading of the data from the CMOS sensor array with the processing by the following circuitry and the transfer of the data to the USB.
Bei einem Ausführungsbeispiel ist die Digitalverarbeitungsschaltung 1348 in dasselbe Halbleiterchipsubstrat integriert wie die CMOS-Sensormatrix 1312, der Taktgenerator 1326, der ADC 1328 und die Zeilen- und Spaltenlogik und -puffer. Die Beseitigung des Bildpuffers ermöglicht diesen einzigen Chip.In one embodiment, digital processing circuitry 1348 is integrated into the same semiconductor chip substrate as CMOS sensor array 1312, clock generator 1326, ADC 1328, and row and column logic and buffers. Elimination of the frame buffer enables this single chip.
Dies ermöglicht, daß eine kompaktere, kostengünstigere Videokamera konstruiert wird.This makes it possible to construct a more compact, more cost-effective video camera.
Fig. 14 stellt die Zeitsteuerung der Zeilenübertragungspulse dar, die auf der Leitung 1364 geliefert werden. Anstatt eines . kontinuierlichen Stroms von Impulsen werden die Bits in Gruppen ausgetaktet, wie sie von der Verarbeitungsschaltung benötigt werden, wie dargestellt. Eine erste Gruppe von drei Zeilen 1466 wird ausgegeben, und dann besteht eine Verzögerung, während diese Pixel verarbeitet und zum Bus übertragen werden. Dann kann eine nächste Gruppe von zwei Zeilen 1468 ge-Figure 14 illustrates the timing of the line transfer pulses provided on line 1364. Rather than a continuous stream of pulses, the bits are clocked out in groups as required by the processing circuitry, as shown. A first group of three lines 1466 is output, and then there is a delay while these pixels are processed and transferred to the bus. Then a next group of two lines 1468 can be output.
liefert werden. Es könnte dann in Abhängigkeit von der Verfügbarkeit im Zeilenpuffer und der Zeitsteuerung der Übertragung von Daten auf dem USB eine Verzögerung bestehen. Eine einzelne Zeile 1469 ist als nächstes übertragen dargestellt, gefolgt von einer nachfolgenden Gruppe von vier Zeilen, die durch eine Anzahl von Impulsen 1470 übertragen werden. Nachdem ein ganzes Bild übertragen wurde, wird ein vertikaler Übertragungsimpuls 1472 geliefert. Das Beispiel von Fig. 14 ist einfach als Erläuterung vorgesehen. Man beachte, daß, da die Zeilenübertragungsimpulse zwischen denselben Spaltenimpulsen geliefert werden, um die gezeigten Lücken zuzulassen, die Impulse viel enger zusammen geliefert werden. Somit werden Bündel von kleinen Gruppen von Impulsen geliefert, um Pixeldaten schnell zu senden, so schnell die Schaltung sie verarbeiten kann. Bei einem Ausführungsbeispiel kann ein ganzes Bild in einer Reihe von eng beabstandeten Impulsen ausgetaktet werden, was ermöglicht, daß die Verarbeitung vor dem nächsten Spaltenübertragungsimpuls vollendet wird. Wenn die Verarbeitung zum Zeitpunkt des nächsten Spaltenübertragungsimpulses noch nicht beendet ist, kann eine Verzögerung bestehen, die der Zeitsteuerung der Verarbeitung und der Verfügbarkeit des USB entspricht. Somit können die Zeilenimpulse alle nacheinander geliefert werden, aber mit einer schnelleren Rate als im Stand der Technik, und die Zeitsteuerung dieser Gruppierung von Impulsen nach dem Spaltenimpuls kann so verändert werden, daß sie direkt nach oder direkt vor dem nächsten Spaltenimpuls liegen, um den Verarbeitungs- und Buszeitsteuerungen gerecht zu werden.There could then be a delay depending on the availability in the line buffer and the timing of the transfer of data on the USB. A single line 1469 is shown being transferred next, followed by a subsequent group of four lines transferred by a number of pulses 1470. After an entire image has been transferred, a vertical transfer pulse 1472 is delivered. The example of Figure 14 is provided simply for illustration. Note that since the line transfer pulses are delivered between the same column pulses to allow for the gaps shown, the pulses are delivered much closer together. Thus, bursts of small groups of pulses are delivered to send pixel data quickly, as fast as the circuitry can process it. In one embodiment, an entire image can be clocked out in a series of closely spaced pulses, allowing processing to be completed before the next column transfer pulse. If processing has not finished at the time of the next column transfer pulse, there may be a delay corresponding to the timing of the processing and the availability of the USB. Thus, the row pulses can be delivered all in sequence, but at a faster rate than in the prior art, and the timing of this grouping of pulses after the column pulse can be changed to be just after or just before the next column pulse to accommodate the processing and bus timings.
0 VI. KEINE KOMPRIMIERUNG 0 VI. NO COMPRESSION
Bei einem Ausführungsbeispiel der Erfindung können der. Korn primierungsblock 26 und der Dekomprimierungsblock 38 von Fig.In one embodiment of the invention, the compression block 26 and the decompression block 38 of Fig.
2 beseitigt werden. Dies kann beispielsweise durchgeführt werden, wenn ein neuer USB mit höherer Bandbreite entwickelt2. This can be done, for example, if a new USB with higher bandwidth is developed
• i—...·•i—...·
wird. Frühere Ausführungsbeispiele können jedoch immer noch erwünscht sein, wenn Sensoren mit erhöhter Empfindlichkeit entwickelt werden, was ermöglicht, daß Videobilddaten mit höherer Auflösung übertragen werden, wobei die zusätzliche Bandbreite, die zur Verfügung gestellt wird, verwertet wird. Ein Ausführungsbeispiel nutzt jedoch die zusätzliche Bandbreite durch Beseitigen des Bedarfs für eine Komprimierung aus, wobei somit die Videokamera weiter vereinfacht wird und ihre Kosten verringert werden.However, earlier embodiments may still be desirable as sensors with increased sensitivity are developed, allowing higher resolution video image data to be transmitted, taking advantage of the additional bandwidth provided. One embodiment, however, takes advantage of the additional bandwidth by eliminating the need for compression, thus further simplifying the video camera and reducing its cost.
Dieselben in Fig. 2 gezeigten Hauptfunktionen würden im Hauptrechner durchgeführt werden, abgesehen von der Dekomprimierung. Die Kamera würde bei einem Ausführungsbeispiel dennoch das Korrekturregister 34 enthalten, was ermöglicht, daß die kostengünstige Linse 10 verwendet wird.The same major functions shown in Figure 2 would be performed in the host computer, except for decompression. The camera would still include the correction register 34 in one embodiment, allowing the inexpensive lens 10 to be used.
VII. VERLUSTBEHAFTETE KOMPRIMIERUNG VII. LOSSY COMPRESSION
Bei einem alternativen Ausführungsbeispiel kann ein verlustbehaftetes Komprimierungsverfahren verwendet werden. Eine verlustbehaftete Komprimierung bedeutet, daß das wiedergewonnene Bild eine gewisse Auflösung einbüßen kann. Ein Nachteil der verlustbehafteten Komprimierung besteht darin, daß jegliche Vignettierungs- oder Pixelkorrektur, die im Hauptrechner durchgeführt wird, verschlechtert werden würde. Folglich wird bei diesem alternativen Ausführungsbeispiel die Vignettierungskorrektur und die Pixelkorrektur in der Videokamera selbst durchgeführt. Dies ermöglicht, daß ein verlustbehafteter Komprimierungsblock für den Block 26 von Fig. 2 verwendet wird. Die Farbverarbeitungs- und Skalierungsoperationen werden immer noch im Hauptrechner durchgeführt, wobei somit eine einfachere Kamera als der Stand der Technik von Fig. 1 bereitgestellt wird. ■ . ' ■ 'In an alternative embodiment, a lossy compression method may be used. Lossy compression means that the recovered image may lose some resolution. A disadvantage of lossy compression is that any vignetting or pixel correction performed in the host computer would be degraded. Thus, in this alternative embodiment, the vignetting correction and pixel correction are performed in the video camera itself. This allows a lossy compression block to be used for block 26 of Figure 2. The color processing and scaling operations are still performed in the host computer, thus providing a simpler camera than the prior art of Figure 1. ■ . ' ■ '
&Ggr;:!"' O: &Pgr; j Xi&Ggr;:!"' O: &Pgr; j Xi
Wie für Fachleute selbstverständlich ist, kann die vorliegende Erfindung in anderen speziellen Formen verkörpert werden, ohne von deren wesentlichen Merkmalen abzuweichen. Beispielsweise kann. bei einem Ausführungsbeispiel das Korrekturregister Merkmale einer Kamera korrigieren, die von Kamera zu Kamera bei der Herstellung variieren können, welche andere als Merkmale der Linse sind. Anstatt eines physischen gemeinsam genutzten Busses können die Daten von der Kamera zum Hauptrechner oder zu einem mit dem Hauptrechner verbundenen Empfänger drahtlos übertragen werden. Der Hauptrechner selbst kann ein Personalcomputer, eine intelligente Internet-Vorrichtung oder irgendeine andere Vorrichtung oder Komponente mit einer gewissen Art Prozessor oder Verarbeitungsschaltung sein. Folglich soll die vorangehende Beschreibung eine Erläuterung, aber keine Begrenzung des Schutzbereichs der Erfindung, der in den folgenden Ansprüchen dargelegt ist, sein.As will be understood by those skilled in the art, the present invention may be embodied in other specific forms without departing from the essential characteristics thereof. For example, in one embodiment, the correction register may correct for characteristics of a camera that may vary from camera to camera during manufacture, other than characteristics of the lens. Rather than a physical shared bus, the data may be transmitted wirelessly from the camera to the host computer or to a receiver connected to the host computer. The host computer itself may be a personal computer, an intelligent Internet device, or any other device or component having some type of processor or processing circuitry. Accordingly, the foregoing description is intended to be illustrative, but not limitative, of the scope of the invention, which is set forth in the following claims.
Claims (14)
einem Bildsensor, und
einem Verarbeitungselement zum Durchführen einer Datenkomprimierung;
eine Dekomprimierung der komprimierten Daten, Wobei zumindest ein Teil der Operationen der Dekomprimierung parallel durchgeführt wird,
eine Korrektur von anomalen Pixeln, und
eine Farbverarbeitung;
so daß die Schaltung zur Korrektur von anomalen Pixeln und zur Farbverarbeitung in der Videokamera nicht erforderlich ist, und die Korrektur der anomalen Pixel vor der Farbverarbeitung durchgeführt wird.
an image sensor, and
a processing element for performing data compression;
a decompression of the compressed data, wherein at least part of the decompression operations are performed in parallel,
a correction of anomalous pixels, and
a color processing;
so that the circuit for correcting abnormal pixels and for color processing in the video camera is not required, and the correction of the abnormal pixels is carried out before the color processing.
Duplizieren einer Gruppe von Bits aus dem Datenstrom, um Duplikate in mehreren Positionen in einem ersten Register vorzusehen; und
paralleles Durchführen einer Operation zwischen Werten in einem zweiten Register und den Duplikaten, wobei für jedes Duplikat ein anderer Wert verwendet wird. 6. The system of claim 5, wherein the data stream is compressed using Huffman coding, and the operations include:
Duplicating a group of bits from the data stream to provide duplicates in multiple positions in a first register; and
performing an operation in parallel between values in a second register and the duplicates, using a different value for each duplicate.
einem Bildsensor, und
einem Analog-Digital-Wandler, der mit dem Bildsensor gekoppelt ist;
eine Farbverarbeitung;
so daß die Schaltung zur Korrektur von anomalen Pixeln und zur Farbverarbeitung in der Videokamera nicht erforderlich ist, und die Korrektur der anomalen Pixel vor der Farbverarbeitung durchgeführt wird.
an image sensor, and
an analog-to-digital converter coupled to the image sensor;
a colour processing;
so that the circuit for correcting abnormal pixels and for color processing in the video camera is not required, and the correction of the abnormal pixels is carried out before the color processing.
eine Vorrichtung zum Duplizieren einer Gruppe von Bits aus dem Datenstrom, um Duplikate in mehreren Positionen in einem ersten Register vorzusehen; und
eine Vorrichtung zum parallelen Durchführen einer Operation zwischen Werten in einem zweiten Register und den Duplikaten, wobei für jedes Duplikat ein anderer Wert verwendet wird. 9. Apparatus for decoding a Huffman-compressed data stream in a processor with instructions for parallel processing of multiple pixels in a register, comprising:
means for duplicating a group of bits from the data stream to provide duplicates in multiple positions in a first register; and
means for performing an operation between values in a second register and the duplicates in parallel, using a different value for each duplicate.
eine Vorrichtung zum Verwenden eines Ergebnisses der Operation bei einer Indizierungsoperation, um eine Tabel- le von Huffman-decodierten Werten zu indizieren. 10. The apparatus of claim 9, further comprising:
means for using a result of the operation in an indexing operation to index a table of Huffman decoded values.
einem Bildsensor;
einem Analog-Digital-Wandler, der mit dem Bildsensor gekoppelt ist;
einem Speicherelement zum Halten eines Werts, der einem Korrekturfaktor für einen Aspekt der Kamera entspricht, wobei der Wert zu einem entfernten Hauptrechner übertragbar ist; und
einer Schnittstelle, die mit dem Analog-Digital-Wandler und dem Speicherelement gekoppelt ist, zum Herstellen einer Verbindung mit dem entfernten Hauptrechner. 11. Video camera with:
an image sensor;
an analog-to-digital converter coupled to the image sensor;
a memory element for holding a value corresponding to a correction factor for an aspect of the camera, the value being transferable to a remote host computer; and
an interface coupled to the analog-to-digital converter and the memory element for establishing a connection to the remote host computer.
eine Vorrichtung zum Lesen von Bilddaten von einer Bildsensormatrix;
eine Vorrichtung zum Verarbeiten der Bilddaten in einem Video-Digitalsignalprozessor (DSP), wobei die Verarbeitung das Durchführen einer Bildkomprimierung umfaßt;
eine Vorrichtung zum Liefern von verarbeiteten Bilddaten zu einem Bus; und
eine Vorrichtung zum Liefern eines Taktsignals zur Bildsensormatrix, um Bilddaten von der Bildsensormatrix mit einer Rate entsprechend einer Datenübertragungsrate über den Bus zu übertragen, so daß ein Bildpufferspeicher zum Speichern eines gesamten Vollbildes des Bildes nicht erforderlich ist. 14. Video camera comprising:
a device for reading image data from an image sensor array;
means for processing the image data in a video digital signal processor (DSP), the processing comprising performing image compression;
a device for supplying processed image data to a bus; and
means for supplying a clock signal to the image sensor array to transfer image data from the image sensor array over the bus at a rate corresponding to a data transfer rate such that a frame buffer for storing an entire frame of the image is not required.
Applications Claiming Priority (5)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US09/345,167 US6833862B1 (en) | 1999-06-30 | 1999-06-30 | Image sensor based vignetting correction |
| US09/343,934 US6580828B1 (en) | 1999-06-30 | 1999-06-30 | Fast decoding |
| US09/464,364 US7009644B1 (en) | 1999-12-15 | 1999-12-15 | Dynamic anomalous pixel detection and correction |
| US09/602,547 US6704359B1 (en) | 1999-04-15 | 2000-06-21 | Efficient encoding algorithms for delivery of server-centric interactive program guide |
| PCT/US2000/018046 WO2001001675A2 (en) | 1999-06-30 | 2000-06-29 | Video camera with major functions implemented in host software |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| DE20080319U1 true DE20080319U1 (en) | 2002-05-16 |
Family
ID=27502681
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| DE20080319U Expired - Lifetime DE20080319U1 (en) | 1999-06-30 | 2000-06-29 | Video camera in which the main functions are implemented in the main computer software |
Country Status (3)
| Country | Link |
|---|---|
| CN (2) | CN2567940Y (en) |
| DE (1) | DE20080319U1 (en) |
| WO (1) | WO2001001675A2 (en) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| DE10345445B4 (en) * | 2003-02-26 | 2009-04-02 | Easydur Italiana Di Affri Renato | Device for producing a spring |
Families Citing this family (24)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8188878B2 (en) | 2000-11-15 | 2012-05-29 | Federal Law Enforcement Development Services, Inc. | LED light communication system |
| FI113132B (en) * | 2001-06-28 | 2004-02-27 | Nokia Corp | Method and apparatus for improving an image |
| AU2002317219A1 (en) | 2001-07-12 | 2003-01-29 | Do Labs | Method and system for modifying a digital image taking into account its noise |
| US7233352B2 (en) | 2002-06-20 | 2007-06-19 | Hewlett-Packard Development Company, L.P. | Method and apparatus for color non-uniformity correction in a digital camera |
| US7502057B2 (en) | 2002-06-20 | 2009-03-10 | Hewlett-Packard Development Company, L.P. | Method and apparatus for color non-uniformity correction in a digital camera |
| EP1447977A1 (en) | 2003-02-12 | 2004-08-18 | Dialog Semiconductor GmbH | Vignetting compensation |
| WO2004093438A1 (en) * | 2003-04-17 | 2004-10-28 | Nokia Corporation | An improved mobile camera telephone |
| US7355639B2 (en) * | 2003-11-06 | 2008-04-08 | Omnivision Technologies, Inc. | Lens correction using processed YUV data |
| CN100367763C (en) * | 2005-07-19 | 2008-02-06 | 华晶科技股份有限公司 | Method and device for eliminating digital image noise |
| KR100848589B1 (en) | 2005-10-11 | 2008-07-28 | 노키아 코포레이션 | Portable camera phones, image recording methods and camera modules |
| CN101277436B (en) * | 2007-03-26 | 2010-07-14 | 创惟科技股份有限公司 | Multi-serial-flow network camera control system and control method thereof |
| WO2008148022A2 (en) | 2007-05-24 | 2008-12-04 | Federal Law Enforcement Development Services, Inc. | Building illumination apparatus with integrated communications, security and energy management |
| US9100124B2 (en) | 2007-05-24 | 2015-08-04 | Federal Law Enforcement Development Services, Inc. | LED Light Fixture |
| US9294198B2 (en) | 2007-05-24 | 2016-03-22 | Federal Law Enforcement Development Services, Inc. | Pulsed light communication key |
| US9258864B2 (en) | 2007-05-24 | 2016-02-09 | Federal Law Enforcement Development Services, Inc. | LED light control and management system |
| US9455783B2 (en) | 2013-05-06 | 2016-09-27 | Federal Law Enforcement Development Services, Inc. | Network security and variable pulse wave form with continuous communication |
| US11265082B2 (en) | 2007-05-24 | 2022-03-01 | Federal Law Enforcement Development Services, Inc. | LED light control assembly and system |
| US9414458B2 (en) | 2007-05-24 | 2016-08-09 | Federal Law Enforcement Development Services, Inc. | LED light control assembly and system |
| US8103121B2 (en) * | 2007-08-31 | 2012-01-24 | Adobe Systems Incorporated | Systems and methods for determination of a camera imperfection for an image |
| US8890773B1 (en) | 2009-04-01 | 2014-11-18 | Federal Law Enforcement Development Services, Inc. | Visible light transceiver glasses |
| US9265112B2 (en) | 2013-03-13 | 2016-02-16 | Federal Law Enforcement Development Services, Inc. | LED light control and management system |
| US20150198941A1 (en) | 2014-01-15 | 2015-07-16 | John C. Pederson | Cyber Life Electronic Networking and Commerce Operating Exchange |
| US20170048953A1 (en) | 2015-08-11 | 2017-02-16 | Federal Law Enforcement Development Services, Inc. | Programmable switch and system |
| WO2022174881A1 (en) * | 2021-02-16 | 2022-08-25 | Huawei Technologies Co., Ltd. | Event sensor illuminance variation compensation |
Family Cites Families (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4774565A (en) * | 1987-08-24 | 1988-09-27 | Polaroid Corporation | Method and apparatus for reconstructing missing color samples |
| US5280361A (en) * | 1990-07-03 | 1994-01-18 | Canon Kabushiki Kaisha | Data processing apparatus |
| EP0496573B1 (en) * | 1991-01-24 | 1995-12-20 | Matsushita Electric Industrial Co., Ltd. | Pixel defect removing circuit for solid-state image pickup device |
| EP0543980A1 (en) * | 1991-05-10 | 1993-06-02 | Eastman Kodak Company | Customizable timing and control asic for electronic imaging |
| US5231485A (en) * | 1991-11-19 | 1993-07-27 | Scientific-Atlanta, Inc. | Method and apparatus for transforming between fixed-rate vector quantized data and variable rate vector quantized data |
| US5475441A (en) * | 1992-12-10 | 1995-12-12 | Eastman Kodak Company | Electronic camera with memory card interface to a computer |
| JP3163872B2 (en) * | 1993-10-21 | 2001-05-08 | 株式会社日立製作所 | Computer equipment and imaging device |
| JP3242515B2 (en) * | 1993-12-24 | 2001-12-25 | キヤノン株式会社 | Imaging device |
| US5477264A (en) * | 1994-03-29 | 1995-12-19 | Eastman Kodak Company | Electronic imaging system using a removable software-enhanced storage device |
| JPH0969978A (en) * | 1995-08-30 | 1997-03-11 | Sanyo Electric Co Ltd | Image pickup device |
| US5867214A (en) * | 1996-04-11 | 1999-02-02 | Apple Computer, Inc. | Apparatus and method for increasing a digital camera image capture rate by delaying image processing |
| US6005613A (en) * | 1996-09-12 | 1999-12-21 | Eastman Kodak Company | Multi-mode digital camera with computer interface using data packets combining image and mode data |
-
2000
- 2000-06-29 CN CN00900004U patent/CN2567940Y/en not_active Expired - Fee Related
- 2000-06-29 DE DE20080319U patent/DE20080319U1/en not_active Expired - Lifetime
- 2000-06-29 WO PCT/US2000/018046 patent/WO2001001675A2/en not_active Ceased
- 2000-11-29 CN CN008110204A patent/CN1391725A/en active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| DE10345445B4 (en) * | 2003-02-26 | 2009-04-02 | Easydur Italiana Di Affri Renato | Device for producing a spring |
Also Published As
| Publication number | Publication date |
|---|---|
| WO2001001675A2 (en) | 2001-01-04 |
| WO2001001675A3 (en) | 2001-07-05 |
| CN2567940Y (en) | 2003-08-20 |
| CN1365569A (en) | 2002-08-21 |
| CN1391725A (en) | 2003-01-15 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| DE20080319U1 (en) | Video camera in which the main functions are implemented in the main computer software | |
| US6995794B2 (en) | Video camera with major functions implemented in host software | |
| DE20019915U1 (en) | Dynamic detection and correction of abnormal pixels | |
| US5818525A (en) | RGB image correction using compressed flat illuminated files and a simple one or two point correction algorithm | |
| US5065229A (en) | Compression method and apparatus for single-sensor color imaging systems | |
| US5053861A (en) | Compression method and apparatus for single-sensor color imaging systems | |
| JP4559622B2 (en) | Color image compression based on two-dimensional discrete wavelet transform yielding perceptually lossless images | |
| DE4345015C2 (en) | Digital signal processing device | |
| US5237402A (en) | Digital image processing circuitry | |
| DE69326366T2 (en) | Method and device for image signal coding with multi-stage quantization number determination | |
| DE19919600B4 (en) | Apparatus and method for compressing image data received from an image sensor having a Bayer pattern | |
| US6983078B2 (en) | System and method for improving image quality in processed images | |
| US20080247653A1 (en) | Method and apparatus for parallelization of image compression encoders | |
| US20050276496A1 (en) | Image compression for rapid high-quality imaging | |
| DE60013806T2 (en) | METHOD AND CIRCUIT FOR INTRINSIC PROCESSING OF IMAGE DATA IN PICTURE RECORDING DEVICES | |
| CN101686321B (en) | Method and system for reducing noise in image data | |
| US5787209A (en) | Method of filtering images using image compressibility to determine threshold parameter | |
| CN100394766C (en) | Image signal processor and image signal processing method | |
| US8462377B2 (en) | Method, apparatus, and system for reduction of line processing memory size used in image processing | |
| KR100207705B1 (en) | Apparatus and method of addressing for dct block and raster scan | |
| CN101340586A (en) | Video signal processing device, method and program | |
| US10893300B2 (en) | System and method for video processing | |
| JP3979020B2 (en) | Image processing apparatus for sampling compressed image | |
| DE69723358T2 (en) | Address decoder for video matrix | |
| KR100631096B1 (en) | Video cameras whose main functions are implemented in host software |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| R163 | Identified publications notified | ||
| R207 | Utility model specification |
Effective date: 20020620 |
|
| R150 | Utility model maintained after payment of first maintenance fee after three years |
Effective date: 20030717 |
|
| R081 | Change of applicant/patentee |
Owner name: LOGITECH EUROPE S.A., CH Free format text: FORMER OWNER: LOGITECH INC., FREMONT, US Effective date: 20050210 |
|
| R151 | Utility model maintained after payment of second maintenance fee after six years |
Effective date: 20060829 |
|
| R152 | Utility model maintained after payment of third maintenance fee after eight years |
Effective date: 20080627 |
|
| R071 | Expiry of right |