MX2013003446A - Sistema y metodo para procesar datos de imagen utilizando un procesador de señal de imagen con logica de procesamiento de etapa final. - Google Patents

Sistema y metodo para procesar datos de imagen utilizando un procesador de señal de imagen con logica de procesamiento de etapa final.

Info

Publication number
MX2013003446A
MX2013003446A MX2013003446A MX2013003446A MX2013003446A MX 2013003446 A MX2013003446 A MX 2013003446A MX 2013003446 A MX2013003446 A MX 2013003446A MX 2013003446 A MX2013003446 A MX 2013003446A MX 2013003446 A MX2013003446 A MX 2013003446A
Authority
MX
Mexico
Prior art keywords
image
frame
data
pixel
logic
Prior art date
Application number
MX2013003446A
Other languages
English (en)
Inventor
Jeffrey E Frederiksen
Guy Cote
Original Assignee
Apple Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Apple Inc filed Critical Apple Inc
Publication of MX2013003446A publication Critical patent/MX2013003446A/es

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting
    • G06T3/4015Image demosaicing, e.g. colour filter arrays [CFA] or Bayer patterns
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N25/00Circuitry of solid-state image sensors [SSIS]; Control thereof
    • H04N25/40Extracting pixel data from image sensors by controlling scanning circuits, e.g. by modifying the number of pixels sampled or to be sampled
    • H04N25/46Extracting pixel data from image sensors by controlling scanning circuits, e.g. by modifying the number of pixels sampled or to be sampled by combining or binning pixels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/90Dynamic range modification of images or parts thereof
    • G06T5/94Dynamic range modification of images or parts thereof based on local image properties, e.g. for local contrast enhancement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V40/00Recognition of biometric, human-related or animal-related patterns in image or video data
    • G06V40/10Human or animal bodies, e.g. vehicle occupants or pedestrians; Body parts, e.g. hands
    • G06V40/16Human faces, e.g. facial parts, sketches or expressions
    • G06V40/161Detection; Localisation; Normalisation
    • G06V40/162Detection; Localisation; Normalisation using pixel segmentation or colour matching
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • H04N23/60Control of cameras or camera modules
    • H04N23/61Control of cameras or camera modules based on recognised objects
    • H04N23/611Control of cameras or camera modules based on recognised objects where the recognised objects include parts of the human body
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N23/00Cameras or camera modules comprising electronic image sensors; Control thereof
    • H04N23/80Camera processing pipelines; Components thereof
    • H04N23/84Camera processing pipelines; Components thereof for processing colour signals
    • H04N23/88Camera processing pipelines; Components thereof for processing colour signals for colour balance, e.g. white-balance circuits or colour temperature control
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N25/00Circuitry of solid-state image sensors [SSIS]; Control thereof
    • H04N25/40Extracting pixel data from image sensors by controlling scanning circuits, e.g. by modifying the number of pixels sampled or to be sampled
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N25/00Circuitry of solid-state image sensors [SSIS]; Control thereof
    • H04N25/70SSIS architectures; Circuits associated therewith
    • H04N25/71Charge-coupled device [CCD] sensors; Charge-transfer registers specially adapted for CCD sensors
    • H04N25/74Circuitry for scanning or addressing the pixel array

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Oral & Maxillofacial Surgery (AREA)
  • Human Computer Interaction (AREA)
  • Image Processing (AREA)
  • Studio Devices (AREA)
  • Image Analysis (AREA)
  • Spectrometry And Color Measurement (AREA)

Abstract

Las modalidades divulgadas proporcionan un sistema de procesamiento de señal de imagen 32 que incluye una unidad e procesamiento de píxel de etapa final 120 que recibe datos de píxel después de ser procesados por al menos una de una unidad de procesamiento de píxel de etapa inicial 80 y un conducto de procesamiento de píxeles 82; en algunas modalidades, la unidad de procesamiento de etapa final 120 recibe datos de imagen de luminancia/crominancia y se puede configurar para aplicar operaciones de detección de rostros, mapeo de tono local, ajustes de brillantez, contraste, color, así como escala; además, la unidad de procesamiento de etapa final 120 también puede incluir una unidad de estadísticas de etapa final 2208 que puede recopilar estadísticas de frecuencia; las estadísticas de frecuencia pueden ser proporcionadas a un codificador 118 y pueden ser utilizadas para determinar parámetros de cuantificación que van a ser aplicados a un cuadro de imagen.

Description

SISTEMA Y METODO PARA PROCESAR DATOS DE IMAGEN UTILIZANDO UN PROCESADOR DE SEÑAL DE IMAGEN CON LOGICA DE PROCESAMIENTO DE ETAPA FINAL ANTECEDENTES DE LA INVENCION La presente divulgación generalmente se refiere a dispositivos de generación de imágenes digitales y, de manera más particular, a sistemas y método para el procesamiento de datos de imagen obtenidos utilizando un sensor de imagen de un dispositivo de generación de imágenes digitales.
Esta sección pretende introducir al lector a varios aspectos de la técnica que pueden estar relacionados con los diversos aspectos de las presentes técnicas, las cuales se describen y/o reclaman a continuación. Este análisis se considera que es útil al proporcionar al lector información de antecedentes para facilitar un mejor entendimiento de los diversos aspectos de la presente divulgación. Por consiguiente, se debiera entender que estas declaraciones se van a leer bajo esta perspectiva, y no como admisiones de la técnica anterior.
En años recientes, los dispositivos de generación de imágenes digitales se han vuelto más populares debido, al menos en parte, a que dichos dispositivos cada vez son más accesibles para el consumidor promedio. Además, aunado a un número de cámaras digitales autónomas actualmente disponibles en el mercado, no es raro que los dispositivos de generación de imágenes digitales estén integrados como parte de otro dispositivo electrónico, tal como una computadora de escritorio o notebook, un teléfono celular, o un reproductor de medios portátil.
Para adquirir datos de imagen, la mayoría de los dispositivos de generación de imágenes digitales incluye un sensor de imagen que proporciona un número de elementos de detección de luz (por ejemplo, fotodetectores ) configurados para convertir la luz detectada por el sensor de imagen en una señal eléctrica. Un sensor de imagen también puede incluir un arreglo de filtro de color que filtra la luz capturada por el sensor de imagen para capturar la información de color. Los datos de imagen capturados por el sensor de imagen entonces pueden ser procesados por un conducto de procesamiento de imagen, el cual puede aplicar un número de diversas operaciones de procesamiento de imagen a los datos de la imagen para generar una imagen a pleno color que puede ser desplegada para visualización en un dispositivo de despliegue, tal como un monitor.
Aunque las técnicas de procesamiento de imágenes convencionales generalmente se enfocan en producir una imagen visible que sea tanto objetiva como subjetivamente placentera para un observador, dichas técnicas convencionales pueden no corregir de forma adecuada los errores y/o distorsiones en los datos de imagen introducidos por el dispositivo de generación de imágenes y/o el sensor de imagen. Por ejemplo, píxeles defectuosos en el sensor de imagen, los cuales se pueden deber a defectos de fabricación o falla operativa, pueden no detectar con precisión los niveles de luz y, en caso de no corregirse, se pueden manifestar como artefactos que aparecen en la imagen procesada resultante. De manera adicional, la disminución de la intensidad de la luz en los bordes del sensor de imagen, lo cual se puede deber a imperfecciones en la fabricación de la lente, puede afectar de manera adversa las mediciones de caracterización y puede tener como resultado una imagen en la cual la intensidad de la luz general no sea uniforme. El conducto de procesamiento de imagen también puede ejecutar uno o más procesos para afinar la imagen. No obstante, técnicas de afinamiento convencionales pueden no considerarse de manera adecuada para el ruido existente en la señal de la imagen, o pudiera no tener la capacidad para distinguir el ruido de los bordes y áreas texturizadas en la imagen. En dichos casos, las técnicas de afinamiento convencionales en realidad pueden incrementar la apariencia de ruido en la imagen, lo cual por lo general es poco deseable. Además, también se pueden ejecutar diversos pasos de procesamiento de imágenes adicionales, algunos de los cuales se pueden basar en estadísticas de imagen recopiladas por un motor de recopilación de estadísticas.
Otra operación de procesamiento de imagen que se puede aplicar a los datos de imagen capturados por el sensor de imagen es una operación de interpolación cromática (demosaicing) . Debido a que el arreglo de filtro de color generalmente proporciona datos de color a una longitud de onda por pixel de sensor, un conjunto completo de datos de color generalmente es interpolado para cada canal de color a fin de reproducir una imagen a pleno color (por ejemplo, imagen RGB) . Técnicas convencionales de interpolación cromática generalmente interpolan valores para los datos de color faltantes en una dirección horizontal o vertical, generalmente dependiendo de cierto tipo de umbral fijo. Sin embargo, dichas técnicas de interpolación cromática convencionales pueden no considerar de manera adecuada las ubicaciones y dirección de los bordes dentro de la imagen, lo cual puede tener como resultado artefactos de borde, tales como distorsión por solapamiento, artefactos de tablero, o artefactos de arco iris, siendo introducidos en la imagen a pleno color, particularmente a lo largo de los bordes diagonales dentro de la imagen.
Por consiguiente, se debieran tratar varias consideraciones cuando se procese una imagen digital obtenida con una cámara digital u otro dispositivo de generación de imágenes a fin de mejorar la apariencia de la imagen resultante. En particular, algunos aspectos de la siguiente divulgación pueden corregir uno o más de los inconvenientes brevemente mencionados con antelación.
SUMARIO DE LA INVENCION A continuación se divulga aquí un sumario de algunas modalidades. Se debiera entender que estos aspectos son presentados simplemente para proporcionar al lector un breve sumario de estas diversas modalidades y que estos aspectos no pretenden limitar el alcance de esta divulgación. De hecho, esta divulgación puede abarcar una variedad de aspectos que pueden no ser establecidos a continuación.
La presente divulgación proporciona e ilustra diversas modalidades de las técnicas de procesamiento de señal de imagen. Particularmente, las modalidades divulgadas de esta divulgación se pueden referir al procesamiento de datos de imagen utilizando una unidad de procesamiento de imagen final, el arreglo y configuración de memorias intermedias de línea para implementar lógica de procesamiento de píxeles en bruto, una técnica para manejar el movimiento de los datos de píxel en la presencia de condiciones de desbordamiento (también denominado sobrecarga) , técnicas para sincronizar datos de audio y video, así como técnicas relacionadas con el uso de los diversos formatos de memoria de píxel que pueden ser utilizados para almacenar datos de píxel en memoria y para leer datos de píxel de la memoria.
Con respecto al procesamiento de etapa, las modalidades divulgadas proporcionan un sistema de procesamiento de señal de imagen que incluye una unidad de procesamiento de pixeles de etapa final que recibe los datos de píxel después de ser procesados por al menos una de una unidad de procesamiento de píxel de etapa inicial y un conducto de procesamiento de píxel. En algunas modalidades, la unidad de procesamiento de etapa final recibe datos de imagen de luminancia/crominancia y pueden ser configurados para aplicar operaciones de detección de rostro, mapeo de tono local, ajustes de brillantez, contraste, color, así como escala. Además, la unidad de procesamiento de etapa final también puede incluir una unidad de estadísticas de etapa final que puede recopilar estadísticas de frecuencia. Las estadísticas de frecuencia pueden ser proporcionadas a un codificador y pueden ser utilizadas para determinar los parámetros de cuantificación que se van a aplicar a un cuadro de imagen.
Un aspecto adicional de la divulgación se refiere a la implementación de una unidad de procesamiento de píxeles en bruto utilizando un conjunto de memorias intermedias de línea. En una modalidad, el conjunto de memorias intermedias de línea pueden incluir un primer subconjunto y un segundo subconjunto. Diversas unidades lógicas de la unidad de procesamiento de píxeles en bruto se pueden implementar utilizando el primer y segundo subconjuntos de memorias intermedias de línea en una manera compartida. Por ejemplo, en una modalidad, lógica de corrección y detección de píxeles defectuosos puede ser implementada utilizando el primer subconjunto de memorias intermedias de línea. El segundo subconjunto de memorias intermedias de línea puede ser utilizado para implementar lógica de corrección de sombreado de lente, ganancia, desplazamiento, y lógica de recorte y lógica de interpolación cromática. Además, la reducción del ruido también se puede implementar utilizando al menos una porción de cada uno del primer y segundo subconjuntos de memorias intermedias de línea.
Otro aspecto de la divulgación se puede referir a un sistema de procesamiento de señal de imagen que incluye lógica de control de desbordamiento que detecta una condición de desbordamiento cuando una unidad destino, cuando una fila de entrada del sensor y/o unidad de procesamiento de etapa inicial recibe contrapresión desde una unidad de destino corriente abajo. El sistema de procesamiento de señal de imagen también puede incluir un controlador de destello (flash) que está configurado para activar un dispositivo de destello antes del inicio de un cuadro de imagen objetivo utilizando una señal de temporizacion de sensor. En una modalidad, el controlador de destello recibe una señal de temporizacion de sensor retardada y determina un tiempo de inicio de activación de destello utilizando la señal de temporizacion de sensor retardada para identificar un tiempo correspondiente al final del cuadro previo, incrementando ese tiempo por un tiempo de supresión vertical, y después sustrayendo un primer desplazamiento para compensar el retardo entre la señal de temporizacion del sensor y la señal de temporizacion del sensor retardada. Después, el controlador de destello sustrae un segundo desplazamiento para determinar el tipo de activación de destello, asegurando así que el destello esté activado antes de recibir el primer píxel del cuadro objetivo. Aspectos adicionales de la divulgación proporcionan técnicas relacionadas con la sincronización de audio-video. En una modalidad, un registro de código de tiempo proporciona un sello de la hora actual cuando se muestreó. El valor del registro de código de tiempo puede ser incrementado a intervalos regulares con base en un reloj del sistema de procesamiento de señal de imagen. Al inicio de un cuadro actual adquirido por un sensor de imagen, el registro de código de tiempo es muestreado, y un sello de hora es almacenado en un registro de sello de hora asociado con el sensor de imagen. El sello de hora entonces es leído a partir del registro de sello de hora y escrito en un conjunto de metadatos asociados con el cuadro actual. El sello de hora almacenado en los metadatos del cuadro entonces puede ser utilizado para sincronizar el cuadro actual con un conjunto correspondiente de datos de audio.
Un aspecto adicional de la presente divulgación proporciona un controlador de entrada/salida de memoria flexible que está configurado para almacenar y leer múltiples tipos de píxeles y formatos de memoria de píxel . Por ejemplo, el controlador I/O de memoria puede soportar el almacenamiento y lectura de píxeles de imagen en bruto en diversos bits de precisión, tal como 8 bits, 10 bits, 12 bits, 14 bits y 16 bits. Los formatos de píxel que están desalineados con los bits de memoria (por ejemplo, que no son un múltiplo de 8 bits) pueden ser almacenados en una manera empaquetada. El controlador I/O de memoria también puede soportar diversos formatos de conjuntos de píxel RGB y conjuntos de píxel YCC.
Diversos refinamientos de las características antes observadas pueden existir en relación a los diversos aspectos de la presente divulgación. Características adicionales también se pueden incorporar en estos diversos aspectos. Estos refinamientos y características adicionales pueden existir de manera individual o en cualquier combinación. Por ejemplo, diversas características que se analizan a continuación en relación con una o más de las modalidades ilustradas se pueden incorporar en cualquiera de los aspectos antes descritos de la presente divulgación, solas o en cualquier combinación. Una vez más, el breve sumario antes presentado pretende únicamente familiarizar al lector con algunos aspectos y contextos de las modalidades de la presente divulgación sin limitación a la materia sujeto reclamada .
BREVE DESCRIPCION DE LAS FIGURAS El archivo de solicitud o patente contiene al menos un dibujo realizado a color. Copias de esta publicación de solicitud de patente o de esta patente con dibujos a color serán proporcionadas por la oficina al momento de la solicitud y pago de los derechos necesarios.
Diversos aspectos de esta divulgación se pueden entender mejor al momento de la lectura de la siguiente descripción detallada y con referencia a los dibujos en los cuales : La figura 1 es un diagrama en bloques simplificado que muestra componentes de un ejemplo de un dispositivo electrónico que incluye un dispositivo de generación de imagen y circuitería de procesamiento de imagen, configurados para implementar una o más de las técnicas de procesamiento de imagen establecidas en la presente divulgación; La figura 2 muestra una representación gráfica de un bloque de 2x2 píxeles de un arreglo de filtro de color Bayer que puede ser implementado en el dispositivo de generación de imágenes de la figura 1; La figura 3 es una vista en perspectiva del dispositivo electrónico de la figura 1 en la forma de un dispositivo de computación laptop, de acuerdo con aspectos de la presente divulgación; La figura 4 es una vista frontal del dispositivo electrónico de la figura 1 en la forma de un dispositivo de computación de escritorio, de acuerdo con aspectos de la presente divulgación; La figura 5 es una vista frontal del dispositivo electrónico de la figura 1 en la forma de un dispositivo electrónico portátil manual, de acuerdo con aspectos de la presente divulgación; La figura 6 es una vista posterior del dispositivo electrónico que se muestra en la figura 5; La figura 7 es un diagrama en bloques que ilustra una modalidad de la circuitería de procesamiento de imagen de la figura 1 que incluye lógica de procesamiento de señal de imagen de etapa inicial (ISP) y lógica de procesamiento de conducto ISP, de acuerdo con aspectos de la presente divulgación; La figura 8 es un diagrama en bloques que ilustra otra modalidad de la circuitería de procesamiento de imagen de la figura 1 que incluye lógica de procesamiento de señal de imagen de etapa inicial (ISP), lógica de procesamiento de conducto (canal) ISP, y lógica de procesamiento de etapa final ISP, de acuerdo con aspectos de la presente divulgación; La figura 9 es un gráfico de flujo que muestra métodos para procesar datos de imagen utilizando cualquiera de la circuitería de procesamiento de imagen de la figura 7 o la figura 8, de acuerdo con aspectos de la presente divulgación; La figura 10 es un diagrama en bloques más detallado que muestra una modalidad de la lógica de etapa inicial ISP que puede ser implementada en la figura 7 o la figura 8, de acuerdo con aspectos de la presente divulgación; La figura 11 es un gráfico de flujo que muestra un método para procesar datos de imagen en la lógica de unidad de etapa inicial ISP de la figura 10, de acuerdo con una modalidad; La figura 12 es un diagrama en bloques que ilustra una configuración de registros almacenados en memoria intermedia dobles y registros de control que pueden ser utilizados para procesar datos de imagen en la lógica de unidad de etapa inicial ISP, de acuerdo con una modalidad; Las figuras 13-15 son diagramas de temporización que muestran diferentes modos para disparar el procesamiento de un cuadro de imagen, de acuerdo con modalidades de las presentes técnicas, La figura 16 es un diagrama que muestra un registro de control con más detalle, de acuerdo con una modalidad; La figura 17 es un gráfico de flujo que muestra un método para utilizar una unidad de procesamiento de pixeles de etapa inicial para procesar cuadros de imagen cuando la lógica de etapa inicial ISP de la figura 10 está operando en un modo de sensor sencillo; La figura 18 es un gráfico de flujo que muestra un método para utilizar una unidad de procesamiento de pixeles de etapa inicial para procesar cuadros de imagen cuando la lógica de etapa inicial ISP de la figura 10 está operando en un modo de sensor dual ; La figura 19 es un gráfico de flujo que muestra un método para utilizar una unidad de procesamiento de píxel de etapa inicial para procesar cuadros de imagen cuando la lógica de etapa inicial ISP de la figura 10 está operando en un modo de sensor dual ,- La figura 20 es un gráfico de flujo que muestra un método en el cual ambos sensores de imagen están activos, pero en donde un primer sensor de imagen está enviando cuadros de imagen a una unidad de procesamiento de píxel de etapa inicial, mientras que el segundo sensor de imagen está enviando cuadros de imagen a una unidad de procesamiento de estadísticas de manera que las estadísticas de la generación de imágenes para el segundo sensor están inmediatamente disponibles cuando el segundo sensor de imagen continúa enviando cuadros de imagen a la unidad de procesamiento de píxel de etapa inicial en un tiempo posterior, de acuerdo con una modalidad.
La figura 21 es un gráfico que muestra un formato de direccionamiento de memoria lineal que puede ser aplicado a formatos de píxel almacenados en una memoria del dispositivo electrónico de la figura 1, de acuerdo con aspectos de la presente divulgación; La figura 22 es un gráfico que muestra un formato de direccionamiento de memoria en mosaico que puede ser aplicado a formatos de píxel almacenados en una memoria del dispositivo electrónico de la figura 1, de acuerdo con aspectos de la presente divulgación; La figura 23 es un gráfico que muestra diversas regiones de generación de imagen que pueden ser definidas dentro de un cuadro de imagen fuente capturado por un sensor de imagen, de acuerdo con aspectos de la presente divulgación; La figura 24 es un gráfico que muestra una técnica para utilizar la unidad de procesamiento de etapa inicial ISP para procesar tiras verticales en traslape de un cuadro de imagen; La figura 25 es un diagrama que muestra cómo se puede aplicar la permutación de bytes a datos de píxel de imagen de entrada provenientes de la memoria utilizando un código de permutación, de acuerdo con aspectos de la presente divulgación; Las figuras 26-29 muestran ejemplos de formatos de memoria para datos de imagen en bruto que pueden ser soportados por la circuitería de procesamiento de imagen de la figura 7 o la figura 8, de acuerdo con modalidades de la presente divulgación; Las figuras 30-34 muestran ejemplos de formatos de memoria para datos de imagen RGB a pleno color que pueden ser soportados por la circuitería de procesamiento de imagen de la figura 7 o la figura 8, de acuerdo con modalidades de la presente divulgación; Las figuras 35-36 muestran ejemplos de formatos de memoria para datos de imagen de luminancia/crominancia (YUV/YC1C2) que pueden ser soportados por la circuitería de procesamiento de imagen de la figura 7 o la figura 8, de acuerdo con modalidades de la presente divulgación; La figura 37 muestra un ejemplo de cómo determinar una ubicación de cuadro en memoria en un formato de direccionamiento lineal, de acuerdo con aspectos de la presente divulgación; La figura 38 muestra un ejemplo de cómo determinar una ubicación de cuadro en memoria en un formato de direccionamiento de mosaico, de acuerdo con aspectos de la presente divulgación; La figura 39 es un diagrama en bloques de la circuitería ISP de la figura 8 que muestra cómo se puede ejecutar el manejo del desbordamiento, de acuerdo con una modalidad de la presente divulgación; La figura 40 es un gráfico de flujo que muestra un método para el manejo del desbordamiento cuando ocurre una condición de desbordamiento mientras que los datos de píxel de imagen están siendo leídos desde la memoria de la imagen, de acuerdo con aspectos de la presente divulgación; La figura 41 es un gráfico de flujo que muestra un método para manejo de desbordamiento cuando ocurre una condición de desbordamiento mientras que los datos de píxel de imagen están siendo leídos desde una interfaz de sensor de imagen, de acuerdo con una modalidad de la presente divulgación; La figura 42 es un gráfico de flujo que muestra otro método para manejo de desbordamiento cuando ocurre una condición de desbordamiento mientras los datos de píxel de imagen están siendo leídos desde una interfaz de sensor de imagen, de acuerdo con una modalidad adicional de la presente divulgación; La figura 43 proporciona un gráfico de la imagen (por ejemplo, video) y datos de audio correspondientes que pueden ser capturados y almacenados por el dispositivo electrónico de la figura 1; La figura 44 ilustra un conjunto de registros que pueden ser utilizados para proporcionar sellos de hora para sincronización de los datos de audio y video de la figura 43, de acuerdo con una modalidad; La figura 45 es una representación simplificada de un cuadro de imagen que pueden ser capturado como parte de los datos de video de la figura 43 y que muestra la manera en que la información del sello de hora puede ser almacenada como parte de los metadatos del cuadro de imagen, de acuerdo con aspectos de la presente divulgación; La figura 46 es un gráfico de flujo que muestra un método para utilizar sellos de hora con base en una señal VSYNC para sincronizar los datos de imagen con datos de audio, de acuerdo con una modalidad; La figura 47 es un diagrama en bloques de la circuitería ISP de la figura 8 que muestra la manera en que se puede ejecutar el control de temporización de destello, de acuerdo con una modalidad de la presente divulgación; La figura 48 muestra una técnica para determinar los tiempos de activación y desactivación de destello de acuerdo con una modalidad de la presente divulgación; La figura 49 es un gráfico de flujo que muestra un método para determinar los tiempos de activación de destello con base en la técnica mostrada en la figura 48; La figura 50 es un gráfico de flujo que muestra un método para utilizar un pre-destello para actualizar las estadísticas de imagen antes de la adquisición de una escena de imagen utilizando un destello, de acuerdo con aspectos de la presente divulgación; La figura 51 es un diagrama en bloques que proporciona una vista más detallada de una modalidad de la unidad de procesamiento de píxel de etapa inicial ISP, tal como se muestra en la lógica de etapa inicial ISP de la figura 10, de acuerdo con aspectos de la presente divulgación; La figura 52 es un diagrama de proceso que ilustra la manera en que se puede aplicar la filtración temporal a los datos de pixel de imagen recibidos por la unidad de procesamiento de píxel de etapa inicial ISP que se muestra en la figura 51, de acuerdo con una modalidad; La figura 53 ilustra un conjunto de píxeles de imagen de referencia y un conjunto de píxeles de imagen actual correspondientes que pueden ser utilizados para determinar uno o más parámetros para el proceso de filtración temporal que se muestra en la figura 52; La figura 54 es un gráfico de flujo que ilustra un proceso para aplicar filtración temporal a un píxel de imagen actual de un conjunto de datos de imagen, de acuerdo con una modalidad; La figura 55 es un gráfico de flujo que muestra una técnica para calcular un valor delta de movimiento para uso con la filtración temporal del píxel de imagen actual de la figura 54, de acuerdo con una modalidad; La figura 56 es un gráfico de flujo que ilustra otro proceso para aplicar filtración temporal a un píxel de imagen actual de un conjunto de datos de imagen que incluye el uso de diferentes ganancias para cada componente de color de los datos de imagen, de acuerdo con otra modalidad; La figura 57 es un diagrama de proceso que ilustra la manera en que una técnica de filtración temporal utiliza tablas separadas de movimiento y luminancia para cada componente de color de los datos de píxel de imagen recibidos por la unidad de procesamiento de píxel de etapa inicial ISP que se muestra en la figura 51, de acuerdo con una modalidad adicional; La figura 58 es un gráfico de flujo que ilustra un proceso para aplicar filtración temporal a un píxel de imagen actual de un conjunto de datos de imagen utilizando las tablas de movimiento y luminancia que se muestran en la figura 57, de acuerdo con una modalidad adicional; La figura 59 ilustra una muestra de datos de imagen en bruto de plena resolución que pueden ser capturados por un sensor de imagen, de acuerdo con aspectos de la presente divulgación; La figura 60 ilustra un sensor de imagen que puede ser configurado para aplicar el agrupamiento a los datos de imagen en bruto de plena resolución de la figura 59 a fin de emitir una muestra de datos de imagen en bruto agrupados, de acuerdo con una modalidad de la presente divulgación; La figura 61 ilustra una muestra de datos de imagen en bruto agrupados que pueden ser proporcionados por el sensor de imagen de la figura 60, de acuerdo con aspectos de la presente divulgación; La figura 62 muestra los datos de imagen en bruto agrupados de la figura 61 después de ser re-muestreados por un filtro de compensación de agrupamiento para proporcionar, de acuerdo con aspectos de la presente divulgación; La figura 63 muestra un filtro de compensación de agrupamiento que puede ser implementado en la unidad de procesamiento de píxel de etapa inicial ISP de la figura 51, de acuerdo con una modalidad; La figura 64 es una imagen gráfica de varios tamaños de paso que pueden ser aplicados a un analizador diferencial para seleccionar píxeles de entrada centrales e índice/fases para la filtración de compensación de agrupamiento, de acuerdo con aspectos de la presente divulgación; La figura 65 es un gráfico de flujo que ilustra un proceso para escalar datos de imagen utilizando el filtro de compensación de agrupamiento de la figura 63, de acuerdo con una modalidad; La figura 66 es un gráfico de flujo que ilustra un proceso para determinar un píxel central de fuente de entrada actual para filtración horizontal y vertical mediante el filtro de compensación de agrupamiento de la figura 63, de acuerdo con una modalidad; La figura 67 es un gráfico de flujo que ilustra un proceso para determinar un índice para seleccionar coeficientes de filtración para filtración horizontal y vertical mediante el filtro de compensación de agrupamiento de la figura 63, de acuerdo con una modalidad.
La figura 68 es un diagrama en bloques más detallado que muestra una modalidad de una unidad de procesamiento de estadísticas que puede ser implementada en la lógica de procesamiento de etapa inicial ISP, como se muestra en la figura 10, de acuerdo con aspectos de la presente divulgación; La figura 69 muestra diversos casos de límite de cuadro de imagen que pueden ser considerados cuando se aplican técnicas para detectar y corregir píxeles defectuosos durante el procesamiento de estadísticas por la unidad de procesamiento de estadísticas de la figura 68, de acuerdo con aspectos de la presente divulgación; La figura 70 es un gráfico de flujo que ilustra un proceso para ejecutar detección y corrección de píxeles defectuosos durante el procesamiento de estadísticas, de acuerdo con una modalidad; La figura 71 muestra un perfil tridimensional que muestra la intensidad de la luz contra la posición del píxel para una lente convencional de un dispositivo de generación de imagen; La figura 72 es un dibujo a color que muestra la intensidad de luz no uniforme a través de la imagen, lo cual puede ser el resultado de las irregularidades del sombreado de la lente; La figura 73 es una ilustración gráfica de un cuadro de imagen en bruto que incluye una región de corrección de sombreado de lente y una rejilla de ganancia, de acuerdo con aspectos de la presente divulgación; La figura 74 ilustra la interpolación de un valor de ganancia para un píxel de imagen encerrado por cuatro puntos de ganancia de rejilla delimitantes, de acuerdo con aspectos de la presente divulgación; La figura 75 es un gráfico de flujo que ilustra un proceso para determinar valores de ganancia interpolados que pueden ser aplicados a los píxeles de imagen durante una operación de corrección de sombreado de lente, de acuerdo con una modalidad de la presente técnica; La figura 76 es un perfil tridimensional que muestra valores de ganancia interpolados que pueden ser aplicados a una imagen que muestra las características de intensidad de luz que se muestran en la figura 71 cuando se ejecuta la corrección de sombreado de lente, de acuerdo con aspectos de la presente divulgación; La figura 77 muestra el dibujo a color de la figura 72 que exhibe una uniformidad mejorada en la intensidad de la luz después que se aplica una operación de corrección de sombreado de lente, de acuerdo con aspectos de la presente divulgación; La figura 78 ilustra de manera gráfica la manera en que se puede calcular y utilizar una distancia radial entre un píxel actual y el centro de una imagen para determinar un componente de ganancia radial para la corrección de sombreado de lente, de acuerdo con una modalidad; La figura 79 es un gráfico de flujo que ilustra un proceso a través del cual se utilizan las ganancias radiales y las ganancias interpoladas de una rejilla de ganancia para determinar una ganancia total que puede ser aplicada a los píxeles de imagen durante una operación de corrección de sombreado de lente, de acuerdo con una modalidad de la presente técnica; La figura 80 es un gráfico que muestra áreas blancas y ejes de alta y baja temperatura de color en un espacio de color; La figura 81 es una tabla que muestra la manera en que se pueden configurar las ganancias del balance de blancos para diversas condiciones de iluminación de referencia, de acuerdo con una modalidad; La figura 82 es un diagrama en bloques que muestra un motor de recopilación de estadísticas que puede ser implementado en la lógica de procesamiento de etapa inicial ISP, de acuerdo con una modalidad de la presente divulgación; La figura 83 ilustra el muestreo hacia abajo de datos RGB Bayer en bruto, de acuerdo con aspectos de la presente divulgación; La figura 84 muestra un histograma a color bidimensional que puede ser recopilado por el motor de recopilación de estadísticas de la figura 82, de acuerdo con una modalidad; La figura 85 muestra la reducción y agrandamiento dentro de un histograma a color bidimensional; La figura 86 es una vista más detallada que muestra la lógica para implementar un filtro de píxel del motor de recopilación de estadísticas de acuerdo con una modalidad; La figura 87 es una imagen gráfica de la manera en que se puede evaluar la ubicación de un píxel dentro de un espacio a color C1-C2 con base en una condición de píxel definida para un filtro de píxel, de acuerdo con una modalidad; La figura 88 es una imagen gráfica de cómo se puede evaluar la ubicación de un píxel dentro de un espacio a color C1-C2 con base en una condición de píxel definida para un filtro de píxel, de acuerdo con otra modalidad; La figura 89 es una imagen gráfica de cómo se puede evaluar la ubicación de un píxel dentro de un espacio a color C1-C2 con base en una condición de píxel definida para un filtro de píxel, de acuerdo con una modalidad adicional todavía ; La figura 90 es un gráfico que muestra cómo se pueden determinar los tiempos de integración del sensor de imagen para compensar el parpadeo, de acuerdo con una modalidad; La figura 91 es un diagrama en bloques detallado que muestra lógica que puede ser implementada en el motor de recopilación de estadísticas de la figura 82 y que se puede configurar para recopilar estadísticas de enfoque automático de acuerdo con una modalidad; La figura 92 es un gráfico que muestra una técnica para ejecutar enfoque automático utilizando valores de puntaje de enfoque automático ásperos y finos, de acuerdo con una modalidad; La figura 93 es un gráfico de flujo que muestra un proceso para ejecutar enfoque automático utilizando los valores de puntaje de enfoque automático ásperos y finos, de acuerdo con una modalidad; Las figuras 94 y 95 muestran la decimación de los datos Bayer en bruto para obtener un valor de luminancia de blancos balanceados; La figura 96 muestra una técnica para ejecutar enfoque automático utilizando los valores de puntaje de enfoque automático relativos para cada componente de color, de acuerdo con una modalidad; La figura 97 es una vista más detallada de la unidad de procesamiento de estadísticas de la figura 68, que muestra la manera en que se pueden utilizar los datos de histograma RGB Bayer para ayudar en la compensación del nivel de negros, de acuerdo con una modalidad; La figura 98 es un diagrama en bloques que muestra una modalidad de la lógica de procesamiento de conducto ISP de la figura 7, de acuerdo con aspectos de la presente divulgación; La figura 99 es una vista más detallada que muestra una modalidad de un bloque de procesamiento de píxeles en bruto que puede ser implementada en la lógica de procesamiento de conducto ISP de la figura 98, de acuerdo con aspectos de la presente divulgación; La figura 100 muestra varios casos de límite de cuadro de imagen que pueden ser considerados cuando se aplican técnicas para detectar y corregir pixeles defectuosos durante el procesamiento mediante el bloque de procesamiento de pixeles en bruto que se muestra en la figura 99, de acuerdo con aspectos de la presente divulgación; Las figuras 101-103 son gráficos de flujo que muestran diversos procesos para detectar y corregir pixeles defectuosos que pueden ser ejecutados en el bloque de procesamiento de pixeles en bruto de la figura 99, de acuerdo con una modalidad; La figura 104 muestra la ubicación de dos pixeles verdes en un bloque de pixeles 2x2 de un sensor de imagen Bayer que puede ser interpolado cuando se aplican técnicas de corrección de no uniformidad de verde durante el procesamiento por parte de la lógica de procesamiento de pixeles de bruto de la figura 99, de acuerdo con aspectos de la presente divulgación; La figura 105 ilustra un conjunto de pixeles que incluyen un píxel central y pixeles vecinos horizontales asociados que pueden ser utilizados como parte de un proceso de filtración horizontal para reducción de ruido, de acuerdo con aspectos de la presente divulgación; La figura 106 ilustra un conjunto de pixeles que incluye un píxel central y pixeles vecinos verticales asociados que pueden ser utilizados como parte de un proceso de filtración vertical para reducción de ruido, de acuerdo con aspectos de la presente divulgación; La figura 107 es un diagrama de flujo simplificado que muestra la manera en que se puede aplicar la interpolación cromática a un patrón de imagen Bayer en bruto para producir una imagen RGB a pleno color; La figura 108 muestra un conjunto de píxeles de un patrón de imagen Bayer a partir del cual se pueden derivar componentes de energía horizontales y verticales para interpolar valores de color verde durante la interpolación cromática del patrón de imagen Bayer, de acuerdo con una modalidad; La figura 109 muestra un conjunto de píxeles horizontales a los cuales se puede aplicar la filtración para determinar un componente horizontal de un valor de color verde interpolado durante la interpolación cromática de un patrón de imagen Bayer, de acuerdo con aspectos de la presente técnica; La figura 110 muestra un conjunto de píxeles verticales a los cuales se puede aplicar filtración para determinar un componente vertical de un valor de color verde interpolado durante la interpolación cromática de un patrón de imagen Bayer, de acuerdo con aspectos de la presente técnica ; La figura 111 muestra varios bloques de píxeles 3x3 a los cuales se puede aplicar la filtración para determinar valores rojos y azules interpolados durante la interpolación cromática de un patrón de imagen Bayer, de acuerdo con aspectos de la presente técnica; Las figuras 112-115 proporcionan gráficos de flujo que muestran diversos procesos para interpolar valores de color verde, rojo y azul durante la interpolación cromática de un patrón de imagen Bayer, de acuerdo con una modalidad; La figura 116 muestra un dibujo a color de una escena de imagen original que puede ser capturada por un sensor de imagen y procesada de acuerdo con aspectos de las técnicas de interpolación cromática aquí divulgadas; La figura 117 muestra un dibujo a color del patrón de imagen Bayer de la escena de imagen que se muestra e la figura 116; La figura 118 muestra un dibujo a color de una imagen RGB reconstruida utilizando una técnica de interpolación cromática convencional con base en el patrón de imagen Bayer de la figura 117; La figura 119 muestra un dibujo a color de una imagen RGB, reconstruida a partir del patrón de imagen Bayer de la figura 117 de acuerdo con aspectos de las técnicas de interpolación cromática aquí divulgadas; Las figuras 120-123 muestran una configuración y arreglo de memorias intermedias de línea que pueden ser utilizadas en la implementación del bloque de procesamiento de píxeles en bruto de la figura 99, de acuerdo con una modalidad; La figura 124 es un gráfico de flujo que muestra un método para procesar datos de píxel en bruto utilizando la configuración de memoria intermedia de línea que se muestra en las figuras 120-123, de acuerdo con una modalidad; La figura 125 es una vista más detallada que muestra una modalidad de un bloque de procesamiento RGB que puede ser implementado en la lógica de procesamiento de conducto ISP de la figura 98, de acuerdo con aspectos de la presente divulgación; La figura 126 es una vista más detallada que muestra una modalidad de un bloque de procesamiento YCbCr que puede ser implementado en la lógica de procesamiento de conducto ISP de la figura 98, de acuerdo con aspectos de la presente divulgación; La figura 127 es una imagen gráfica de regiones fuente activas para luminancia y crominancia, conforme a lo definido dentro de una memoria intermedia fuente utilizando un formato de 1 plano, de acuerdo con aspectos de la presente divulgación; La figura 128 es una imagen gráfica de regiones fuente activas para luminancia y crominancia, conforme a lo definido dentro de una memoria intermedia fuente utilizando un formato de 2 planos, de acuerdo con aspectos de la presente divulgación; La figura 129 es un diagrama en bloques que ilustra lógica de afinamiento de imagen que puede ser implementada en el bloque de procesamiento YCbCr, como se muestra en la figura 126, de acuerdo con una modalidad; La figura 130 es un diagrama en bloques que ilustra lógica de mejoramiento de borde que puede ser implementada en el bloque de procesamiento YCbCr, como se muestra en la figura 126, de acuerdo con una modalidad; La figura 131 es un gráfico que muestra la relación de los factores de atenuación de crominancia a valores de luminancia afinados, de acuerdo con aspectos de la presente divulgación; La figura 132 es un diagrama en bloques que ilustra lógica de ajuste de brillantez, contraste y color de imagen (BCC) que puede ser implementada en el bloque de procesamiento YCbCr, como se muestra en la figura 126, de acuerdo con una modalidad; La figura 133 muestra una rueda de color de saturación y tono en el espacio de color YCbCr que define varios ángulos de tono y valores de saturación que pueden ser aplicados durante el ajuste de color en la lógica de ajuste BCC que se muestra en la figura 132; La figura 134 es un diagrama en bloques que muestra una modalidad de la lógica de procesamiento de etapa final ISP de la figura 8 que se puede configurar para ejecutar diversos pasos de post-procesamiento corriente abajo del conducto ISP, de acuerdo con aspectos de la presente divulgación; La figura 135 es una ilustración gráfica que muestra una técnica de mapeo de tonos global convencional; La figura 136 es una ilustración gráfica que muestra otra técnica de mapeo de tonos global convencional; La figura 137 muestra la manera en que las regiones de una imagen pueden ser segmentadas para aplicación de técnicas de aplicación de tono local, de acuerdo con aspectos de la presente divulgación; La figura 138 ilustra de manera gráfica la manera en que el mapeo de tono local convencional puede tener como resultado una utilización limitada de un rango de tonos de salida; La figura 139 ilustra de manera gráfica una técnica para mapeo de tono local, de acuerdo con modalidades de la presente divulgación; La figura 140 es un diagrama en bloques más detallado que muestra una modalidad de la lógica LTM de mapeo de tono local que puede ser configurada para implementar procesos de mapeo de tono en la lógica de etapa final ISP de la figura 134 de acuerdo con aspectos de la presente divulgación; La figura 141 es un gráfico de flujo que muestra un método para procesar datos de imagen utilizando la lógica de procesamiento de etapa final ISP de la figura 134, de acuerdo con una modalidad; y La figura 142 es un gráfico de flujo que muestra un método para aplicar mapeo de tonos utilizando la lógica LTM que se muestra en la figura 140, de acuerdo con una modalidad.
DESCRIPCION DETALLADA DE LAS MODALIDADES ESPECIFICAS A continuación se describirán una o más modalidades específicas de la presente divulgación. Estas modalidades descritas son solamente ejemplos de las técnicas actualmente divulgadas. Adicionalmente, en un esfuerzo por proporcionar una descripción concisa de estas modalidades, todas las características de una implementación real pueden no ser descritas en la especificación. Se debiera apreciar que en el desarrollo de cualquier implementación real de este tipo, tal como en cualquier proyecto de ingeniería o diseño, se deben tomar numerosas decisiones específicas para la implementación a fin de lograr los objetivos específicos de los desarrolladores , tal como en cumplimiento con las restricciones relacionadas con el sistema y relacionadas con el negocio, lo cual puede variar de una implementación a otra. Además, se debiera apreciar que dicho esfuerzo de desarrollo pudiera ser complejo y consumir tiempo, no obstante sería una rutina emprendida de diseño, fabricación y manufactura para aquellos expertos en la técnica quienes gocen del beneficio de esta divulgación.
Cuando se introducen elementos de diversas modalidades de la presente divulgación, los artículos "un", "una" y "el" pretenden significar que hay uno o más de los elementos. Los términos "comprendiendo", "incluyendo" y "teniendo" están destinados a ser inclusivos y significan que pueden ser elementos adicionales diferentes a los elementos enlistados. Adicionalmente, se debiera entender que las referencias a "una modalidad" o "la modalidad" de la presente divulgación no pretenden interpretarse como excluyendo la existencia de modalidades adicionales que también incorporan las características mencionadas.
Tal como se analizará a continuación, la presente divulgación generalmente se refiere a técnicas para procesar datos de imagen adquiridos a través de uno o más dispositivos de detección de imagen. En particular, algunos aspectos de la presente divulgación se pueden referir a técnicas para detectar y corregir píxeles defectuosos, técnicas de interpolación cromática de un patrón de imagen en bruto, técnicas para afinar una imagen de lurainancia utilizando una máscara de enfoque multi -escala, y técnicas para aplicar ganancias de sombreado de lente para corregir irregularidades de sombreado de lente. Además, se debiera entender que las técnicas aquí divulgadas pueden ser aplicadas tanto a imágenes estáticas como a imágenes en movimiento (por ejemplo, video) , y pueden ser utilizadas en cualquier tipo conveniente de aplicación de generación de imagen, tal como una cámara digital, un dispositivo electrónico que tenga una cámara digital integrada, un sistema de vigilancia de video o seguridad, un sistema de generación de imágenes médicas, y así sucesivamente.
Apegándose a los puntos en mente anteriores, la figura 1 es un diagrama en bloques que ilustra un ejemplo de un dispositivo electrónico 10 que puede permitir el procesamiento de datos de imagen utilizando una o más de las técnicas de procesamiento de imagen brevemente antes mencionadas. El dispositivo electrónico 10 puede ser cualquier tipo de dispositivo electrónico, tal como una computadora laptop o de escritorio, un teléfono móvil, un reproductor de medios digitales, o similar, que esté configurado para recibir y procesar datos de imagen, tal como datos adquiridos utilizando uno o más componentes de detección de imagen. A manera de ejemplo solamente, el dispositivo electrónico 10 puede ser un dispositivo electrónico portátil, tal como un modelo de un iPod® o iPhone®, disponible de Apple Inc. de Cupertino, California. Adicionalmente , el dispositivo electrónico 10 puede ser una computadora de escritorio o laptop, tal como un modelo de MacBook®, MacBook® Pro, MacBook Air®, iMac®, Mac® Mini o Mac Pro®, disponibles de Apple Inc. En otras modalidades, el dispositivo electrónico 10 también puede ser un modelo de un dispositivo electrónico de otro fabricante que tenga la capacidad para adquirir y procesar datos de imagen.
Sin importar su forma (por ejemplo, portátil o no portátil) , se debiera entender que el dispositivo electrónico 10 puede permitir el procesamiento de datos de imagen utilizando una o más de las técnicas de procesamiento de imagen brevemente analizadas con antelación, las cuales pueden incluir técnicas de corrección y/o detección de píxeles defectuosos, técnicas de corrección de sombreado de lente, técnicas para interpolación cromática, o técnicas de afinamiento de imagen, entre otras. En algunas modalidades, el dispositivo electrónico 10 puede aplicar dichas técnicas de procesamiento de imagen a datos de imagen almacenados en una memoria del dispositivo electrónico 10. En modalidades adicionales, el dispositivo electrónico 10 puede incluir uno o más dispositivos de generación de imagen, tal como una cámara digital integrada o externa, configurada para adquirir datos de imagen, los cuales después pueden ser procesados por el dispositivo electrónico 10 utilizando una o más de las técnicas de procesamiento de imagen antes mencionadas. Modalidades que muestran las modalidades portátiles y no portátiles del dispositivo electrónico 10 se analizarán adicionalmente a continuación en las figuras 3-6.
Tal como se muestra en la figura 1, el dispositivo electrónico 10 puede incluir varios componentes internos y/o externos que contribuyen a la función del dispositivo 10. Aquellos expertos en la técnica apreciarán que los diversos bloques funcionales mostrados en la figura 1 pueden comprender elementos de hardware (incluyendo circuitería) , elementos de software (incluyendo un código de computadora almacenado en un medio legible por computadora) o una combinación de elementos tanto de hardware como de software. Por ejemplo, en la modalidad ilustrada aquí, el dispositivo electrónico 10 puede incluir puertos de entrada/salida (1/0) 12, estructuras de entrada 14, uno o más procesadores 16, dispositivo de memoria 18, almacenamiento no volátil 20, tarjetas de expansión 22, dispositivo de conexión en red 24, fuente de energía 26 y pantalla 28. Adicionalmente , el dispositivo electrónico 10 puede incluir uno o más dispositivos de generación de imagen 30, tal como una cámara digital y circuitería de procesamiento de imagen 32. Tal como se analizará con mayor detalle a continuación, la circuitería de procesamiento de imagen 32 se puede configurar para implementar una o más de las técnicas de procesamiento de imagen antes analizadas cuando se procesan datos de imagen. Tal como se puede apreciar, los datos de imagen procesados por la circuitería de procesamiento de imagen 32 pueden ser recuperados de la memoria 18 y/o el dispositivo de almacenamiento no volátil 20, o pueden ser adquiridos utilizando el dispositivo de generación de imagen 30.
Antes de continuar, se debiera entender que el diagrama en bloques del sistema del dispositivo 10 mostrado en la figura 1 pretende ser un diagrama de control de alto nivel que muestra diversos componentes que pueden ser incluidos en dicho dispositivo 10. Es decir, las líneas de conexión entre cada componente individual mostrado en la figura 1 no necesariamente representan trayectorias o direcciones a través de las cuales fluyen los datos o son transmitidos entre diversos componentes del dispositivo 10. De hecho, tal como se analiza a continuación, los procesadores 16 mostrados, en algunas modalidades, pueden incluir múltiples procesadores, tal como un procesador principal (por ejemplo, CPU), y procesadores de imagen y/o video dedicados. En dichas modalidades, el procesamiento de los datos de imagen puede ser manejado principalmente por estos procesadores dedicados, descargando así de manera efectiva dichas tareas de un procesador principal (CPU) .
Con respecto a cada uno de los componentes ilustrados de la figura 1, los puertos I/O 12 pueden incluir puertos configurados para conectarse a una variedad de dispositivos externos, tal como una fuente de energía, un dispositivo de salida de audio (por ejemplo, audífonos o auriculares) , u otros dispositivos electrónicos (tal como dispositivos manuales y/o computadoras, impresoras, proyectores, pantallas externas, módems, estaciones de acople, y así sucesivamente) . En una modalidad, los puertos 1/0 12 pueden ser configurados para conectarse a un dispositivo externo de generación de imagen, tal como una cámara digital, para la adquisición de datos de imagen que pueden ser procesados utilizando la circuitería de procesamiento de imagen 32. Los puertos 1/0 12 pueden soportar cualquier tipo de interfaz conveniente, tal como un puerto de enlace serial universal (USB) , un puerto de conexión serial, un puerto IEEE-1394 (FireWire) , un puerto de Ethernet o Modem, y/o un puerto de conexión de energía AC/DC.
En algunas modalidades, algunos puertos 1/0 12 pueden estar configurados para permitir más de una función. Por ejemplo, en una modalidad, los puertos 1/0 12 pueden incluir un puerto de marca propia de Apple Inc. que puede funcionar no solamente para facilitar la transferencia de datos entre el dispositivo electrónico 10 y una fuente externa, sino también para acoplar el dispositivo 10 a una interfaz de carga de energía tal como un adaptador de energía diseñado para proporcionar energía desde una toma de pared eléctrica, o un cable de interfaz configurado para extraer energía de otro dispositivo eléctrico, tal como una computadora de escritorio o laptop, para cargar la fuente de energía 26 (la cual puede incluir una o más baterías recargables) . Por lo tanto, el puerto 1/0 12 se puede configurar para funcionar de manera dual tanto como un puerto de transferencia de datos como un puerto de conexión de energía AC/DC dependiendo, por ejemplo, del componente externo que esté acoplado al dispositivo 10 a través del puerto 1/0 12.
Las estructuras de entrada 14 pueden proporcionar entrada de usuario o retroalimentación a los procesadores 16.
Por ejemplo, las estructuras de entrada 14 se pueden configurar para controlar una o más funciones del dispositivo electrónico 10, tal como aplicaciones que corren en el dispositivo electrónico 10. A manera de ejemplo solamente, las estructuras de entrada 14 pueden incluir botones, deslizadores, interruptores, almohadillas de control, teclas, perillas, ruedas de barrido, teclados, ratón, almohadillas táctiles, y así sucesivamente, o alguna combinación de los mismos. En una modalidad, estructuras de entrada 14 pueden permitir a un usuario navegar en una interfaz de usuario gráfica (GUI) desplegada en el dispositivo 10. Adicionalmente, estructuras de entrada 14 pueden incluir un mecanismo sensible al tacto proporcionado en conjunto con la pantalla 28. En dichas modalidades, un usuario puede seleccionar o interactuar con elementos de interfaz desplegados a través del mecanismo sensible al tacto.
Las estructuras de entrada 14 pueden incluir los diversos dispositivos, circuitería y trayectorias a través de las cuales se proporciona la entrada de usuario o retroalimentación a uno o más procesadores 16. Dichas estructuras de entrada 14 pueden estar configuradas para controlar una función del dispositivo 10, aplicaciones que corren en el dispositivo 10 y/o cualesquiera interfaces o dispositivos conectados a o utilizados por el dispositivo electrónico 10. Por ejemplo, las estructuras de entrada 14 pueden permitir a un usuario navegar en una interfaz de usuario desplegada o interfaz de aplicación. Ejemplos de las estructuras de entrada 14 pueden incluir botones, deslizadores, interruptores, almohadillas de control, teclas, perillas, ruedas de barrido, teclados, ratón, almohadillas táctiles, y así sucesivamente.
En algunas modalidades, una estructura de entrada 14 y el dispositivo de despliegue 28 pueden ser proporcionados juntos, tal como en el caso de una "pantalla táctil", en donde se proporciona un mecanismo sensible al tacto en conjunto con la pantalla 28. En dichas modalidades, el usuario puede seleccionar o interactuar con elementos de interfaz desplegados a través del mecanismo sensible al tacto. De esta manera, la interfaz desplegada puede proporcionar funcionalidad interactiva, permitiendo a un usuario navegar en la interfaz desplegada tocando la pantalla 28. Por ejemplo, la interacción del usuario con las estructuras de entrada 14, tal como para interactuar con una interfaz de usuario o aplicación desplegada en la pantalla 26, puede generar señales eléctricas indicativas de la entrada del usuario. Estas señales de entrada pueden ser enrutadas a través de trayectorias convenientes, tal como un concentrador de entrada o enlace de datos, a uno o más procesadores 16 para procesamiento adicional .
En una modalidad, las estructuras de entrada 14 pueden incluir un dispositivo de entrada de audio. Por ejemplo, uno o más dispositivos de captura de audio, tales como uno o más micrófonos, pueden ser proporcionados con el dispositivo electrónico 10. Los dispositivos de captura de audio pueden estar integrados con el dispositivo electrónico 10, o puede ser un dispositivo externo acoplado al dispositivo electrónico 10, tal como por medio de los puertos I/O 12. Tal como se analiza de manera adicional a continuación, el dispositivo electrónico 10 puede ser un dispositivo de entrada de audio y un dispositivo de generación de imágenes 30 para capturar sonido y datos de imagen (por ejemplo, datos de video), y puede incluir lógica configurada para permitir la sincronización de los datos de audio y video capturados .
Además de procesar diversas señales de entrada recibidas a través de las estructuras de entrada 14, los procesadores 16 pueden controlar la operación general del dispositivo 10. Por ejemplo, los procesadores 16 pueden permitir la capacidad de procesamiento para ejecutar un sistema operativo, programas, interfaces de usuario y aplicación, y cualesquiera otras funciones del dispositivo electrónico 10. Los procesadores 16 pueden incluir uno o más microprocesadores, tal como uno o más microprocesadores de "propósito general", uno o más microprocesadores de propósito especial y/o microprocesadores de aplicación específica (ASICs) , o una combinación de dichos componentes de procesamiento. Por ejemplo, los procesadores 16 pueden incluir uno o más procesadores de conjuntos de instrucciones (por ejemplo, RISC) , así como procesadores gráficos (GPU) , procesadores de video, procesadores de audio y/o conjuntos de chip relacionados. Tal como se apreciará, los procesadores 16 pueden estar acoplados a uno o más enlaces de datos para transferir datos e instrucciones entre diversos componentes del dispositivo 10. En algunas modalidades, los procesadores 16 pueden permitir la capacidad de procesamiento para ejecutar una aplicación de generación de imagen en el dispositivo electrónico 10, tal como Photo Booth®, Aperture®, iPhoto®, o Preview®, disponible de Apple Inc., o las aplicaciones de "Cámara" y/o "Foto" proporcionadas por Apple Inc. y disponibles en modelos del iPhone®.
Las instrucciones o datos que van a ser procesados por los procesadores 16 pueden ser almacenados en un medio legible por computadora, tal como un dispositivo de memoria 18. El dispositivo de memoria 18 puede ser proporcionado como una memoria volátil, tal como memoria de acceso aleatorio (RAM) o como una memoria no volátil, tal como memoria de solo lectura (ROM) , o como una combinación de uno o más dispositivos RAM y ROM. La memoria 18 puede almacenar una variedad de información y puede ser utilizada para diversos propósitos. Por ejemplo, la memoria 18 puede almacenar microprogramación cableada para el dispositivo electrónico 10, tal como un sistema de entrada/salida básico (BIOS), un sistema operativo, diversos programas, aplicaciones o cualesquiera otras rutinas que pueden ser ejecutadas en el dispositivo electrónico 10, incluyendo funciones de interfaz de usuario, funciones de procesador, y así sucesivamente. Además, la memoria 18 puede ser utilizada para almacenar en memoria intermedia o memoria caché durante la operación del dispositivo electrónico 10. Por ejemplo, en una modalidad, la memoria 18 incluye una o más memorias intermedias de cuadros para almacenamiento en memoria intermedia de datos de video a medida que están siendo emitidos a la pantalla 28.
Además del dispositivo de memoria 18, el dispositivo electrónico 10 además puede incluir un almacenamiento no volátil 20 para almacenamiento persistente de datos y/o instrucciones. El almacenamiento no volátil 20 puede incluir memoria Flash, un disco duro, o cualquier otro medio de almacenamiento óptico, magnético y/o de estado sólido, o alguna combinación de los mismos. Por lo tanto, aunque se muestra como un solo dispositivo en la figura 1 para propósitos de claridad, se debiera entender que los dispositivos de almacenamiento no volátil 20 pueden incluir una combinación de uno o más de los dispositivos de almacenamiento arriba enlistados que operan en conjunto con los procesadores 16. El almacenamiento no volátil 20 puede ser utilizado para almacenar microprogramación cableada, archivos de datos, datos de imagen, programas y aplicaciones de software, información de conexión inalámbrica, información personal, preferencias del usuario, y cualesquiera otros datos convenientes. De acuerdo con aspectos de la presente divulgación, los datos de imagen almacenados en el almacenamiento no volátil 20 y/o el dispositivo de memoria 18 pueden ser procesados por la circuitería de procesamiento de imágenes 32 antes de ser emitidos en una pantalla.
La modalidad ilustrada en la figura 1 también puede incluir una o más ranuras de expansión o tarjeta. Las ranuras de tarjeta pueden estar configuradas para recibir una tarjeta de expansión 22 que puede ser utilizada para agregar funcionalidad, tal como memoria adicional, funcionalidad 1/0, o capacidad de conexión en red, al dispositivo electrónico 10. Dicha tarjeta de expansión 22 se puede conectar al dispositivo a través de cualquier tipo de conector conveniente, y se puede tener acceso de manera interna o externa con respecto a un alojamiento del dispositivo electrónico 10. Por ejemplo, en una modalidad, la tarjeta de expansión 24 puede ser una tarjeta de memoria Flash, tal como la tarjeta SecureDigital (SD) , mini-o microSD, tarjeta CompactFlash, o similar, o puede ser un dispositivo PCMCIA. Adicionalmente , la tarjeta de expansión 24 puede ser una tarjeta de módulo de identidad de suscriptor (SIM) , para uso con una modalidad del dispositivo electrónico 10 que proporciona capacidad de telefonía móvil.
El dispositivo electrónico 10 también incluye el dispositivo de red 24, el cual puede ser un controlador de red o una tarjeta de interfaz de red (NIC) que puede permitir la conectividad de red sobre una norma inalámbrica 802.11 o cualquier otra norma de conexión en red conveniente, tal como una red de área local (LAN) , una red de área amplia (WAN) , tal como una Red de Tasas de Transferencia de Datos Mejoradas para Evolución GSM (EDGE) , una red de datos 3G, o la Internet. En algunas modalidades, el dispositivo de red 24 puede permitir una conexión con un proveedor de contenido de medios digitales en línea, tal como el servicio de música iTunes®, disponible de Apple Inc.
La fuente de energía 26 del dispositivo 10 puede incluir la capacidad para energizar el dispositivo 10 en escenarios tanto portátiles como no portátiles. Por ejemplo, en un escenario portátil, el dispositivo 10 puede incluir una o más baterías, tal como una batería de Litio-Ion, para energizar el dispositivo 10. La batería puede ser recargada conectando el dispositivo 10 a una fuente de energía externa, tal como una toma de pared eléctrica. En un escenario no portátil, la fuente de energía 26 puede incluir una unidad de suministro de energía (PSU) configurada para extraer energía de una salida de pared eléctrica, y distribuir la energía a varios componentes de un dispositivo electrónico no portátil, tal como un sistema de computadora de escritorio.
La pantalla 28 puede ser utilizada para desplegar diversas imágenes generadas por el dispositivo 10, tal como una GUI para un sistema operativo, o datos de imagen (incluyendo imágenes estáticas y datos de video) procesados por la circuitería de procesamiento de imagen 32, tal como se analizará con mayor detalle a continuación. Tal como se mencionó anteriormente, los datos de imagen pueden incluir datos de imagen adquiridos utilizando el dispositivo de generación de imagen 30 o datos de imagen recuperados de la memoria 18 y/o almacenamiento no volátil 20. La pantalla 28 puede ser cualquier tipo conveniente de pantalla, tal como una pantalla de cristal líquido (LCD) , pantalla de plasma o una pantalla de diodo de emisión de luz orgánica (OLED) , por ejemplo. Adicionalmente , tal como se analizó antes, la pantalla 28 puede ser proporcionada en conjunto con el mecanismo sensible al tacto antes analizado (por ejemplo, una pantalla táctil) que puede funcionar como parte de una interfaz de control para el dispositivo electrónico 10.
Los dispositivos de generación de imagen 30 ilustrados pueden ser proporcionados como una cámara digital configurada para adquirir tanto imágenes estáticas como imágenes en movimiento (por ejemplo, video) . La cámara 30 puede incluir una lente y uno o más sensores de imagen configurados para capturar y convertir la luz en señales eléctricas. A manera de ejemplo solamente, el sensor de imagen puede incluir un sensor de imagen CMOS (por ejemplo, un sensor de píxel activo CMOS (APS) ) o un sensor CCD (dispositivo de carga acoplada) . Generalmente, el sensor de imagen en la cámara 30 incluye un circuito integrado que tiene un arreglo de píxeles, en donde cada píxel incluye un fotodetector para detectar luz . Tal como lo podrán apreciar aquellos expertos en la técnica, los fotodetectores en los píxeles de generación de imagen generalmente detectan la intensidad de la luz capturada a través de las lentes de la cámara. Sin embargo, los fotodetectores , por sí mismos, generalmente no pueden detectar la longitud de onda de la luz capturada y, por lo tanto, no pueden determinar la información de color.
Por consiguiente, el sensor de imagen además puede incluir un arreglo de filtro de color (CFA) que puede recubrir o ser colocado sobre el arreglo de píxeles del sensor de imagen para capturar información de color. El arreglo de filtro de color puede incluir un arreglo de pequeños filtros de color, cada uno de los cuales puede traslapar un píxel respectivo del sensor de imagen y filtrar la luz capturada por longitud de onda. Por lo tanto, cuando se utilizan en conjunto, el arreglo de filtro de color y los fotodetectores pueden proporcionar información tanto de longitud de onda como de intensidad con respecto a la luz capturada a través de la cámara, lo cual puede ser representativo de una imagen capturada.
En una modalidad, el arreglo de filtro de color puede incluir un arreglo de filtro de color Bayer, el cual proporciona un patrón de filtro que es 50% de elementos verdes, 25% de elementos rojos, y 25% de elementos azules. Por ejemplo, la figura 2 muestra un bloque de píxeles 2x2 de un CFA Bayer que incluye 2 elementos verdes (Gr y Gb) , 1 elemento rojo (R) , y 1 elemento azul (B) . Por lo tanto, un sensor de imagen que utiliza un arreglo de filtro de color Bayer puede proporcionar información referente a la intensidad de la luz recibida por la cámara 30 en las longitudes de onda verde, roja y azul, con lo cual cada píxel de imagen registra solamente uno de los tres colores (RGB) .
Esta información, la cual puede ser referida como "datos de imagen en bruto" o datos en el "dominio en bruto" , entonces pueden ser procesados utilizando una o más técnicas para interpolación cromática a fin de convertir los datos de imagen en bruto en una imagen a pleno color, generalmente interpolando un conjunto de valores rojos, verdes y azules para cada píxel. Tal como se analizará con mayor detalle a continuación, dichas técnicas de interpolación cromática pueden ser ejecutadas por la circuitería de procesamiento de imagen 32.
Tal como se mencionó anteriormente, la circuitería de procesamiento de imagen 32 puede permitir diversos pasos de procesamiento de imagen, tal como la detección/corrección de pixeles defectuosos, la corrección de sombreado de lente, la interpolación cromática, y afinado de imagen, reducción de ruido, corrección gama, mejora de imagen, conversión de espacio de color, compresión de imagen, sub-muestreo de crominancia, y operaciones de escala de imagen, y así sucesivamente. En algunas modalidades, la circuitería de procesamiento de imagen 32 puede incluir varios subcomponentes y/o unidades discretas de lógica que colectivamente forman un "conducto" de procesamiento de imágenes para ejecutar cada uno de los diversos pasos del procesamiento de imágenes . Estos subcomponentes pueden ser implementados utilizando hardware (por ejemplo, procesadores de señal digital o ASICs) , o software, o a través de una combinación de componentes de hardware y software. Las diversas operaciones de procesamiento de imágenes que pueden ser proporcionadas por la circuitería de procesamiento de imagen 32 y, particularmente aquellas operaciones de procesamiento relacionadas con la detección/corrección de píxeles defectuosos, corrección de sombreado de lente, interpolación cromática, y afinado de imagen, se analizarán con mayor detalle a continuación.
Antes de continuar, se debiera observar que aunque varias modalidades de las diversas técnicas de procesamiento de imagen analizadas a continuación pueden utilizar un CFA Bayer, las presentes técnicas divulgadas no pretenden quedar limitadas en este aspecto. De hecho, aquellos expertos en la técnica apreciarán que las técnicas de procesamiento de imagen aquí proporcionadas pueden aplicar a cualquier tipo conveniente de arreglo de filtro de color, incluyendo filtros RGB , filtros CYGM, así sucesivamente.
Haciendo referencia nuevamente al dispositivo electrónico 10, las figuras 3-6 ilustran varias formas que puede asumir el dispositivo electrónico 10. Tal como se mencionó anteriormente, el dispositivo electrónico 10 puede asumir la forma de una computadora, incluyendo computadoras que generalmente son portátiles (tal como computadoras tipo laptop, notebook y de tableta) así como computadoras que generalmente no son portátiles (tales como computadoras de escritorio, estaciones de trabajo, y/o servidores) u otro tipo de dispositivo electrónico, tal como dispositivos electrónicos portátiles manuales (por ejemplo, reproductor de medios digitales o teléfono móvil) . En particular, las figuras 3 y 4 muestran el dispositivo electrónico 10 en la forma de una computadora laptop 40 y una computadora de escritorio 50, respectivamente. Las figuras 5 y 6 muestran vistas frontal y posterior, respectivamente, del dispositivo electrónico 10 en la forma de un dispositivo portátil manual 60.
Tal como se muestra en la figura 3, la computadora laptop mostrada 40 incluye un alojamiento 42, la pantalla 28, los puertos 1/0 12, y las estructuras de entrada 14. Las estructuras de entrada 14 pueden incluir un teclado y un ratón de almohadilla táctil que están integrados con el alojamiento 42. Adicionalmente, la estructura de entrada 14 puede incluir otros botones y/o interruptores diversos que pueden ser utilizados para interactuar con la computadora 40, tal como para encender o iniciar la computadora, para operar una GUI o una aplicación que corre en la computadora 40, así como para ajustar diversos aspectos relacionados con la operación de la computadora 40 (por ejemplo, volumen del sonido, brillantez de la pantalla, etcétera) . La computadora 40 también puede incluir diversos puertos 1/0 12 que permiten la conectividad con dispositivos adicionales, tal como se analizó anteriormente, tal como un puerto Fire ire® o USB, un puerto de interfaz multimedia de alta definición (HDMI) , o cualquier otro tipo de puerto que sea conveniente para conexión a un dispositivo externo. Adicionalmente , la computadora 40 puede incluir conectividad de red (por ejemplo, dispositivo de red 26), memoria (por ejemplo, memoria 20) , y capacidades de almacenamiento (por ejemplo, dispositivo de almacenamiento 22) , tal como se describió anteriormente con respecto a la figura 1.
Además, la computadora laptop 40, en la modalidad ilustrada, puede incluir un dispositivo de generación de imagen integrado 30 (por ejemplo, cámara) . En otras modalidades, la computadora laptop 40 puede utilizar una cámara externa (por ejemplo, una cámara USB externa o una "webcam") conectada a uno o más de los puertos I/O 12 en lugar de o además de la cámara integrada 30. Por ejemplo, una cámara externa puede ser una cámara iSight® disponible de Apple Inc. La cámara 30, ya sea integrada o externa, puede permitir la captura y registro de imágenes. Dichas imágenes después pueden ser vistas por un usuario utilizando una aplicación de visualización de imágenes, o pueden ser utilizadas por otras aplicaciones, incluyendo aplicaciones de video-conferencias, tales como iChat®, y aplicaciones de edición/visualización de imágenes, tales como Photo Booth®, Apertura®, iPhoto®, o Preview®, las cuales están disponibles de Apple Inc. En algunas modalidades, la computadora laptop mostrada 40 puede ser un modelo de una MacBook®, MacBook®Pro, MacBook Air® o PowerBook® disponible de Apple Inc. Adicionalmente , la computadora 40, en una modalidad, puede ser un dispositivo de computación de tableta portátil, tal como un modelo de una computadora de tableta iPad®, también disponible de Apple Inc.
La figura 4 además ilustra una modalidad en la cual el dispositivo electrónico 10 es proporcionado como una computadora de escritorio 50. Tal como se apreciará, la computadora de escritorio 50 puede incluir un número de características que generalmente pueden ser similares a aquellas proporcionadas por la computadora laptop 40 mostrada en la figura 4, pero puede tener un factor forma generalmente más grande en su totalidad. Tal como se muestra, la computadora de escritorio 50 puede estar alojada en un encerramiento 42 que incluye la pantalla 28, así como otros componentes diversos analizados anteriormente con respecto al diagrama en bloques mostrado en la figura 1. Además, la computadora de escritorio 50 puede incluir un teclado y ratón externos (estructuras de entrada 14) que pueden estar acoplados a la computadora 50 a través de uno o más puertos I/O 12 (por ejemplo, USB) o se pueden comunicar con la computadora 50 de manera inalámbrica (por ejemplo, RF, Bluetooth, etcétera) . La computadora de escritorio 50 también incluye un dispositivo de generación de imagen 30, el cual puede ser una cámara integrada o externa, tal como se analizó anteriormente. En algunas modalidades, la computadora de escritorio mostrada 50 puede ser un modelo de una iMac®, Mac® mini, o Mac Pro®, disponible de Apple Inc.
Tal como se muestra adicionalmente , la pantalla 28 se puede configurar para generar diversas imágenes que pueden ser vistas por un usuario. Por ejemplo, durante la operación de la computadora 50, la pantalla 28 puede desplegar una interfaz de usuario gráfica ("GUI") 52 que permite al usuario interactuar con un sistema operativo y aplicación que corre en la computadora 50. La GUI 52 puede incluir varias capas, ventanas, pantallas, plantillas, u otros elementos gráficos que pueden ser desplegados en todo, o una porción, del dispositivo de despliegue 28. Por ejemplo, en la modalidad mostrada, un sistema operativo GUI 52 puede incluir varios iconos gráficos 54, cada uno de los cuales puede corresponder a diversas aplicaciones que pueden ser abiertas o ejecutadas al momento de la detección de una selección del usuario (por ejemplo, a través de teclado/ratón o entrada de pantalla táctil) . Los iconos 54 pueden ser desplegados en una barra de iconos 56 o dentro de uno o más elementos de ventana gráficos 58 desplegados en la pantalla. En algunas modalidades, la selección de un icono 54 puede conducir a un proceso de navegación jerárquico, de manera que la selección de un icono 54 conduce a una pantalla o abre otra ventana gráfica que incluye uno o más iconos adicionales u otros elementos GUI. A manera de ejemplo solamente, la GUI del sistema operativo 52 desplegada en la figura 4 puede ser de una versión del sistema operativo Mac OS®, disponible de Apple Inc.
Continuando con las figuras 5 y 6, el dispositivo electrónico 10 además se ilustra en la forma de un dispositivo electrónico manual portátil 60, el cual puede ser un modelo de un iPod® o iPhone® disponible de Apple Inc. En la modalidad mostrada, el dispositivo manual 60 incluye un encerramiento 42, el cual puede funcionar para proteger los componentes interiores contra el daño físico y para blindarlos contra la interferencia electromagnética. El encerramiento 42 se puede formar a partir de cualquier material conveniente o combinación de materiales, tal como plástico, metal o un material compuesto, y puede permitir que ciertas frecuencias de radiación electromagnética, tal como señales de conexión en red inalámbricas, pasen a la circuitería de comunicación inalámbrica (por ejemplo, dispositivo de red 24) , la cual puede estar colocada dentro del encerramiento 42, tal como se muestra en la figura 5.
El encerramiento 42 también incluye varias estructuras de entrada de usuario 14 a través de las cuales un usuario se puede conectar en interfaz con el dispositivo manual 60. Por ejemplo, cada estructura de entrada 14 se puede configurar para controlar una o más funciones respectivas del dispositivo cuando es presionada o accionada. A manera de ejemplo, una o más de las estructuras de entrada 14 se pueden configurar para llamar una pantalla de "inicio" 42 o para que se despliegue un menú, a fin de conmutar entre un modo dormido, despierto o encendido/apagado, para silenciar un tono de una aplicación de teléfono celular, para incrementar o disminuir una salida de volumen, y así sucesivamente. Se debiera entender que las estructuras de entrada ilustradas 14 simplemente son ejemplares, y que el dispositivo manual 60 puede incluir cualquier número de estructuras de entrada de usuario existentes en diversas formas incluyendo botones, interruptores, teclas, perillas, ruedas de barrido, y así sucesivamente.
Tal como se muestra en la figura 5, el dispositivo manual 60 puede incluir varios puertos 1/0 12. Por ejemplo, los puertos 1/0 12 mostrados pueden incluir un puerto de conexión de marca propia 12a para transmitir y recibir archivos de datos o para cargar una fuente de energía 26 y un puerto de conexión de audio 12b para conectar el dispositivo 60 a un dispositivo de salida de audio (por ejemplo, audífonos o altavoces) . Además, en modalidades donde el dispositivo manual 60 proporciona funcionalidad de teléfono móvil, el dispositivo 60 puede incluir un puerto 1/0 12c para recibir una tarjeta de módulo de identidad de suscriptor (SIM) (por ejemplo, una tarjeta de expansión 22).
El dispositivo de despliegue 28, el cual puede ser una LCD, OLED, o cualquier tipo conveniente de pantalla, puede desplegar diversas imágenes generadas por el dispositivo manual 60. Por ejemplo, la pantalla 28 puede desplegar diversos indicadores del sistema 64 proporcionando retroalimentación a un usuario con respecto a uno o más estados del dispositivo manual 60, tal como estado de energía, intensidad de la señal, conexiones externas del dispositivo, y así sucesivamente. La pantalla también puede desplegar una GUI 52 que permite a un usuario interactuar con el dispositivo 60, tal como se analizó anteriormente con referencia a la figura 4. La GUI 52 puede incluir elementos gráficos, tal como los iconos 54 que pueden corresponder a diversas aplicaciones que pueden ser abiertas o ejecutadas al momento de detectar una selección de usuario de un icono respectivo 54. A manera de ejemplo, uno de los iconos 54 puede representar una aplicación de cámara 66 que puede ser utilizada en conjunto con una cámara 30 (que se muestra en líneas fantasma en la figura 5) para adquirir imágenes. Haciendo referencia brevemente a la figura 6, se ilustra una vista posterior del dispositivo electrónico manual 60 mostrado en la figura 5, el cual muestra la cámara 30 como integrada con el alojamiento 42 y colocada en la parte posterior del dispositivo manual 60.
Tal como se mencionó anteriormente, los datos de imagen adquiridos utilizando la cámara 30 pueden ser procesados utilizando la circuitería de procesamiento de imagen 32, la cual puede incluir hardware (por ejemplo, colocado dentro del encerramiento 42) y/o software almacenado en uno o más dispositivos de almacenamiento (por ejemplo, memoria 18 o almacenamiento no volátil 20) del dispositivo 60. Las imágenes adquiridas utilizando la aplicación de cámara 66 y la cámara 30 pueden ser almacenadas en el dispositivo 60 (por ejemplo, en el dispositivo de almacenamiento 20) y pueden ser vistas en un momento posterior utilizando una aplicación de visualización de fotos 68.
El dispositivo manual 60 también puede incluir diversos elementos de entrada y salida de audio. Por ejemplo, los elementos de entrada/salida de audio, mostrados generalmente por el número de referencia 70, pueden incluir un receptor de entrada, tal como uno o más micrófonos. Por ejemplo, en la situación donde el dispositivo manual 60 incluye funcionalidad de teléfono celular, los receptores de entrada pueden ser configurados para recibir entrada de audio del usuario, tal como la voz de un usuario. Adicionalmente , los elementos de entrada/salida de audio 70 pueden incluir uno o más transmisores de salida. Dichos transmisores de salida pueden incluir uno o más altavoces que pueden funcionar para transmitir señales de audio a un usuario, tal como durante la reproducción de datos de música utilizando una aplicación de reproductor de medios 72. Además, en modalidades donde el dispositivo manual 60 incluye una aplicación de teléfono celular, se puede proporcionar un transmisor de salida de audio 74 adicional, tal como se muestra en la figura 5. Al igual que los transmisores de salida de los elementos de entrada/salida de audio 70, el transmisor de salida 74 también puede incluir uno o más altavoces configurados para transmitir señales de audio a un usuario, tal como datos de voz recibidos durante una llamada telefónica. Por lo tanto, los elementos de entrada/salida de audio 70 y 74 pueden operar en conjunto para funcionar como los elementos de recepción y transmisión de audio de un teléfono.
Habiendo proporcionado cierto contexto con respecto a diversas formas que puede asumir el dispositivo electrónico 10, el presente análisis ahora se enfocará en la circuitería de procesamiento de imagen 32 mostrada en la figura 1. Tal como se mencionó anteriormente, la circuitería de procesamiento de imagen 32 puede ser implementada utilizando componentes de hardware y/o software, y puede incluir diversas unidades de procesamiento que definan una secuencia de procesamiento de señales de imagen (ISP) . En particular, el siguiente análisis se puede enfocar en aspectos de las técnicas de procesamiento de imagen, establecidas en la presente divulgación, particularmente aquellas relacionadas con las técnicas de detección/corrección de píxeles defectuosos, técnicas de corrección de sombreado de lente, técnicas de interpolación cromática, y técnicas de afinado de imagen .
Haciendo referencia ahora a la figura 7, se ilustra un diagrama en bloques de nivel superior simplificado que muestra varios componentes funcionales que pueden ser implementados como parte de la circuitería de procesamiento de imagen 32, de acuerdo con una modalidad de las técnicas aquí divulgadas. Particularmente, la figura 7 pretende ilustrar la manera en que los datos de imagen pueden fluir a través de la circuitería de procesamiento de imagen 32, de acuerdo con al menos una modalidad. A fin de proporcionar una perspectiva general de la circuitería de procesamiento de imagen 32, aquí se proporciona con referencia a la figura 7 una descripción general de la manera en que operan estos componentes funcionales para procesar los datos de imagen, al mismo tiempo que a continuación de proporcionará adicionalmente una descripción más específica de cada uno de los componentes funcionales ilustrados, así como de sus subcomponentes respectivos.
Haciendo referencia a la modalidad ilustrada, la circuitería de procesamiento de imagen 32 puede incluir lógica de procesamiento de etapa inicial de procesamiento de señal de imagen (ISP) 80, lógica de procesamiento de conducto ISP 82, y lógica de control 84. Los datos de imagen capturados por el dispositivo de generación de imagen 30 primero pueden ser procesados por la lógica de etapa inicial ISP 80 y analizados para capturar las estadísticas de imagen que pueden ser utilizadas para determinar uno o más parámetros de control para la lógica de conducto ISP 82 y/o el dispositivo de generación de imagen 30. La lógica de etapa inicial ISP 80 se puede configurar para capturar datos de imagen a partir de una señal de entrada del sensor de imagen.
Por ejemplo, tal como se muestra en la figura 7, el dispositivo de generación de imagen 30 puede incluir una cámara que tenga una o más lentes 88 y sensores de imagen 90. Tal como se analizó anteriormente, los sensores de imagen 90 pueden incluir un arreglo de filtro de color (por ejemplo, un filtro Bayer) y entonces pueden proporcionar información tanto de intensidad de la luz como de longitud de onda capturada por cada píxel de imagen de los sensores de imagen 90 para permitir que un conjunto de datos de imagen en bruto pueda ser procesado por la lógica de etapa inicial ISP 80. Por ejemplo, la salida 92 del dispositivo de generación de imagen 30 puede ser recibida por una interfaz de sensor 94, la cual entonces puede proporcionar los datos de imagen en bruto 96 a la lógica de etapa inicial ISP 80 con base, por ejemplo, en el tipo de interfaz de sensor. A manera de ejemplo, la interfaz de sensor 94 puede utilizar una interfaz de Arquitectura de Generación de Imagen Móvil Estándar (SMIA) u otras interfaces de cámara seriales o paralelas, o alguna combinación de las mismas. En algunas modalidades, la lógica de etapa inicial ISP 80 puede operar dentro de su propio domino de reloj y puede proporcionar una interfaz asincrona a la interfaz de sensor 94 para soportar los sensores de imagen de diferentes tamaños y requerimientos de temporización . La interfaz de sensor 94 puede incluir, en algunas modalidades, una sub-interfaz en el lado del sensor (por ejemplo, interfaz del lado del sensor) y una sub-interfaz en el lado de etapa inicial ISP, con las sub-interfaces formando la interfaz de sensor 94.
Los datos de imagen en bruto 96 pueden ser proporcionados a la lógica de etapa inicial ISP 80 y procesados sobre una base píxel-por-píxel en un número de formatos. Por ejemplo, cada píxel de imagen puede tener una profundidad de bit de 8 , 10, 12 o 14 bits. A continuación se analizan con mayor detalle diversos ejemplos de formatos de memoria que muestran la manera en que los datos de píxel pueden ser almacenados y diseccionados en memoria. La lógica de etapa inicial ISP 80 puede ejecutar una o más operaciones de procesamiento de imagen en los datos de imagen en bruto 96, así como recopilar estadísticas referentes a los datos de imagen 96. Las operaciones de procesamiento de imagen, así como la recopilación de los datos estadísticos, se pueden ejecutar a la misma precisión o en precisiones de profundidad de bit diferentes. Por ejemplo, en una modalidad, el procesamiento de los datos de píxel de imagen en bruto 96 puede ser ejecutado a una precisión de 14 bits. En dichas modalidades, los datos de píxel en bruto recibidos por la lógica de etapa inicial ISP 80 que tiene una profundidad de bit de menos de 14 bits (por ejemplo, 8 bits, 10 bits, 12 bits) pueden ser muestreados hacia arriba a 14 bits para propósitos de procesamiento de imagen. En otra modalidad, el procesamiento estadístico puede ocurrir a una precisión de 8 bits y, por lo tanto, datos de píxel en bruto que tienen una profundidad de bit superior pueden ser muestreados hacia abajo a un formato de 8 bits para propósitos estadísticos. Tal como se apreciará, el muestreo hacia abajo a 8 bits puede reducir el tamaño del hardware (por ejemplo, área) y también puede reducir la complejidad computacional/del procesamiento para los datos estadísticos. De manera adicional, los datos de imagen en bruto pueden ser espacialmente ponderados para permitir que los datos estadísticos sean más robustos al ruido .
Además, tal como se muestra en la figura 7, la lógica de etapa inicial ISP 80 también puede recibir datos de píxel desde la memoria 108. Por ejemplo, tal como se muestra por el número de referencia 98, los datos de píxel en bruto pueden ser enviados a la memoria 108 desde la interfaz de sensor 94. Los datos de píxel en bruto que residen en la memoria 108 entonces pueden ser proporcionados a la lógica de etapa inicial ISP 80 para procesamiento, tal como lo indica el número de referencia 100. La memoria 108 puede ser parte del dispositivo de memoria 18, el dispositivo de almacenamiento 20, o puede ser una memoria dedicada separada dentro del dispositivo electrónico 10 y puede incluir características de acceso de memoria directo (DMA). Además, en algunas modalidades, la lógica de etapa inicial ISP 80 puede operar dentro de su propio dominio de reloj y proporcionar una interfaz asincrona a la interfaz de sensor 94 para soportar sensores de diferentes tamaños y que tienen diferentes requerimientos de temporización .
Al momento de recibir los datos de imagen en bruto 96 (de la interfaz de sensor 94) o 100 (de la memoria 108), la lógica de etapa inicial ISP 80 puede ejecutar una o más operaciones de procesamiento de imagen, tal como filtración temporal y/o filtración de compensación de agrupación. Los datos de imagen procesados entonces pueden ser proporcionados a la lógica de conducto ISP 82 (señal de salida 109) para procesamiento adicional antes de ser desplegados (por ejemplo, en el dispositivo de despliegue 28), o pueden ser enviados a la memoria (señal de salida 110) . La lógica de conducto ISP 82 recibe los datos procesados de "etapa inicial" ya se directamente desde la lógica de etapa inicial ISP 80 o desde la memoria 108 (señal de entrada 112) , y puede permitir procesamiento adicional de los datos de imagen en el dominio en bruto, así como en los espacios de color RGB e YCbCr. Los datos de imagen procesados por la lógica de conducto ISP 82 entonces pueden ser emitidos (señal 114) a la pantalla 28 para visualización por parte de un usuario y/o pueden ser procesados adicionalmente por un motor de gráficos o GPU. Adicionalmente, la salida de la lógica de conducto ISP 82 puede ser enviada a la memoria 108 (señal 115) y la pantalla 28 puede leer los datos de imagen de la memoria 108 (señal 116) , la cual, en algunas modalidades, puede estar configurada para implementar una o más memorias intermedias de cuadros. Además, en algunas implementaciones , la salida de la lógica de conducto ISP 82 también puede ser proporcionada a un motor de compresión/descompresión 118 (señal 117) para codificación/decodificación de los datos de imagen. Los datos de imagen codificados pueden ser almacenados y posteriormente descomprimidos antes de ser desplegados en el dispositivo de pantalla 28 (señal 119) . A manera de ejemplo, el motor de compresión o "codificador" 118 puede ser un motor de compresión JPEG para codificar imágenes estáticas, o un motor de compresión H.264 para codificar imágenes de video, o alguna combinación de los mismos, así como un motor de descompresión correspondiente para decodificar los datos de imagen. Información adicional con respecto a las operaciones de procesamiento de imagen que puede ser proporcionada en la lógica de conducto ISP 82 se analizará con mayor detalle a continuación con referencia a las figuras 98 a 133. También, se debiera observar que la lógica de conducto ISP 82 también puede recibir datos de imagen en bruto desde la memoria 108, tal como lo muestra la señal de entrada 112.
Datos estadísticos 102 determinados por la lógica de etapa inicial ISP 80 pueden ser proporcionados a una unidad lógica de control 84. Los datos estadísticos 102 pueden incluir, por ejemplo, estadísticas del sensor de imagen relacionadas con la exposición automática, balance automático de blancos, enfoque automático, detección de parpadeo, compensación de nivel de negro (BLC) , corrección de sombreado de lente, y así sucesivamente. La lógica de control 84 puede incluir un procesador y/o microcontrolador configurados para ejecutar una o más rutinas (por ejemplo, microprogramación cableada) que se pueden configurar para determinar, con base en los datos estadísticos recibidos 102, parámetros de control 104 para el dispositivo de generación de imagen 30, así como parámetros de control 106 para la lógica de procesamiento de conducto ISP 82. A manera de ejemplo solamente, los parámetros de control 104 pueden incluir parámetros de control de sensor (por ejemplo, ganancias, tiempo de integración para control de exposición) , parámetros de control de parpadeo de cámara, parámetros de control de lente (por ejemplo, longitud focal para enfocar o agrandar/reducir), o una combinación de dichos parámetros. Los parámetros de control ISP 106 pueden incluir niveles de ganancia y coeficientes de matriz de corrección de color (CCM) para balance automático de blancos y ajuste de color (por ejemplo, durante el procesamiento RGB) , así como parámetros de corrección de sombreado de lente los cuales, tal como se analiza a continuación, pueden ser determinados con base en los parámetros de equilibrio del punto blanco. En algunas modalidades, la lógica de control 84, además de analizar datos estadísticos 102, también puede analizar estadísticas históricas, las cuales se pueden almacenar en el dispositivo electrónico 10 (por ejemplo, en la memoria 18 o almacenamiento 20) .
Haciendo referencia a la modalidad ilustrada, la circuitería de procesamiento de imagen 32 puede incluir lógica de procesamiento de etapa inicial de procesamiento de señal de imagen (ISP) 80, lógica de procesamiento de secuencia ISP 82, y lógica de control. Los datos de imagen capturados por el dispositivo de generación de imagen 30 primero pueden ser procesados por la lógica de etapa inicial ISP 80 y analizados para capturar estadísticas de imagen que pueden ser utilizadas para determinar uno o más parámetros de control para la lógica de secuencia ISP 82 y/o el dispositivo de generación de imagen 30. La lógica de etapa inicial ISP 80 se puede configurar para capturar datos de imagen de una señal de entrada del sensor de imagen. Por ejemplo, tal como se muestra en la figura 7, el dispositivo de generación de imagen 30 puede incluir una cámara que tenga una o más lentes 88 y sensores de imagen 90. Tal como se analizó anteriormente, los sensores de imagen 90 pueden incluir un arreglo de filtro de color (por ejemplo, un filtro Bayer) y entonces puede proporcionar información tanto de intensidad de luz como de longitud de onda capturada por cada píxel de generación de imagen de los sensores de imagen 90 para proporcionar un conjunto de datos de imagen en bruto que puedan ser procesados por la lógica de extremo frontal ISP 80. Por ejemplo, la salida 92 del dispositivo de generación de imagen 30 puede ser recibida por una interfaz de sensor 94, la cual entonces puede proporcionar los datos de imagen en bruto 96 a la lógica de etapa inicial ISP 80 con base, por ejemplo, en el tipo de interfaz de sensor. A manera de ejemplo, la interfaz de sensor 94 puede utilizar una interfaz de arquitectura de generación de imagen móvil estándar (SMIA) u otras interfaces de cámara seriales o paralelas, o alguna combinación de las mismas. En algunas modalidades, la lógica de etapa inicial ISP 80 puede operar dentro de su propio dominio de reloj y puede proporcionar una interfaz asincrona a la interfaz de sensor 94 para soportar los sensores de imagen de diferentes tamaños y requerimientos de temporización.
La figura 8 muestra un diagrama en bloques que muestra otra modalidad de la circuitería de procesamiento de imagen 32, en donde los mismos componentes están etiquetados con los mismos números de referencia. Generalmente, la operación y funcionalidad de la circuitería de procesamiento de imagen 32 de la figura 8 es similar a la circuitería de procesamiento de imagen 32 de la figura 7, excepto que la modalidad mostrada en la figura 8 además incluye una unidad de lógica de procesamiento de etapa final ISP 120, la cual se puede acoplar corriente abajo desde el conducto ISP 82 y puede permitir pasos de post-procesamiento adicionales.
En la modalidad ilustrada, la lógica de etapa final ISP 120 puede recibir la salida 114 desde el conducto ISP 82 y ejecutar post-procesamiento de los datos recibidos 114. Adicionalmente, la etapa final ISP 120 puede recibir datos de imagen directamente desde la memoria 108, tal como se muestra mediante la entrada 124. Tal como se analizará con mayor detalle a continuación con referencia a las figuras 134 a 142, una modalidad de la lógica de etapa final ISP 120 puede permitir una compresión de rango dinámico de datos de imagen (con frecuencia referidos como "mapeo de tono"), ajustes de brillantez, contraste y color, así como lógica de escala para escalar los datos de imagen a un tamaño o resolución deseada (por ejemplo, con base en una resolución de un dispositivo de despliegue de salida) . Además, la lógica de etapa final ISP 120 también puede incluir lógica de detección de características para detectar ciertas características en los datos de imagen. Por ejemplo, en una modalidad, la lógica de detección de características puede incluir lógica de detección de rostros configurada para identificar áreas en las cuales están ubicados y/o posicionados los rostros y/o características faciales dentro de los datos de imagen. Los datos de detección facial pueden ser alimentados a la unidad de procesamiento de estadísticas de etapa inicial como datos de retroalimentación para la determinación de balance automático de blancos, enfoque automático, parpadeo, y estadísticas de auto exposición. Por ejemplo, las unidades de procesamiento de estadísticas en la etapa inicial ISP 80 (analizada con mayor detalle a continuación en las figuras 68-97) se pueden configurar para seleccionar ventanas para procesamiento de estadísticas con base en las ubicaciones determinadas de caras y/o características faciales en los datos de imagen.
En algunas modalidades, los datos de detección facial, además de o en lugar de ser retroalimentados a un bucle de control de retroalimentación de estadísticas de etapa inicial ISP, también pueden ser proporcionados al menos a una de lógica de procesamiento de mapeo de tono local, una unidad de estadísticas de etapa final ISP, o a la unidad de codificador/decodificador 118. Tal como se analiza con mayor detalle a continuación, los datos de detección facial proporcionados a la unidad de estadísticas de etapa final pueden ser utilizados para controlar parámetros de cuantificació . Por ejemplo, cuando se codifican o comprimen los datos de imagen de salida (por ejemplo, en macrobloques) la cuantificación se puede reducir para áreas de la imagen que han sido determinadas como incluyendo caras y/o características faciales, mejorando así la calidad visual de las caras y características faciales cuando la imagen es desplegada y vista por un usuario.
En modalidades adicionales, la lógica de detección de características también se puede configurar para detectar las ubicaciones de esquinas de objetos en el cuadro de imagen. Estos datos pueden ser utilizados para identificar la ubicación de características en cuadros de imagen consecutivos a fin de determinar un estimado de movimiento global entre cuadros, lo cual puede ser utilizado para ejecutar ciertas operaciones de procesamiento de imagen, tal como el registro de imágenes. En una modalidad, la identificación de las características de esquina y similares puede ser particularmente útil para algoritmos que combinan múltiples cuadros de imagen, tal como en algunos algoritmos de generación de imagen de alto rango dinámico (HDR) , así como algunos algoritmos de combinación de imágenes panorámicas .
Además, tal como se muestra en la figura 8, los datos de imagen procesados por la lógica de etapa final ISP 120 pueden ser emitidos (señal 126) al dispositivo de despliegue 28 para visualización por parte de un usuario y/o pueden ser procesados adicionalmente por un motor de gráficos o GPU. Adicionalmente, la salida de la lógica de etapa final ISP 120 puede ser enviada a la memoria 108 (señal 122) y la pantalla 28 puede leer los datos de imagen desde la memoria 108 (señal 116), la cual, en algunas modalidades, puede estar configurada para implementar una o más memorias intermedias de cuadro. En la modalidad ilustrada, la salida de la lógica de etapa final ISP 120 también se puede proporcionar al motor de compresión/descompresión 118 (señal 117) para codificar/decodificar los datos de imagen para almacenamiento y posterior reproducción, tal como se analiza generalmente en la figura 7. En modalidades adicionales, el subsistema ISP 32 de la figura 8 puede tener la opción de derivar la unidad de procesamiento de etapa final ISP 120. En dichas modalidades, si la unidad de procesamiento de etapa final 120 es derivada, el subsistema ISP 32 de la figura 8 puede operar en una manera similar a aquella mostrada en la figura 7, es decir, la salida del conducto ISP 82 es enviada directa/indirectamente a una o más de la memoria 108, el codificador/decodificador 118, o la pantalla 28.
Las técnicas de procesamiento de imagen mostradas en las modalidades que aparecen en la figura 7 y la figura 8 generalmente se pueden resumir a través del método 130 mostrado a manera de gráfico de flujo en la figura 9. Tal como se muestra, el método 130 comienza en el bloque 132, en el cual datos de imagen en bruto (por ejemplo, datos de patrón Bayer) son recibidos utilizando una interfaz de sensor desde un sensor de imagen (por ejemplo, 90) . En el bloque 134, los datos de imagen en bruto recibidos en el paso 132 son procesados utilizando la lógica etapa inicial 80. Tal como se mencionó anteriormente, la lógica de etapa inicial ISP 80 puede ser configurada para aplicar filtración temporal, agrupando la filtración de compensación. A continuación en el paso 136, los datos de imagen en bruto procesados por la lógica de etapa inicial ISP 80 pueden ser procesados adicionalmente por el conducto ISP 82, el cual puede ejecutar diversos pasos de procesamiento para realizar la interpolación cromática de los datos de imagen en bruto en datos RGB a pleno color y para convertir adicionalmente los datos de color RGB en un espacio de color YUV o YC1C2 (donde Cl y C2 representan diferentes colores con diferencia cromática y en donde Cl y C2 pueden representar la crominancia de diferencia de azul (Cb) y diferencia de rojo (Cr) en una modalidad) .
A partir del paso 136, el método 130 puede continuar con el paso 138 o con el paso 160. Por ejemplo, en una modalidad (figura 7) donde la salida del conducto ISP 82 es proporcionada a un dispositivo de despliegue 28, el método 130 continua al paso 140, en donde los datos de imagen YC1C2 son desplegados utilizando el dispositivo de despliegue 28 (o enviados hacia/desde el conducto ISP 82 a la memoria 108) . Alternativamente, en una modalidad donde la salida del conducto ISP 82 es post-procesada por una unidad de etapa final ISP 120 (figura 8) , el método 130 puede continuar del paso 136 al paso 138, donde la salida YC1C2 del conducto ISP 82 es procesada utilizando la lógica de procesamiento de etapa final ISP 120 antes de ser desplegada por el dispositivo de despliegue en el paso 140.
Debido al diseño generalmente complejo de la circuitería de procesamiento de imagen 32 que se muestra aquí, puede ser benéfico separar el análisis de la lógica de etapa inicial ISP 80 y la lógica de procesamiento de secuencia ISP 82 (o conducto ISP) y la lógica de procesamiento de etapa final ISP 120 en secciones separadas, tal como se muestra a continuación. Particularmente, las figuras 10 a 97 de la presente solicitud se pueden referir al análisis de diversas modalidades y aspectos de la lógica de etapa inicial ISP 80, las figuras 98 a 133 de la presente solicitud se pueden referir al análisis de diversas modalidades y aspectos de la lógica de procesamiento de secuencia ISP 82 y las figuras 132 a 142 se pueden referir al análisis de varias modalidades y aspectos de la lógica de etapa final ISP 120.
Lógica de procesamiento de etapa inicial ISP La figura 10 es un diagrama en bloques más detallado que muestra bloques lógicos funcionales que pueden ser implementados en la lógica de etapa inicial ISP 80, de acuerdo con una modalidad. Dependiendo de la configuración del dispositivo de generación de imagen 30 y/o la interfaz de sensor 94, tal como se analizó anteriormente en la figura 7, datos de imagen en bruto pueden ser proporcionados a la lógica de etapa inicial ISP 80 por uno o más sensores de imagen 90. En la modalidad mostrada, los datos de imagen en bruto pueden ser proporcionados a la lógica de etapa inicial ISP 80 por un primer sensor de imagen 90a (SensorO) y un segundo sensor de imagen 90b (Sensor1) . Tal como se analizará con mayor detalle a continuación, cada sensor de imagen 90a y 90b puede estar configurado para aplicar agrupación a los datos de imagen de plena resolución a fin de incrementar la relación señal -a-ruido de la señal de imagen. Por ejemplo, se puede aplicar una técnica de agrupación, tal como agrupación 2x2, la cual puede interpolar un píxel de imagen en bruto "agrupado" con base en cuatro píxeles de imagen de plena resolución del mismo color. En una modalidad, esto puede tener como resultado que haya cuatro componentes de señal acumulados asociados con el píxel agrupado contra un solo componente de ruido, mejorando así la señal-a-ruido de los datos de imagen, pero reduciendo la resolución general. De manera adicional, la agrupación también puede tener como resultado un muestreo espacial no uniforme o desigual de los datos de imagen, lo cual puede ser corregido utilizando la filtración de compensación de agrupación, tal como se analizará con mayor detalle a continuación.
Tal como se muestra, los sensores de imagen 90a y 90b pueden proporcionar los datos de imagen en bruto como las señales SifO y Sifl, respectivamente. Cada uno de los sensores de imagen 90a y 90b generalmente puede estar asociado con las unidades de procesamiento de estadísticas respectivas 142 (StatsPipeO) y 144 (StatsPipel) , las cuales pueden estar configuradas para procesar datos de imagen para la determinación de uno o más conjuntos de estadísticas (tal como lo indican las señales StatsO y Statsl) , incluyendo estadísticas relacionadas con la exposición automática, balance automático de blancos, enfoque automático, detección de parpadeo, compensación de nivel de negro, y corrección de sombreado de lente, y así sucesivamente. En algunas modalidades, cuando solamente uno de los sensores 90a o 90b está adquiriendo de manera activa la imagen, los datos de imagen pueden ser enviados tanto a StatsPipeO como a StatsPipel en caso que se deseen estadísticas adicionales. Por ejemplo, para proporcionar un ejemplo, si StatsPipeO y StatsPipel están disponibles, StatsPipeO puede ser utilizado para recopilar estadísticas para un espacio de color (por ejemplo, RGB) , y StatsPipel puede ser utilizado para recolectar estadísticas para otro espacio de color (por ejemplo, YUV o YCbCr) . Es decir, las unidades de procesamiento de estadísticas 142 y 144 pueden operar en paralelo para recopilar múltiples conjuntos de estadísticas para cada cuadro de los datos de imagen adquiridos por el sensor activo.
En la presente modalidad, se proporcionan cinco fuentes de datos asincronas en la etapa inicial ISP 80. Estas incluyen: (1) una entrada directa desde una interfaz de sensor correspondiente a SensorO (90a) (referido como SifO o SensO) , (2) una entrada directa desde una interfaz de sensor correspondiente al Sensorl (90b) (referido como Sifl o Sensl) , (3) entrada de datos de SensorO desde la memoria 108 (referido como SiflnO o SensODMA) , la cual puede incluir una interfaz DMA, (4) entrada de datos de Sensorl desde la memoria 108 (referido como Siflnl o SenslDMA) y (5) un conjunto de datos de imagen con cuadros de la entrada de datos de SensorO y Sensorl recuperados de la memoria 108 (referido como FeProcIn o ProcInDMA) . La etapa inicial ISP 80 también puede incluir múltiples destinos a los cuales se pueden enrutar los datos de imagen desde las fuentes, en donde cada destino puede ser cualquiera de una ubicación de almacenamiento en memoria (por ejemplo, en 108) , o una unidad de procesamiento. Por ejemplo, en la presente modalidad, la etapa inicial ISP 80 incluye seis destinos: (l)SifODMA para recibir datos de SensorO en la memoria 108, (2) SiflDMA para recibir datos de Sensorl en la memoria 108, (3) la primera unidad de procesamiento de estadísticas 142 (StatsPipeO) , (4) la segunda unidad de procesamiento de estadísticas 144 (StatsPipel) , (5) la unidad de procesamiento de píxeles de etapa inicial (FEProc) 150, y (6) FeOut (o FEProcOut) a la memoria 108 o la secuencia ISP 82 (que se analiza con mayor detalle a continuación) . En una modalidad, la etapa inicial ISP 80 se puede configurar de manera que solamente algunos destinos son válidos para una fuente particular, tal como se muestra en la siguiente tabla 1.
TABLA 1 Ejemplo de destinos válidos de etapa inicial ISP para cada fuente Por ejemplo, de acuerdo con la tabla 1, la fuente SensO (interfaz de sensor del SensorO) se puede configurar para proporcionar datos a los destinos SIfODMA (señal 154), StatsPipeO (señal 156) , StatsPipel (señal 158) , FEProc (señal 160) o FEOut (señal 162) . Con respecto a FEOut, los datos fuente pueden, en algunos casos, ser proporcionados a FEOut para desviar el procesamiento de píxel por FEProc, tal como para propósitos de prueba o depuración. Adicionalmente , la fuente Sensl (interfaz de sensor del Sensorl) se puede configurar para proporcionar datos a los destinos SIflDMA (señal 164) , StatsPipeO (señal 166) , StatsPipel (señal 168) , FEProc (señal 170), o FEOut (señal 172), la fuente SensODMA (datos del SensorO desde la memoria 108) se puede configurar para proporcionar datos a StatsPipeO (señal 174) , la fuente SenslDMA (datos del Sensorl desde la memoria 108) se puede configurar para proporcionar datos a StatsPipel (señal 176) y la fuente ProcInDMA (datos del SensorO y Sensorl desde la memoria 108) se puede configurar para proporcionar datos a FEProc (señal 178) y FEOut (señal 182) .
Se debiera observar que la modalidad aquí ilustrada está configurada de manera que SensODMA (cuadros de SensorO de la memoria 108) y SenslDMA (cuadros de Sensorl de la memoria 108) solamente son proporcionados a StatsPipeO y StatsPipel, respectivamente. Esta configuración permite que la etapa inicial ISP 80 retenga un cierto número de cuadros previos (por ejemplo, 5 cuadros) en memoria. Por ejemplo, debido a un retraso o retardo entre el tiempo en que un usuario inicia un evento de captura (por ejemplo, cambia el sistema de imagen de un modo de vista previa a un modo de captura o grabación, o incluso solamente encendiendo o inicializando el sensor de imagen) utilizando el sensor de imagen al momento en que una escena de imagen es capturada, no todos los cuadros que el usuario pretende capturar pueden ser capturados y procesados en tiempo sustancialmente real. Por lo tanto, al retener un cierto número de cuadros previos en la memoria 108 (por ejemplo, a partir de una fase de vista previa) , estos cuadros previos pueden ser procesados posteriormente o junto con los cuadros realmente capturados en respuesta al evento de captura, compensando así cualquier retraso y proporcionando un conjunto de datos de imagen más completo .
Con respecto a la configuración ilustrada de la figura 10, se debiera observar que StatsPipeO 142 está configurado para recibir una de las entradas 156 (desde SensO) , 166 (desde Sensl) , y 174 (desde SensODMA) , conforme a lo determinado por una lógica de selección 146, tal como un multiplexor. De manera similar, la lógica de selección 148 puede seleccionar una entrada desde las señales 158, 176 y 168 para proporcionar a StatsPipel, y la lógica de selección 152 puede seleccionar una entrada desde las señales 160, 170 y 178 para proporcionar a FEProc . Tal como se mencionó anteriormente, los datos estadísticos (StatsO y Statsl) pueden ser proporcionados a la lógica de control 84 para la determinación de diversos parámetros de control que pueden ser utilizados para operar el dispositivo de generación de imagen 30 y/o la lógica de procesamiento de secuencia ISP 82. Tal como se puede apreciar, bloques lógicos de selección (146, 148 y 152) mostrados en la figura 10 pueden ser proporcionados por cualquier tipo de lógica conveniente, tal como un multiplexor que selecciona una de las múltiples señales de entrada en respuesta a una señal de control .
La unidad de procesamiento de píxel (FEProc) 150 se puede configurar para ejecutar diversas operaciones de procesamiento de imagen en los datos de imagen en bruto sobre una base píxel-por-pixel . Tal como se muestra, FEProc 150, como una unidad de procesamiento de destino, puede recibir datos de imagen desde las fuentes SensO (señal 160) , Sensl (señal 170) , o ProcInDMA (señal 178) por medio de la lógica de selección 152. FEProc 150 también puede recibir y emitir diversas señales (por ejemplo, Rin, Hin, Hout e Yout - las cuales pueden representar datos de luminancia e historial de movimiento utilizados durante la filtración temporal) cuando se ejecutan las operaciones de procesamiento de píxeles, las cuales pueden incluir filtración temporal y filtración de compensación de agrupación, tal como se analizará con mayor detalle a continuación. La salida 109 (FEProcOut) de la unidad de procesamiento de píxeles 150 entonces puede ser reenviada a la lógica de conducto ISP 82, tal como a través de una o más filas de primero en entrar primero en salir (FIFO) o puede ser enviada a la memoria 108.
Adem s, tal como se muestra en la figura 10, la lógica de selección 152, además de recibir las señales 160, 170 y 178, puede recibir además las señales 180 y 184. La señal 180 puede representar datos de imagen en bruto "pre-procesados" de StatsPipeO, y la señal 184 puede representar datos de imagen en bruto "pre-procesados" de StatsPipel . Tal como se analizará a continuación, cada una de las unidades de procesamiento de estadísticas puede aplicar una o más operaciones de pre-procesamiento a los datos de imagen en bruto antes de recopilar las estadísticas. En una modalidad, cada unas de las unidades de procesamiento de estadísticas puede ejecutar un grado de detección/corrección de píxeles defectuosos, corrección de sombreado de lente, compensación de nivel de negro, y compensación inversa de nivel de negro. Por lo tanto, las señales 180 y 184 pueden representar datos de imagen en bruto que han sido procesados utilizando las operaciones de pre-procesamiento antes mencionadas (tal como se analizará con mayor detalle a continuación en la figura 68) . Por lo tanto, la lógica de selección 152 proporciona a la lógica de procesamiento de etapa inicial ISP 80 la flexibilidad de proporcionar ya sea datos de imagen en bruto no pre-procesados desde SensorO (señal 160) y Sensorl (señal 170) o datos de imagen en bruto pre-procesados desde StatsPipeO (señal 180) y StatsPipel (señal 184) . Adicionalmente , tal como lo muestran las unidades lógicas de selección 186 y 188, la lógica de procesamiento de etapa inicial ISP 80 también tiene la flexibilidad de escribir ya sea datos de imagen en bruto no preprocesados de SensorO (señal 154) o Sensorl (señal 164) a la memoria 108, o escribir datos de imagen en bruto pre-procesados de StatsPipeO (señal 180) o StatsPipel (señal 184) a la memoria 108.
Para controlar la operación de la lógica de etapa inicial ISP 80, se proporciona una unidad de control de etapa inicial 190. La unidad de control 190 se puede configurar para inicializar y programar registros de control (referidos aquí como "registros de ida") para configurar e iniciar el procesamiento de un cuadro de imagen y para seleccionar un banco de registro apropiado para actualizar registros de datos de doble memoria intermedia. En algunas modalidades, la unidad de control 190 también puede proporcionar lógica de monitoreo de desempeño para registrar los ciclos de reloj , latencia de memoria y la información de calidad de servicio (QOS) . Además, la unidad de control 190 también puede controlar el enrejado de reloj dinámico, el cual puede ser utilizado para deshabilitar los relojes en una o más porciones de la etapa inicial ISP 0 cuando no hay suficientes datos en la fila de entrada provenientes de un sensor activo.
Al utilizar los "registros de ida" antes mencionados, la unidad de control 190 puede controlar la actualización de diversos parámetros para cada una de las unidades de procesamiento (por ejemplo, StatsPipeO, StatsPipel, y FEProc) y se puede conectar en interfaz con las interfaces de sensor para controlar el inicio y detención de las unidades de procesamiento. Generalmente, cada una de las unidades de procesamiento de etapa inicial opera sobre una base cuadro-por-cuadro . Tal como se analizó anteriormente (Tabla 1) , la entrada a las unidades de procesamiento puede ser desde la interfaz de sensor (SensO o Sensl) o desde la memoria 108. Además, las unidades de procesamiento pueden utilizar diversos parámetros y datos de configuración, los cuales pueden ser almacenados en registros de datos correspondientes. En una modalidad, los registros de datos asociados con cada unidad de procesamiento o destino pueden ser agrupados en bloques formando un grupo de banco de registro. En la modalidad de la figura 10, siete grupos de banco de registro pueden ser definidos en la etapa inicial ISP: SifO, Sifl, StatsPipeO, StatsPipel, ProcPipe, FEOut y Procln. Cada espacio de dirección de bloque de registro es duplicado para proporcionar dos bancos de registros. Solamente los registros que están en doble memoria intermedia son iniciados en el segundo banco. Si un registro no está en doble memoria intermedia, la dirección en el segundo banco puede ser mapeada a la dirección del mismo registro en el primer banco.
Para registros que están en doble memoria intermedia, los registros de un banco están activos y son utilizados por las unidades de procesamiento mientras que los registros del otro banco están sombreados. El registro sombreado puede ser actualizado por la unidad de control 190 durante el intervalo de cuadro actual mientras que el hardware está utilizando los registros activos. La determinación de cuál banco utilizar para una unidad de procesamiento particular en un cuadro particular puede ser especificada por un campo "NextBk" (siguiente banco) en un registro de ida correspondiente a la fuente que proporciona los datos de imagen a la unidad de procesamiento. Esencialmente, NextBk es un campo que permite a la unidad de control 190 controlar cuál banco de registro se vuelve activo al momento de un evento de disparo para el cuadro posterior.
Antes de analizar la operación de los registros de ida a detalle, la figura 11 proporciona un método general 200 para procesar datos de imagen sobre una base cuadro-por-cuadro de acuerdo con las presentes técnicas. Comenzando en el paso 202, las unidades de procesamiento de destino que son el objetivo de una fuente de datos (por ejemplo, SensO, Sensl, SensODMA, SenslDMA, o ProcInDMA) ingresan a un estado inactivo. Esto puede indicar que el procesamiento para el cuadro actual está completo y, por lo tanto, la unidad de control 190 puede prepararse para procesar el siguiente cuadro. Por ejemplo, en el paso 204, se actualizan parámetros programables para cada unidad de procesamiento de destino. Esto puede incluir, por ejemplo, actualizar el campo NextBk en el registro de ida correspondiente a la fuente, así como actualizar cualesquiera parámetros en los registros de datos correspondientes a las unidades de destino. Posteriormente, en el paso 206, un evento de disparo puede colocar las unidades de destino en un estado de ejecución. Además, tal como se muestra en el paso 208, cada unidad de destino que es el objetivo de la fuente, completa sus operaciones de procesamiento para el cuadro actual, y el método 200 posteriormente puede retornar al paso 202 para el procesamiento del siguiente cuadro.
La figura 12 muestra una vista de diagrama en bloques que muestra dos bancos de datos 210 y 212 que pueden ser utilizados por las diversas unidades de destino de la etapa inicial ISP. Por ejemplo, BankO (210) puede incluir los registros de datos 1-n (210a-210d) y Bankl (212) puede incluir los registros de datos 1-n (212a-212d) . Tal como se analizó anteriormente, la modalidad mostrada en la figura 10 puede utilizar un banco de registro (BankO) que tenga siete grupos de banco de registro (SIfO, SIfl, StatsPipeO, StatsPipel, ProcPipe, FEOut yProcIn) . Por lo tanto, en dicha modalidad, el espacio de dirección del bloque de registro de cada registro es duplicado para proporcionar un segundo banco de registro (Bankl) .
La figura 12 también ilustra el registro de ida 214 que puede corresponder a una de las fuentes. Tal como se muestra, el registro de ida 214 incluye un campo "NextVld" 216 y el campo "NextBk" antes mencionado 218. Estos campos pueden ser programados antes de iniciar el procesamiento del cuadro actual. Particularmente, NextVld puede indicar los destinos a donde serán enviados los datos desde la fuente. Tal como se analizó anteriormente, NextBk puede seleccionar un registro de datos correspondiente de cualquiera del BankO o Bankl para cada destino objetivo, tal como lo indica NextVld. Aunque no se muestra en la figura 12, el registro de ida 214 también puede incluir un bit de armado, referido aquí como un "bit de ida", el cual puede ser establecido para armar el registro de ida. Cuando se detecta un evento de disparo 226 para un cuadro actual, NextVld y NextBk pueden ser copiados en un campo Currvld 222 y un campo CurrBk 224 de un registro actual o "activo" correspondiente 220. En una modalidad, los registros actuales 220 pueden ser registros de solo lectura que pueden ser establecidos por el hardware, mientras que permanecen inaccesibles a comandos de software dentro de la etapa inicial ISP 80.
Tal como se apreciará, para cada fuente de etapa inicial ISP, se puede proporcionar un registro de ida correspondiente. Para los propósitos de esta divulgación, los registros de ida correspondientes a las fuentes antes analizadas SensO, Sensl, SensODMA, SenslD A y ProcInDMA se pueden referir como SensOGo, SenslGo, SensODMAGo, SenslDMAGo yProcInDMAGo, respectivamente. Tal como se mencionó anteriormente, la unidad de control puede utilizar los registros de ida para controlar la secuencia del procesamiento de cuadros dentro de la etapa inicial ISP 80. Cada registro de ida contiene un campo NextVld y un campo NextBk para indicar qué destinos serán válidos, y cuál banco de registro (0 o 1) será utilizado, respectivamente, para el siguiente cuadro. Cuando ocurre el evento de disparo 226 del siguiente cuadro, los campos NextVld y NextBk son copiados a un registro de solo lectura activo correspondiente 220 que indica los destinos válidos actuales y los números de banco, tal como se mostró anteriormente en la figura 12. Cada fuente se puede configurar para operar de manera asincrona y puede enviar datos a cualquiera de sus destinos válidos. Además, se debiera entender que para cada destino, generalmente solo una fuente puede estar activa durante un cuadro actual.
Con respecto al armado y disparo del registro de ida 214, la validación de un bit de armado o "bit de ida" en el registro de ida 214 arma la fuente correspondiente con los campos NExtVld y NextBk asociados. Para disparo, están disponibles diversos modos dependiendo si los datos de entrada fuente son leídos de la memoria (por ejemplo, SensODMA, SenslDMA o ProcInDMA) , o si los datos de entrada fuente provienen de una interfaz de sensor (por ejemplo, SensO o Sensl) . Por ejemplo, si la entrada proviene de la memoria 108, el armado del bit de ida por sí mismo puede servir como el evento de disparo, debido a que la unidad de control 190 tiene control sobre el momento en que los datos son leídos desde la memoria 108. Si los cuadros de imagen están siendo ingresados por la interfaz de sensor, entonces el evento de disparo puede depender de la temporización en la cual el registro de ida correspondiente es armado con relación al momento en que los datos de la interfaz de sensor son recibidos. De acuerdo con la presente modalidad, en las figuras 13-15 se muestran tres técnicas diferentes para temporización de disparo desde una entrada de interfaz de sensor .
Haciendo referencia primero a la figura 13, se ilustra un primer escenario en el cual ocurre el disparo una vez que todos los destinos que son el objetivo de la fuente cambian de un estado ocupado o en ejecución a un estado inactivo. Aquí, la señal de datos WALID (228) representa una señal de datos de imagen de una fuente. El impulso 230 representa un cuadro actual de los datos de imagen, el impulso 236 representa el siguiente cuadro de los datos de imagen, y el intervalo 232 representa un intervalo de supresión vertical (VBLANK) 232 (por ejemplo, representa el diferencial de tiempo entre la última línea del cuadro actual 230 y el siguiente cuadro 236) . El diferencial de tiempo entre el borde de subida y el borde de bajada del impulso 230 representa un intervalo de cuadro 234. Por lo tanto, en la figura 13, la fuente puede ser configurada para dispararse cuando todos los destinos objetivo hayan terminado las operaciones de procesamiento en el cuadro actual 230 y hayan pasado a un estado inactivo. En este escenario, la fuente es armada (por ejemplo, mediante la configuración del bit de "ida" o armado) antes que los destinos completen el procesamiento de manera que la fuente pueda disparar e iniciar el procesamiento del siguiente cuadro 236 tan pronto como los destinos objetivo pasen a un estado inactivo. Durante el intervalo de supresión vertical 232, las unidades de procesamiento pueden ser configuradas y establecidas para el siguiente cuadro 236 utilizando los bancos de registro especificados por el registro de ida correspondiente a la fuente antes que lleguen los datos de entrada del sensor. A manera de ejemplo solamente, memorias intermedias de lectura utilizadas por FEProc 150 pueden ser llenadas antes que llegue el siguiente cuadro 236. En este caso, registros sombreados correspondientes a los bancos de registro activos pueden ser actualizados después del evento de disparo, permitiendo así que un intervalo de cuadro completo establezca los registros de doble memoria intermedia para el siguiente cuadro (por ejemplo, después del cuadro 236) .
La figura 14 ilustra un segundo escenario en el cual la fuente es disparada mediante el armado del bit de ida en el registro de ida correspondiente a la fuente. Bajo esta configuración de "disparar-en-ida" , las unidades de destino que son el objetivo de la fuente ya están inactivas y el armado del bit de ida es el evento de disparo. Este modo de disparo puede ser utilizado para registros que no son de doble memoria intermedia y, por lo tanto, son actualizados durante la supresión vertical (por ejemplo, en oposición a la actualización de un registro de sombra de doble memoria intermedia durante el intervalo de cuadro 234).
La figura 15 ilustra un tercer modo de disparo en el cual la fuente es disparada al momento de la detección del inicio del siguiente cuadro, es decir, un VSY C en surgimiento. Sin embargo, se debiera observar que en este modo, si el registro de ida es armado (estableciendo el bit de ida) , después que el siguiente cuadro 236 ya ha iniciado el procesamiento, la fuente utilizará los destinos objetivo y los bancos de registro correspondientes al cuadro previo, debido a que los campos CurrVld y CurrBk no son actualizados antes que el destino inicie el procesamiento. Esto no deja un intervalo de supresión vertical para el establecimiento de las unidades de procesamiento de destino y potencialmente puede tener como resultado la caída de cuadros, particularmente cuando se opera en un modo de sensor dual. Sin embargo, se debiera observar que este modo no obstante puede tener como resultado una operación precisa si la circuitería de procesamiento de imagen 32 está operando en un modo de sensor sencillo que utiliza los mismos bancos de registro para cada cuadro (por ejemplo, el destino (NextVld) y los bancos de registro (NextBk) no cambian) .
Haciendo referencia ahora a la figura 16, se ilustra con mayor detalle un registro de control (o "registro de ida") 214. El registro de ida 214 incluye el armado del bit de "ida" 238, así como el campo NextVld 216 y el campo NextBk 218. Tal como se analizó anteriormente, cada fuente (por ejemplo, SensO, Sensl, SensODMA, SenslDMA, o ProcInDMA) de la etapa inicial ISP 80 puede tener un registro de ida correspondiente 214. En una modalidad, el bit de ida 238 puede ser un campo de un solo bit, y el registro de ida 214 puede ser armado estableciendo el bit de ida 238 a l. El campo NextVld 216 puede contener un número de bits correspondiente al número de destinos en la etapa inicial ISP 80. Por ejemplo, en la modalidad mostrada en la figura 10, la etapa inicial ISP incluye seis destinos: SifODMA, SiflDMA, StatsPipeO, StatsPipel, FEProc y FEOut . Por lo tanto, el registro de ida 214 puede incluir seis bits en el campo NextVld 216, con un bit correspondiente a cada destino, y en donde los destinos objetivo se establecen a l. De manera similar, el campo NextBk 216 puede contener un número de bits correspondiente al número de registros de datos en la etapa inicial ISP 80. Por ejemplo, tal como se analizó anteriormente, la modalidad de la etapa inicial ISP 80 mostrada en la figura 10 puede incluir siete registros de datos: SifO, Sifl, StatsPipeO, StatsPipel, ProcPipe, FEOut y Procln. Por consiguiente, el campo NextBk 218 puede incluir siete bits, con un bit correspondiente a cada registro de datos, y en donde los registros de datos correspondientes a Banco 0 y 1 son seleccionados estableciendo sus valores de bit respectivos a 0 o 1, respectivamente. Por lo tanto, al utilizar el registro de ida 214, la fuente, al momento del disparo, conoce con precisión cuáles unidades de destino van a recibir los datos del cuadro, y cuáles bancos de registro van a ser utilizados para configurar las unidades de destino objetivo.
Adicionalmente debido a la configuración de sensor dual soportada por la circuitería ISP 32, la etapa inicial ISP puede operar en un modo de configuración de sensor sencillo (por ejemplo, solamente un sensor está adquiriendo datos) y un modo de configuración de sensor dual (por ejemplo, ambos sensores están adquiriendo datos) . En una configuración típica de sensor sencillo, los datos de entrada de una interfaz de sensor, tal como SensO, son enviados a StatsPipeO (para procesamiento de estadísticas) y FEProc (para procesamiento de píxeles) . Además, los cuadros de sensor también pueden ser enviados a la memoria (SufODMA) para futuro procesamiento, tal como se analizó anteriormente.
Un ejemplo de cómo se pueden configurar los campos NextVld correspondientes a cada fuente de la etapa inicial ISP 80 cuando operan en un modo de sensor sencillo se muestra a continuación en la Tabla 2.
TABLA 2 Ejemplo de NextVld por fuente: modo de sensor sencillo Tal como se analizó anteriormente con referencia a la Tabla 1, la etapa inicial ISP 80 se puede configurar de manera que solamente algunos destinos son válidos para una fuente en particular. Por lo tanto, los destinos en la Tabla 2 marcados con "X" están destinados a indicar que la etapa inicial ISP 80 no está configurada para permitir que una fuente particular envíe datos de cuadro a ese destino. Para dichos destinos, los bits del campo NextVld de la fuente particular correspondiente a ese destino siempre pueden ser 0. Sin embargo, se debiera entender que esto es simplemente una modalidad y que, de hecho, en otras modalidades, la etapa inicial ISP 80 se puede configurar de manera que cada fuente tenga la capacidad para tener como objetivo cada unidad de destino disponible.
La configuración mostrada anteriormente en la Tabla 2 representa un modo de sensor sencillo en el cual solamente SensorO está proporcionando datos de cuadro. Por ejemplo, el registro SensOGo indica los destinos como siendo SIfODMA, StatsPipeO y FEProc . Por lo tanto, cuando se dispara, cada cuadro de los datos de imagen de SensorO, son enviados a estos tres destinos. Tal como se analizó anteriormente, SIfODMA puede almacenar cuadros en la memoria 108 para procesamiento posterior, StatsPipeO aplica procesamiento de estadísticas para determinar diversos puntos de datos estadísticos, y FEProc procesa el cuadro utilizando, por ejemplo, filtración temporal y filtración de compensación de agrupación. Además, en algunas configuraciones donde se desean estadísticas adicionales (por ejemplo, estadísticas en diferentes espacios de color) , StatsPipel también puede ser habilitada (NextVld correspondiente establecido a 1) durante el modo de sensor sencillo. En dichas modalidades, los datos de cuadro de SensorO son enviados a StatsPipeO y StatsPipel . Además, tal como se muestra en la presente modalidad, solamente una interfaz de sensor sencillo (por ejemplo, SensO o alternativamente SenO) es la única fuente activa durante el modo de sensor sencillo.
Con esto en mente, la figura 17 proporciona un gráfico de flujo que muestra un método 240 para procesar datos de cuadro en la etapa inicial ISP 80 cuando solamente un sensor sencillo está activo (por ejemplo, SensorO) . Aunque el método 240 ilustra en particular el procesamiento de los datos de cuadro de SensorO mediante FEProc 150 como un ejemplo, se debiera entender que este proceso se puede aplicar a cualquier otra fuente y unidad de destino correspondiente en la etapa inicial ISP 80. Comenzando en el paso 242, SensorO comienza adquiriendo datos de imagen y enviando los cuadros capturados a la etapa inicial ISP 80. La unidad de control 190 puede inicializar la programación del registro de ida correspondiente a SensO (la interfaz del SensorO) para determinar los destinos objetivo (incluyendo FEProc) y qué registros de banco utilizar, tal como se muestra en el paso 244. Posteriormente, la lógica de decisión 246 determina si ha ocurrido un evento de disparo de fuente.
Tal como se analizó anteriormente, la entrada de datos del cuadro desde una interfaz de sensor puede utilizar diferentes modos de disparo (figuras 13-15) . Si no se detecta un evento de disparador, el proceso 240 continua esperando el disparador. Una vez que ocurre el disparo, el siguiente cuadro se convierte en el cuadro actual y es enviado a FEProc (y otros destinos objetivo) para procesamiento en el paso 248. FEProc se puede configurar utilizando parámetros de datos con base en un registro de datos correspondiente (ProcPipe) especificado en el campo NextBk del registro de SensOGo. Después que se completa el procesamiento del cuadro actual en el paso 250, el método 240 puede retornar al paso 244, en el cual el registro de SensOGo es programado para el siguiente cuadro.
Cuando SensorO y Sensorl de la etapa inicial ISP 80 están activos, el procesamiento de las estadísticas permanece generalmente directo, debido a que cada entrada de sensor puede ser procesada por un bloque de estadísticas respectivo, StatsPipeO y StatsPipel . Sin embargo, debido a que la modalidad ilustrada de la etapa inicial ISP 80 proporciona solamente una unidad de procesamiento de píxel sencilla (FEProc) , FEProc se puede configurar para alternar entre cuadros de procesamiento correspondientes a datos de entrada de SensorO y cuadros correspondientes a datos de entrada de Sensorl . Tal como se apreciará, los cuadros de imagen son leídos del FEProc en la modalidad ilustrada para evitar una condición en la cual los datos de imagen de un sensor son procesados en tiempo real mientras que los datos de imagen del otro sensor no son procesador en tiempo real . Por ejemplo, tal como se muestra en la siguiente Tabla 3, la cual muestra una posible configuración de campos NextVld en los registros de ida para cada fuente cuando la etapa inicial ISP 80 está operando en un modo de sensor dual, datos de entrada de cada sensor son enviados a la memoria (SIfODMA y SlflDMA) y a la unidad de procesamiento de estadísticas correspondiente (StatsPipeO y StatsPipel) .
TABLA 3 Ejemplo de NextVld por fuente: modo de sensor dual Los cuadros de sensor en la memoria son enviados a FEProc desde la fuente ProcInDMA, de manera que alternan entre SensorO y Sensorl a una tasa de transferencia basada en sus tasas de transferencia de cuadro correspondientes. Por ejemplo, si SensorO y Sensorl están adquiriendo datos de imagen a una tasa de transferencia de 30 cuadros por segundo (fps) , entonces sus cuadros de sensor pueden ser intercalados en una manera 1-a-l. Si SensorO (30 fps) está adquiriendo datos de imagen a una tasa de transferencia de dos veces aquella de Sensorl (15 fps) , entonces la intercalación puede ser 2-a-l, por ejemplo. Es decir, dos cuadros de los datos de SensorO son leídos de la memoria por cada cuadro de datos de Sensorl .
Con esto en mente, la figura 18 muestra un método 252 para procesar datos de cuadro en la etapa inicial ISP 80 que tiene dos sensores adquiriendo datos de imagen simultáneamente. En el paso 254, SensorO y Sensorl comienzan a adquirir cuadros de imagen. Tal como se apreciará, Sensorl y Sensorl pueden adquirir los cuadros de imagen utilizando diferentes tasas de transferencia de cuadro, resoluciones, y así sucesivamente. En el paso 256, los cuadros adquiridos de SensorO y Sensorl son escritos en la memoria 108 (por ejemplo, utilizando los destinos SIfODMA y SIflDMA) . A continuación, la fuente ProcInDMA lee los datos de cuadro de la memoria 108 en una manera alterna, tal como se indica en el paso 258. Tal como se analizó, los cuadros pueden alternar entre datos del SensorO y datos del Sensorl dependiendo de la tasa de transferencia de cuadros a la cual se adquieren los datos. En el paso 260 se adquiere el siguiente cuadro de ProcInDMA. Posteriormente, en el paso 262, los campos NextVld y NextBk del registro de ida correspondiente a la fuente, aquí ProcInDMA, son programados dependiendo si el siguiente cuadro es datos de SensorO o Sensorl . Posteriormente, la lógica de decisión 264 determina si ha ocurrido un evento que dispare la fuente. Tal como se analizó anteriormente, la entrada de datos de la memoria puede ser disparada armando el bit de ida (por ejemplo, modo de "disparar-en-ida" ) . Por lo tanto, el disparo puede ocurrir una vez que el bit de ida del registro de ida es puesto a 1. Una vez que ocurre el disparo, el siguiente cuadro se convierte en el cuadro actual y es enviado a FEProc para procesamiento en el paso 266. Tal como se analizó anteriormente, FEProc se puede configurar utilizando parámetros de datos con base en un registro de datos correspondiente (ProcPipe) especificado en el campo NextBk del registro ProcInDMAGo. Después que se complete el procesamiento del cuadro actual en el paso 236, el método 252 puede regresar al paso 260 y continuar.
Un evento operativo adicional para el cual la etapa inicial ISP 80 está configurada para manejar es un cambio de configuración durante el procesamiento de imagen. Por ejemplo, dicho evento puede ocurrir cuando la etapa inicial ISP 80 cambia de una configuración de sensor sencillo a una configuración de sensor dual, o viceversa. Tal como se analizó anteriormente, los campos NextVld para algunas fuentes pueden ser diferentes dependiendo si uno o ambos sensores de imagen están activos. Por lo tanto, cuando se cambia la configuración del sensor, la unidad de control de etapa inicial ISP 190 puede liberar todas las unidades de destino antes que se conviertan en el objetivo de una nueva fuente. Esto puede evitar configuraciones inválidas (por ejemplo, asignando múltiples fuentes a un destino) . En una modalidad, la liberación de las unidades de destino se puede lograr estableciendo los campos NextVld de todos los registros de ida a 0, deshabilitando así todos los destinos, y armando el bit de ida. Después que las unidades de destino son liberadas, los registros de ida pueden ser reconfigurados dependiendo del modo de sensor actual, y el procesamiento de imagen puede continuar.
En la figura 19 se muestra un método 270 para conmutar entre configuraciones de sensor sencillo y dual, de acuerdo con una modalidad. Comenzando en el paso 272, se identifica un siguiente cuadro de datos de imagen de una fuente particular de la etapa inicial ISP 80. En el paso 274, los destinos objetivo (NextVld) son programados en el registro de ida correspondiente a la fuente. A continuación, en el paso 276, dependiendo de los destinos objetivo, NextBk es programado para señalar a los registros de datos correctos asociados con los destinos objetivo. Posteriormente, lógica de decisión 278 determina si ha ocurrido un evento de disparo fuente. Una vez que ocurre el disparo, el siguiente cuadro es enviado a las unidades de destino especificadas por NextVld y es procesado por las unidades de destino utilizando los registros de datos correspondientes especificados por NextBk, tal como se muestra en el paso 280. El procesamiento continúa hasta el paso 282, en el cual se completa el procesamiento del cuadro actual.
Posteriormente, lógica de decisión 284 determina si hay un cambio en los destinos objetivo para la fuente. Tal como se analizó anteriormente, las configuraciones NextVld de los registros de ida correspondientes a SensO y Sensl pueden variar dependiendo si un sensor o dos sensores están activos. Por ejemplo, haciendo referencia a la Tabla 2, si solamente SensorO está activo, los datos de SensorO son enviados a SlfODMA, StatsPipeO, y FEProc . Sin embargo, haciendo referencia a la Tabla 3, si ambos sensores, SensorO y Sensorl están activos, entonces los datos de SensorO no son enviados directamente a FEProc. Por el contrario, tal como se mencionó anteriormente, los datos de SensorO y Sensorl son escritos en la memoria 108 y leídos para FEProc en una manera alterna por la fuente ProcInDMA. Por lo tanto, si no se detecta un cambio de destino objetivo en la lógica de decisión 284, la unidad de control 190 deduce que la configuración del sensor no ha cambiado, y el método 270 retorna al paso 276, en donde el campo NextBk del registro de ida fuente es programado para señalar a los registros de datos correctos para el siguiente cuadro y continúa.
No obstante, si en el bloque de decisión 284 se detecta un cambio de destino, entonces la unidad de control 190 determina que ha ocurrido un cambio de configuración de sensor. Por ejemplo, esto podría representar la conmutación del modo de sensor sencillo al modo de sensor dual, o apagado de los sensores simultáneamente. Por consiguiente, el método 270 continúa al paso 286, en el cual todos los bits de los campos NextVld para todos los registros de ida son puestos a 0, deshabilitando así de manera efectiva el envío de los cuadros a cualquier destino en el siguiente disparador. Después, en la lógica de decisión 288, se toma una determinación respecto a si todas las unidades de destino han cambiado a un estado inactivo. En caso de no ser así, el método 270 espera en la lógica de decisión 288 hasta que todas las unidades de destino han completado sus operaciones actuales. A continuación, en la lógica de decisión 290, se toma una determinación respecto a si va a continuar el procesamiento de imágenes. Por ejemplo, si el cambio de destino representó la desactivación de SensorO y Sensorl, entonces el procesamiento de imagen finaliza en el paso 292. Sin embargo, si se determina que el procesamiento de imagen va a continuar, entonces el método 270 retorna al paso 274 y los campos NextVld de los registros de ida son programados de acuerdo con el modo de operación actual (por ejemplo, sensor dual o sensor sencillo) . Tal como aquí se muestra, los pasos 284-292 para borrar los registros de ida y los campos de destino colectivamente pueden ser referidos por el número de referencia 294.
A continuación, la figura 20 muestra una modalidad adicional a manera de gráfico de flujo (método 296) que permite otro modo de operación de sensor dual. El método 296 muestra una condición en la cual un sensor (por ejemplo, SensorO) está adquiriendo de manera activa datos de imagen y enviando los datos de imagen a FEProc 150 para procesamiento, al mismo tiempo que también está enviando los cuadros de imagen a StatsPipeO y/o memoria 108 (SIfODMA) mientras que el otro sensor (por ejemplo, Sensorl) está inactivo (por ejemplo, apagado) , tal como se muestra en el paso 298. Lógica de decisión 300 entonces detecta una condición en la cual Sensorl estará activo en el siguiente cuadro para enviar los datos de imagen a FEProc. Si no se cumple esta condición, entonces el método 296 retorna al paso 298. Sin embargo, si se cumple esta condición, entonces el método 296 procede ejecutando la acción 294 (colectivamente los pasos 284-292 de la figura 19) , con lo cual los campos de destino de las fuentes son borrados y reconfigurados en el paso 294. Por ejemplo, en el paso 294, el campo NextVld del registro de ida asociado con Sensorl puede ser programado para especificar FEProc como un destino, así como StatsPipel y/o memoria (SIf1DMA) , mientras que el campo NextVld del registro de ida asociado con SensorO puede ser programado para borrar FEProc como un destino. En esta modalidad, aunque los cuadros capturados por SensorO no son enviados a FEProc en el siguiente cuadro, SensorO puede permanecer activo y seguir enviando sus cuadros de imagen a StatsPipeO, tal como se muestra en el paso 302, mientras que Sensorl captura y envía datos a FEProc para procesamiento en el paso 304. Por lo tanto, ambos sensores, SensorO y Sensorl, pueden seguir operando en este modo de "sensor dual" aunque solamente los cuadros de imagen de un sensor son enviados a FEProc para procesamiento. Para los propósitos de este ejemplo, un sensor que envía cuadros a FEProc para procesamiento puede ser referido como un "sensor activo", un sensor que no está enviando cuadros a FEProc pero que sigue enviando datos a las unidades de procesamiento de estadísticas se puede referir como un "sensor semi-activo" , y un sensor que no está adquiriendo datos en lo absoluto se puede referir como un "sensor inactivo" .
Un beneficio de la técnica anterior es que, debido a que las estadísticas siguen siendo adquiridas para el sensor semi-activo (SensorO) , la siguiente ocasión que el sensor semi-activo cambia a un estado activo y el sensor activo actual (Sensorl) cambia a un estado semi-activo o inactivo, el sensor semi-activo puede comenzar a adquirir datos dentro de un cuadro, debido a que los parámetros de balance de color y exposición pudieran ya estar disponibles debido a la recopilación continua de estadísticas de imagen. Esta técnica se puede referir como "conmutación caliente" de los sensores de imagen, y evita los inconvenientes asociados con "arranques en frío" de los sensores de imagen (por ejemplo, comenzando con el hecho de que no hay información de estadísticas disponible) . Además, para ahorrar energía, debido a que cada fuente es asincrona (tal como se mencionó anteriormente) , el sensor semi-activo puede operar a una tasa de transferencia de cuadro y/o reloj reducida durante el periodo semi-activo.
Antes de continuar con una descripción más detallada de las operaciones de procesamiento de estadísticas y procesamiento de píxeles mostradas en la lógica de etapa inicial ISP 80 de la figura 10, se cree que una breve introducción referente a las definiciones de las diversas regiones de cuadro ISP ayudará a facilitar un mejor entendimiento de la presente materia sujeto.
Haciendo referencia a las figuras 21 y 22, se ilustran, respectivamente un modo de direccionamiento lineal y un modo de direccionamiento en mosaico que se puede aplicar a datos de píxel recibidos desde los sensores de imagen 90 y almacenados en la memoria (por ejemplo 108) . En la modalidad mostrada, puede estar basado en un tamaño de solicitud de bloque de interfaz huésped de 64 bytes. Tal como se apreciará, otras modalidades pueden utilizar diferentes tamaños de solicitud de bloque (por ejemplo, 32 bytes, 128 bytes, y así sucesivamente) . En el modo de direccionamiento lineal mostrado en la figura 21, muestras de imagen están ubicadas en la memoria en orden secuencial. El término "espaciamiento lineal" especifica la distancia en bytes entre 2 píxeles verticales adyacentes. En el presente ejemplo, la dirección base de inicio de un plano está alineada con un límite de 64 bytes y el espaciamiento lineal puede ser un múltiplo de 64 (con base en el tamaño de solicitud de bloque) .
En el ejemplo de un formato de modo en mosaico, como se muestra en la figura 22, las muestras de imagen primero son acomodadas en secuencia en "mosaicos" , los cuales después son almacenados en memoria en secuencia. En la modalidad ilustrada, cada mosaico puede tener 256 bytes de ancho por 16 filas de alto. El término "espaciamiento de mosaico" debiera ser entendido para hacer referencia a la distancia en bytes entre 2 mosaicos verticales adyacentes. En el presente ejemplo, la dirección base de inicio de un plano en modo de mosaico está alineada con un límite de 4096 bytes (por ejemplo, el tamaño de un mosaico) y el espaciamiento de mosaico puede ser un múltiplo de 4096.
Con esto en mente, en la figura 23 se ilustran diversas regiones de cuadro que pueden ser definidas dentro de un cuadro fuente de imagen. El formato para un cuadro fuente proporcionado a la circuitería de procesamiento de imagen 32 puede utilizar ya sea los modos de direccionamiento lineal o en mosaico antes analizados, como también puede utilizar los formatos de píxel en una precisión de 8 , 10, 12, 14 o 16 bits. El cuadro fuente de imagen 306, tal como se muestra en la figura 23, puede incluir una región de cuadro de sensor 308, una región de cuadro en bruto 308, y una región activa 310. El cuadro de sensor 308 generalmente es el tamaño de cuadro máximo que el sensor de imagen 90 puede proporcionar a la circuitería de procesamiento de imagen 32. La región de cuadro en bruto 310 puede ser definida como la región del cuadro de sensor 308 que es enviada a la lógica de procesamiento de etapa inicial ISP 80. La región activa 312 puede ser definida como una porción del cuadro fuente 306, típicamente dentro de la región de cuadro en bruto 310, en la cual se ejecuta el procesamiento para una operación de procesamiento de imagen particular. De acuerdo con modalidades de la presente técnica, esta región activa 312 puede ser la misma o puede ser diferente para diferentes operaciones de procesamiento de imagen.
De acuerdo con aspectos de la presente técnica, la lógica de etapa inicial ISP 80 solamente recibe el cuadro en bruto 310. Por lo tanto, para los propósitos del presente análisis, el tamaño de cuadro global para la lógica de procesamiento de etapa inicial ISP 80 se puede asumir como el tamaño de cuadro en bruto, conforme a lo determinado por el ancho 314 y el alto 316. En algunas modalidades, el desplazamiento de los límites del cuadro de sensor 308 al cuadro en bruto 310 se puede determinar y/o mantener a través de la lógica de control 84. Por ejemplo, la lógica de control 84 puede incluir microprogramación cableada que puede determinar la región de cuadro en bruto 310 con base en los parámetros de entrada, tal como el desplazamiento-x 318 y el desplazamiento-y 320, que son especificadas con relación al cuadro de sensor 308. Además, en algunos casos, una unidad de procesamiento dentro de la lógica de etapa inicial ISP 80 o la lógica de conducto ISP 82 puede tener una región activa definida, de manera que los píxeles en el cuadro en bruto pero fuera de la región activa 312 no serán procesados, es decir, se dejarán sin cambios. Por ejemplo, una región activa 312 para una unidad de procesamiento particular que tiene un ancho 322 y un alto 324 puede ser definida con base en un desplazamiento-x 326 y desplazamiento-y 328 con relación al cuadro en bruto 310. Además, en la situación donde una región activa no está específicamente definida, una modalidad de la circuitería de procesamiento de imagen 32 puede asumir que la región activa 312 es la misma que el cuadro en bruto 310 (por ejemplo, desplazamiento-x 326 y desplazamiento-y 328 son iguales a 0) . Por lo tanto, para los propósitos de operaciones de procesamiento de imagen ejecutadas en los datos de imagen, las condiciones de límite pueden ser definidas con respecto a los límites del cuadro en bruto 310 o región activa 312. Adicionalmente, en algunas modalidades, una ventana (cuadro) puede ser especificada mediante la identificación de una ubicación de inicio y fin en la memoria, en lugar de una ubicación de inicio e información de tamaño de ventana .
En algunas modalidades, la unidad de procesamiento de etapa inicial ISP (FEProc) 80 también puede soportar el procesamiento de un cuadro de imagen por medio del traslape de tiras verticales, tal como se muestra en la figura 24. Por ejemplo, el procesamiento de imágenes en el presente ejemplo puede ocurrir en tres pasadas, con una tira izquierda (StripeO) una tira media (Stripel) y una tira derecha (Stripe2) . Esto puede permitir a la unidad de procesamiento de etapa inicial ISP 80 procesar una imagen más amplia en múltiples pasadas sin la necesidad de incrementar el tamaño de memoria intermedia de la línea. Esta técnica se puede referir como "zancada de direccionamiento" .
Cuando se procesa un cuadro de imagen mediante múltiples tiras verticales, el cuadro de entrada es leído con cierto traslape para permitir suficiente traslape del contexto de filtro de manera que haya poca o ninguna diferencia entre la lectura de la imagen en múltiples pasadas contra una sola pasada. Por ejemplo, en el presente ejemplo, StripeO con un ancho SrcWidthO y Stripel con un ancho SrcWidthl se traslapan parcialmente, conforme a lo indicado por la región de traslape 330. De manera similar, Stripel también se traslapa en el lado derecho con Stripe2 teniendo un ancho de SrcWidth2, conforme a lo indicado por la región de traslape 332. Aquí, la zancada total es la suma del ancho de cada tira (SrcWidthO, SrcWidthl, SrcWidth2) menos los anchos (334, 336) de las regiones de traslape 330 y 332. Cuando se escribe el cuadro de imagen en la memoria (por ejemplo, 108) , una región de salida activa es definida y solamente los datos dentro de la región activa de salida son escritos. Como se muestra en la figura 24, al realizar una escritura en memoria, cada tira es escrita con base en anchos que no se traslapan de ActiveDstO, ActiveDstl y ActiveDst2.
Tal como se analizó anteriormente, la circuitería de procesamiento de imagen 32 puede recibir datos de imagen directamente desde una interfaz de sensor (por ejemplo, 94) o puede recibir datos de imagen desde la memoria 108 (por ejemplo, memoria DMA) . Cuando datos de entrada son proporcionados desde la memoria, la circuitería de procesamiento de imagen 32 y la lógica de procesamiento de etapa inicial ISP 80 se pueden configurar para proporcionar permutación de bytes, en donde los datos de píxel de entrada provenientes de la memoria pueden ser permutados en bytes antes del procesamiento. En una modalidad, un código de permutación puede ser utilizado para indicar si palabras dobles adyacentes, palabras, medias palabras o bytes de datos de entrada provenientes de la memoria están permutados . Por ejemplo, haciendo referencia a la figura 25, la permutación de bytes se puede ejecutar en un conjunto de 16 bytes (bytes 0-15) de datos utilizando un código de permutación de cuatro bits.
Tal como se muestra, el código de permutación puede incluir cuatro bits, los cuales se pueden referir como bit3, bit2, bitl y bitO de izquierda a derecha. Cuando todos los bits son puestos a 0, tal como se muestra por el número de referencia 338, no se ejecuta permutación de bytes alguna. Cuando el bit3 es puesto a 1, tal como se muestra mediante el número de referencia 340, palabras dobles (por ejemplo, 8 bytes) son permutadas. Por ejemplo, tal como se muestra en la figura 25, la doble palabra representada por los bytes 0-7 es permutada con la doble palabra representada por los bytes 8-15. Si el bit2 es puesto a 1, tal como lo muestra el número de referencia 342, se ejecuta la permutación de palabra (por ejemplo, 4 bytes) . En el ejemplo ilustrado, esto puede tener como resultado que la palabra representada por los bytes 8-11 sea permutada con la palabra representada por los bytes 12-15, y la palabra representada por los bytes 0-3 sea permutada con la palabra representada por los bytes 4-7. De manera similar, si el bitl es puesto a 1, tal como lo muestra el número de referencia 344, entonces se ejecuta la permutación de la media palabra (por ejemplo, 2 bytes) (por ejemplo, bytes 0-1 permutados con los bytes 2-3, etcétera) y si el bitO es puesto a 1, tal como lo muestra el número de referencia 346, entonces se ejecuta la permutación de bytes.
En la presente modalidad, la permutación se puede ejecutar mediante la evaluación de los bits 3, 2, 1 y 0 del código de permutación en una manera ordenada. Por ejemplo, si los bits 3 y 2 son puestos a un valor de 1, entonces primero se ejecuta una permutación de doble palabra (bit3) , seguido por la permutación de palabra (bit2) . Por lo tanto, tal como se muestra en la figura 25, cuando el código de permutación es puesto a "1111", el resultado final es que los datos de entrada sean permutados de formato Little-Endian a formato Big-Endian .
A continuación, diversos formatos de memoria para los datos de píxel de imagen que pueden ser soportados por la circuitería de procesamiento de imagen 32 para datos de imagen en bruto (por e emplo, datos RGB Bayer) , datos de color RGB, y YUV (datos de luminancia/crominancia YCC) se analizan con mayor detalle de acuerdo con algunas modalidades divulgadas. Primero, se analizan formatos para píxeles de imagen en bruto (por ejemplo, datos Bayer antes de la interpolación cromática) en un cuadro de destino/fuente que puede ser soportado por modalidades de la circuitería de procesamiento de imagen 32. Tal como se mencionó, algunas modalidades pueden soportar procesamiento de píxeles de imagen a una precisión de 8, 10, 12, 14 y 16 bits. En el contexto de los datos de imagen en bruto, formatos de píxel en bruto de 8, 10, 12, 14 y 16 bits se pueden referir aquí como formatos RAW8 , RA 10, RA 12, RAW14 y RA 16, respectivamente. Ejemplos que muestran la manera en que cada uno de los formatos RAW8 , RA 10, RAW12, RAW14 y RAW16 se pueden almacenar en la memoria se muestran gráficamente en forma desempacada en la figura 26. Para formatos de imagen en bruto que tienen una precisión de bit mayor que 8 bits (y que no son un múltiplo de 8 bits) , los datos de píxel también se pueden almacenar en formatos empacados. Por ejemplo, la figura 27 muestra un ejemplo de la manera en que los píxeles de imagen RAW10 pueden ser almacenados en memoria. De manera similar, las figuras 28 y 29 ilustran ejemplos a través de los cuales los píxeles de imagen RA 12 y RAW14 pueden ser almacenados en memoria. Tal como se analizará con mayor detalle a continuación, cuando los datos de imagen están siendo escritos en/leídos desde la memoria, un registro de control asociado con la interfaz de sensor 94 puede definir el formato de píxel fuente/destino, ya sea que el píxel esté en un formato empacado o desempacado, formato de direccionamiento (por ejemplo, lineal o en mosaico) y el código de permutación. Por lo tanto, la manera en la cual los datos de píxel son leídos e interpretados por la circuitería de procesamiento ISP 32 puede depender del formato del píxel.
La circuitería de procesamiento de señal de imagen (ISP) 32 también puede soportar ciertos formatos de píxeles de color RGB en el cuadro fuente/destino de interfaz del sensor (por ejemplo, 310) . Por ejemplo, los cuadros de imagen RGB pueden ser recibidos desde la interfaz de sensor (por ejemplo, en modalidades donde la interfaz de sensor incluye lógica de interpolación cromática en tablero) y pueden ser guardados en la memoria 108. En una modalidad, la lógica de procesamiento de etapa inicial ISP 80 (FEProc) puede derivar el procesamiento de estadísticas y píxel cuando se están recibiendo cuadros RGB. A manera de ejemplo solamente, la circuitería de procesamiento de imagen 32 puede soportar los siguientes formatos de píxel RGB: RBG-565 y RGB-888. Un ejemplo de la manera en que los datos de píxel RGB-565 se pueden almacenar en memoria se muestra en la figura 30. Tal como se ilustra, el formato RGB-565 puede proporcionar un plano de un componente de color rojo de 5 bits, componente de color verde de 6 bits, y componente de color azul de 5 bits intercalados en el orden RGB. Por lo tanto, el total de 16 bits se puede utilizar para representar un píxel RGB-565 (por ejemplo, {R0, G0, B0} o {Rl, Gl, Bl}).
Un formato RGB-888, tal como se muestra en la figura 31, puede incluir un plano de componentes de color rojo, verde y azul de 8 bits intercalados en orden RGB. En una modalidad, la circuitería ISP 32 también puede soportar un formato RGB-666, el cual generalmente proporciona un plano de componentes de color rojo, verde y azul de 6 bits intercalados en orden RGB. En dicha modalidad, cuando se selecciona un formato RGB-666, los datos de píxel RGB-666 pueden ser almacenados en memoria utilizando el formato RGB-888 que se muestra en la figura 31, pero con cada píxel dejándose justificado y los dos bits menos significativos (LSB) puestos como cero.
En algunas modalidades, la circuitería ISP 32 también puede soportar formatos de píxel RGB que permiten que los píxeles tengan un rango extendido y precisión de valores de punto flotante. Por ejemplo, en una modalidad, la circuitería ISP 32 puede soportar el formato de píxel RGB que se muestra en la figura 32, en donde un componente de color rojo (R0) , verde (G0) , y azul (B0) es expresado como un valor de 8 bits, con un exponente compartido de 8 bits (E0) . Por lo tanto, en dicha modalidad, los valores reales de rojo (R' ) , verde (G' ) y azul (?') definidos por R0 , G0 , B0 y E0 se pueden expresar como : R' = RO [7 : 0] *2??0 [7 : 0] G' = G0 [7 : 0] *2AE0 [7 : 0] B' = B0 [7 : 0] *2"E0 [7 : 0] Este formato de píxel se puede referir como el formato RGBE, el cual en algunas ocasiones es conocido como el formato de píxel de imagen de Radiancia.
Las figuras 33 y 34 ilustran formatos de píxel RGB adicionales que pueden ser soportados por la circuitería ISP 32. Particularmente, la figura 33 muestra un formato de píxel que puede almacenar componentes rojos, verdes y azules de 9 bits con un exponente compartido de 5 bits. Por ejemplo, los ocho bits superiores [8:1] de cada píxel rojo, verde y azul son almacenados en bytes respectivos en la memoria. Se utiliza un byte adicional para almacenar el exponente de 5 bits (por ejemplo, E0[4:0]) y el bit menos significativo [0] de cada píxel rojo, verde y azul. Por lo tanto, en dicha modalidad, los valores reales de rojo (R' ) , verde (G' ) y azul (?') definidos por R0 , G0 , BO y EO se pueden expresar como: R' = R0 [8 : 0] *2~E0 [4 : 0] G' = G0 [8 : 0] *2^E0 [4 : 0] B' = B0 [8 : 0] *2"E0 [4 : 0] Además, el formato de píxel ilustrado en la figura 33 también es flexible ya que puede ser compatible con el formato RGB-888 que se muestra en la figura 31. Por ejemplo, en algunas modalidades, la circuitería de procesamiento ISP 32 puede procesar los valores RGB completos con el componente exponencial, o también puede procesar solamente la porción superior de 8 bits [7:1] de cada componente de color RGB en una manera similar al formato RGB-888.
La figura 34 muestra un formato de píxel que puede almacenar componentes rojos, verdes y azules de 10 bits con un exponente compartido de 2 bits. Por ejemplo, los 8 bits superiores [9:2] de cada píxel rojo, verde y azul son almacenados en bytes respectivos en la memoria. Se utiliza un byte adicional para almacenar el exponente de 2 bits (por ejemplo, EO [1:0]) y los dos bits menos significativos [1:0] de cada píxel rojo, verde y azul. Por lo tanto, en dicha modalidad, los valores reales rojo (R' ) , verde (G' ) y azul (B' ) definidos por R0 , G0, B0 y EO se pueden expresar como: R' = R0 [9 : 0] *2^E0 [1 : 0] G' = G0 [9 : 0] *2AE0 [1 : 0] B' = B0 [9:0] *2AE0 [1:0] Adicionalmente , al igual que el formato de píxel mostrado en la figura 33, el formato de píxel ilustrado en la figura 34 también es flexible ya que puede ser compatible con el formato RGB-888 que se muestra en la figura 31. Por ejemplo, en algunas modalidades, la circuitería de procesamiento ISP 32 puede procesar los valores RGB completos con el componente exponencial, o también puede procesar solamente la porción superior de 8 bits (por ejemplo, [9:2]) de cada componente de color RGB en una manera similar al formato RGB-888.
La circuitería ISP 32 además también puede soportar ciertos formatos de pixeles de luminancia y crominancia YCbCr (YUV) en el cuadro fuente/destino de la interfaz del sensor (por ejemplo, 310) . Por ejemplo, cuadros de imagen YCbCr pueden ser recibidos desde la interfaz del sensor (por ejemplo, en modalidades donde la interfaz del sensor incluye lógica de interpolación cromática en tablero y lógica configurada para convertir datos de imagen RGB en un espacio de color YCC) y pueden ser guardados en la memoria 108. En una modalidad, la lógica de procesamiento de etapa inicial ISP 80 puede derivar el procesamiento de pixel y estadística cuando cuadros YCbCr están siendo recibidos. A manera de ejemplo solamente, circuitería de procesamiento de imagen 32 puede soportar los siguientes formatos de pixel YCbCr: plano YCbCr-4:2:0 8, 2; y plano YCbCr-4:2:2 8, 1.
El formato de pixel del plano YCbCr-4:2:0, 2 puede proporcionar dos planos de imagen separados en memoria, uno para píxeles de luminancia (Y) y uno para píxeles de crominancia (Cb, Cr) , en donde el plano de crominancia intercala las muestras de píxeles Cb y Cr. De manera adicional, el plano de crominancia puede ser submuestreado por una mitad en las direcciones horizontal (x) y vertical (y) . Un ejemplo que muestra la manera en que los datos del plano YCbCr-4:2:0, 2 pueden ser almacenados en la memoria se muestra en la figura 35, la cual ilustra un plano de luminancia 347 para almacenar las muestras de luminancia (Y) y un plano de crominancia 348 para almacenar muestras de crominancia (Cb, Cr) . Un formato del plano YCbCr-4:2:2 8, 1, el cual se muestra en la figura 36, puede incluir un plano de imagen de muestras de píxel de luminancia (Y) y crominancia (Cb, Cr) intercaladas, con las muestras de crominancia siendo submuestreadas por una mitad en las direcciones horizontal (x) y vertical (y) . En alguna modalidad, la circuitería ISP 32 también puede soportar formatos de píxel YCbCr de 10 bits guardando las muestras de píxel en la memoria utilizando el formato de 8 bits antes descrito con redondeo (por ejemplo, los dos bits menos significativos de los datos de 10 bits son redondeados) . Además, tal como se apreciará, valores YC1C2 también pueden ser almacenados utilizando cualquiera de los formatos de píxel RGB analizados anteriormente en las figuras 30-34, en donde cada uno de los componentes Y, Cl y C2 son almacenados en una manera análoga al componente R, G y B.
Haciendo referencia nuevamente a la lógica de procesamiento de etapa inicial ISP 80 que se muestra en la figura 10, se proporcionan diversos canales de lectura y escritura para la memoria 108. En una modalidad, los canales de lectura/escritura pueden compartir un enlace de datos común, el cual puede ser proporcionado utilizando arquitectura avanzada de enlace de microcontrolador, tal como un enlace de Interfaz Extensible Avanzada (AXI) o cualquier otro tipo conveniente de enlace (AHB, ASB, APB, ATB, etcétera) . Dependiendo de la información de cuadro de imagen (por ejemplo, formato de píxel, formato de dirección, método de empaque) la cual, tal como se analizó anteriormente, se puede determinar a través de un registro de control, un bloque de generación de dirección, el cual puede ser implementado como parte de la lógica de control 84, puede ser configurado para proporcionar información de dirección y tamaño de ráfaga para la interfaz de enlace. A manera de ejemplo, el cálculo de la dirección puede depender de varios parámetros, tal como si los datos de píxel están empacados o desempacados, el formato de datos de píxel (por ejemplo, formatos RAW8, RAW10, RAW12, RA 14, RAW16, RGB o YCbCr/YUV) , si se utiliza el formato de direccionamiento lineal o en mosaico, compensaciones x y y de los datos de cuadro de imagen con relación al arreglo de memoria, así como el ancho, alto y zancada del cuadro. Parámetros adicionales que pueden ser utilizados en direcciones de píxel de cálculo pueden incluir valores de unidad de píxel mínima (MPU) , máscaras de compensación, un valor de byte por MPU (BPPU) y un valor Log2 de MPU (L2MPU) . La tabla 4, la cual se muestra a continuación, ilustra los parámetros antes mencionados para los formatos de píxel empacados y desempacados, de acuerdo con una modalidad.
TABLA 4 Parámetros de cálculo de dirección de pixel (MPU, L2MPU, BPPU) Tal como se entenderá, las configuraciones MPU y BPPU permiten que la circuitería ISP 32 valore el número de píxeles que necesitan ser leídos para leer un pixel, incluso si no se necesitan todos los datos leídos. Es decir, las configuraciones MPU y BPPU pueden permitir que la circuitería ISP 32 lea los formatos de datos de pixel que están alineados con (por ejemplo, un múltiplo de 8 bits (1 byte) es utilizado para almacenar un valor de pixel) y desalineados con el byte de memoria (por ejemplo, valores de píxel son almacenados utilizando menos o más de un múltiplo de 8 bits (1 byte) , es decir, RAW10, RA 12, etcétera).
Haciendo referencia a la figura 37 se ilustra un ejemplo que muestra la ubicación de un cuadro de imagen 350 almacenado en la memoria bajo direccionamiento lineal, en donde cada bloque representa 64 bytes (tal como se analizó anteriormente en la figura 21) . En una modalidad, el siguiente pseudo-código ilustra un proceso que puede ser implementado por la lógica de control para identificar un bloque de inicio y ancho de bloque del cuadro almacenado en el direccionamiento lineal: BlockWidth = LastBlockX - BlockOffsetX + 1 ; en donde BlockOffsetX = (((OffsetX » L2MPU) * BPPU ) » 6) LastBlockX = ((((OffsetX + Width - 1) » L2MPU) * BPPU + BPPU - 1) » 6) BlockStart = OffsetY * Stride + BlockOffsetX en donde Stride representa las zancadas de cuadro en bytes y es un múltiplo de 64. Por ejemplo, en la figura 37, el SrcStride y DstStride en 4 , lo que significa 4 bloques de 64 bytes. Haciendo referencia a la tabla 4 anterior, los valores para L2MPU y BPPU pueden depender del formato de los pixeles en el cuadro 350. Tal como se muestra, una vez que se conoce BlockOffsetX, se puede determinar BlockStart. BlockWidth posteriormente se puede determinar utilizando BlockOffsetX y LastBlockX, el cual puede ser determinado utilizando los valores de L2MPU y BPPU correspondientes al formato de píxel del cuadro 350.
Un ejemplo similar bajo direccionamiento en mosaico se muestra en la figura 38, en donde el cuadro de imagen fuente, referido aquí por el número de referencia 352, es almacenado en memoria y traslapa una porción de Tile 0, Tile 1, Tile n y Tile n+1. En una modalidad, el siguiente pseudo-código ilustra un proceso que puede ser implementado por la lógica de control para identificar un bloque de inicio y un ancho de bloque del cuadro almacenado en el direccionamiento en mosaico.
BlockWidth = LastBlockX - BlockOffsetX + 1 ; en donde BlockOffsetX = (((OffsetX » L2MPU) * BPPU ) » 6) LastBlockX = ((((OffsetX + Width - 1) » L2MPU) * BPPU + BPPU - 1) » 6) BlockStart = ((OffsetY » 4) * (Stride » 6) + (BlockOffsetX » 2) * 64 + OffsetY[3:0] * 4 + (BlockOffsetX[ 1 :0]) En el cálculo antes mostrado, la expresión " (OffsetY>>4 ) * (Stride>>6 ) " puede representar el número de bloques para poner en mosaico la fila en la cual está ubicado el cuadro de imagen en la memoria. La expresión " (BlockOffsetX>>2 ) *64" puede representar el número de bloques que el cuadro de imagen almacenado está desplazado en la dirección x. La expresión "OffsetY [3 : 0*4] " , puede representar el número de bloques para llegar a una fila dentro de un mosaico en el cual está ubicada la dirección de inicio del cuadro de imagen. Además, la expresión "BlockOffsetX [1 : 0] " puede representar el número de bloques para llegar a un desplazamiento x dentro un mosaico correspondiente a la dirección de inicio del cuadro de imagen. Adicionalmente , en la modalidad ilustrada en la figura 38, el número de bloques para cada mosaico (BlocksPerTile) puede ser 64 bloques, y el número de bytes por bloque (BytesPerBlock) puede ser de 64 bytes .
Tal como se mostró anteriormente en la tabla 4, para los pixeles almacenados en los formatos empacados RAWlO, RAW12 y RAW14, cuatro pixeles constituyen una unidad de píxel mínima (MPU) de cinco, seis o siete bytes (BPPU) , respectivamente. Por ejemplo, haciendo referencia al ejemplo de formato de píxel RAWlO que se muestra en la figura 27, una MPU de cuatro pixeles P0-P3 incluye 5 bytes, en donde los 8 bits superiores de cada uno de los pixeles P0-P3 están almacenados en cuatro bytes respectivos, y los 2 bytes inferiores de cada uno de los pixeles están almacenados en los bits 0-7 de la dirección Olh de 32 bits. De manera similar, haciendo referencia nuevamente a la figura 28, una MPU de cuatro píxeles P0-P3 utilizando el formato RA 12 incluye 6 bytes, con los 4 bits inferiores de los píxeles PO y Pl siendo almacenados en el byte correspondiente a los bits 16-23 de la dirección OOh y los 4 bits inferiores de los píxeles P2 y P3 siendo almacenados en el byte correspondiente a los bits 8-15 de la dirección Olh. La figura 29 muestra una MPU de cuatro píxeles P0-P3 utilizando el formato RAW14 como incluyendo 7 bytes, con 4 bytes para almacenar los 8 bits superiores de cada píxel de la MPU y 3 bytes para almacenar los 6 bits inferiores de cada píxel de la MPU.
Utilizando estos formatos de píxel, es posible al final de una línea de cuadro tener una MPU parcial donde menos de cuatro píxeles de la MPU son utilizados (por ejemplo, cuando el módulo de ancho de línea cuatro es no cero) . Cuando se lee una MPU parcial, se pueden ignorar los píxeles no utilizados. De manera similar, cuando se escribe una MPU parcial a un cuadro de destino, se pueden escribir los píxeles no utilizados con un valor de cero. Además, en algunos casos, la última MPU de una línea de cuadro puede no alinearse a un límite de bloque de 64 bytes. En una modalidad, los bytes después de la última MPU y hasta el final del último bloque de 64 bytes no son escritos.
De acuerdo con modalidades de la presente divulgación, la circuitería de procesamiento ISP 32 también se puede configurar para proporcionar un manejo de desbordamiento. Por ejemplo, puede ocurrir una condición de desbordamiento (también referida como "sobrecarga") en algunas situaciones donde la lógica de procesamiento de etapa inicial ISP 80 recibe contrapresión desde sus propias unidades de procesamiento internas, desde las unidades de procesamiento corriente abajo (por ejemplo, el conducto ISP 82 y/o la lógica de procesamiento de etapa final ISP 120) o desde una memoria de destino (por ejemplo, en donde se van a escribir los datos de imagen) . Las condiciones de desbordamiento pueden ocurrir cuando datos de píxel están siendo leídos (por ejemplo, ya sea desde la interfaz de sensor o la memoria) más rápido de lo que uno o más bloques de procesamiento está en condiciones de procesar los datos, o más rápido de lo que los datos pueden ser escritos en un destino (por ejemplo, memoria 108) .
Tal como se analiza con mayor detalle a continuación, la lectura y escritura en la memoria puede contribuir a las condiciones de desbordamiento. No obstante, debido a que los datos de entrada son almacenados, en el caso de una condición de desbordamiento, la circuitería ISP 32 simplemente puede perder la lectura de los datos de entrada hasta que se recupera la condición de desbordamiento. No obstante, cuando los datos de imagen están siendo leídos directamente desde un sensor de imagen, los datos "vivos" generalmente no pueden ser perdidos, ya que el sensor de imagen generalmente está adquiriendo los datos de imagen en tiempo real. Por ejemplo, el sensor de imagen (por ejemplo, 90) puede operar de acuerdo con una señal de temporización con base en su propio reloj interno y se puede configurar para emitir cuadros de imagen a una cierta velocidad de cuadro, tal como 15 o 30 cuadros por segundo (fps) . Las entradas del sensor a la circuitería ISP 32 y la memoria 108 entonces pueden incluir filas de entrada que pueden almacenar en memoria intermedia los datos de imagen de entrada antes de ser procesados (por la circuitería ISP 32) o escritos en la memoria (por ejemplo, 108) . Por consiguiente, si datos de imagen están siendo recibidos en la fila de entrada más rápido de lo que pueden ser leídos de la fila y procesados o almacenados (por ejemplo, escritos en la memoria), puede ocurrir una condición de desbordamiento. Es decir, si las memorias intermedias/filas están llenas, píxeles de entrada adicionales no pueden ser almacenados en memoria intermedia y, dependiendo de la técnica de manejo de desbordamiento implementada, pueden ser tirados.
La figura 39 muestra un diagrama en bloques de la circuitería de procesamiento ISP 32, y se enfoca en las características de la lógica de control 84 que pueden permitir el manejo de desbordamiento de acuerdo con una modalidad. Tal como se ilustra, los datos de imagen asociados con SensorO 90a y Sensorl 90b pueden ser leídos desde la memoria 108 (por medio de las interfaces 174 y 176, respectivamente) a la lógica de procesamiento de etapa inicial ISP 80 (FEProc) , o pueden ser proporcionados a la lógica de procesamiento de etapa inicial ISP 80 directamente desde las interfaces de sensor respectivas. En el último caso, los datos de píxel de entrada provenientes de los sensores de imagen 90a y 90b pueden ser pasados a las filas de entrada 400 y 402, respectivamente, antes de ser enviados a la lógica de procesamiento de etapa inicial ISP 80.
Cuando ocurre una condición de desbordamiento, los bloques de procesamiento (por ejemplo, bloques 80, 82 o 120) o la memoria (por ejemplo, 108) en los cuales ocurrió el desbordamiento pueden proporcionar una señal (tal como lo indican las señales 405, 407 y 408) para establecer un bit en un registro de solicitud de interrupción (IRQ) 404. En la presente modalidad, el registro IRQ 404 puede ser implementado como parte de la lógica de control 84. De manera adicional, registros IRQ separados 404 pueden ser implementados para cada uno de datos de imagen de SensorO y datos de imagen de Sensorl . Con base en el valor almacenado en el registro IRQ 404, la lógica de control 84 puede determinar cuáles unidades lógicas dentro de los bloques de procesamiento ISP 80, 82, 120 o la memoria 108 generaron la condición de desbordamiento. Las unidades lógicas se pueden referir como "unidades de destino" ya que pueden constituir destinos a los cuales se envían los datos de píxel. Con base en las condiciones de desbordamiento, la lógica de control 84 también puede (por ejemplo, a través de manejo de microprogramación cableada/software) regular cuáles cuadros se tiran (por ejemplo, ya sea no escritos en memoria o no emitidos a la pantalla para visualización) .
Una vez que se detecta una condición de desbordamiento, la manera en la cual se lleva a cabo el manejo del desbordamiento puede depender de si la etapa inicial ISP está leyendo datos de píxel desde la memoria 108 o desde las filas de entrada del sensor de imagen (por ejemplo, memorias intermedias) 400, 402, las cuales pueden ser filas primero en entrar primero en salir (FIFO) en una modalidad. En una modalidad, cuando los datos de píxel de entrada son leídos desde la memoria 108 a través de, por ejemplo, una interfaz DMA asociada (por ejemplo, 174 o 176) , la etapa inicial ISP perderá la lectura de los datos de píxel en caso de recibir contrapresión como un resultado de que se esté detectando una condición de desbordamiento (por ejemplo, a través de la lógica de control 84 utilizando el registro IRQ 404) desde cualesquiera bloques de destino corriente abajo que pueden incluir el conducto ISP 82, la lógica de procesamiento de etapa final ISP 120, o la memoria 108 en casos donde la salida de la lógica de etapa inicial ISP 80 es descrita en la memoria 108. En este escenario, la lógica de control 84 puede prevenir el desbordamiento deteniendo la lectura de los datos de píxel de la memoria 108 hasta que se recupera la condición de desbordamiento. Por ejemplo, la recuperación del desbordamiento puede ser señalizada cuando una unidad corriente abajo que ocasiona la condición de desbordamiento establece un bit correspondiente en el registro IRQ 404 indicando que ya no está ocurriendo el desbordamiento. Una modalidad de este proceso generalmente se ilustra mediante los pasos 412-420 del método 410 de la figura 40.
Aunque las condiciones de desbordamiento generalmente pueden ser monitoreadas en las filas de entrada del sensor, se debiera entender que están presentes muchas filas adicionales entre las unidades de procesamiento del subsistema ISP 32 (por ejemplo, incluyendo unidades internas de la lógica de etapa inicial ISP 80, el conducto ISP 82, así como la lógica de etapa final ISP 120) . Adicionalmente, las diversas unidades internas del subsistema ISP 32 también pueden incluir memorias intermedias de línea, las cuales también pueden funcionar como filas. Por lo tanto, todas las filas y memorias intermedias de línea del subsistema ISP 32 pueden proporcionar almacenamiento en memoria intermedia. Por consiguiente, cuando el último bloque de procesamiento en una cadena particular de bloques de procesamiento está lleno (por ejemplo, sus memorias intermedias de línea y cualesquiera filas intermedias están llenas) , se puede aplicar una contrapresión al bloque de procesamiento precedente (por ejemplo, corriente arriba) y así sucesivamente, de manera que la contrapresión se propaga hacia arriba a través de la cadena lógica hasta que alcanza la interfaz de sensor, en donde se pueden monitorear las condiciones de desbordamiento. Por lo tanto, cuando ocurre un desbordamiento en la interfaz del sensor, esto puede significar que todas las filas corriente abajo y memorias intermedias de línea están llenas.
Tal como se muestra en la figura 40, el método 410 comienza en el bloque 412, en el cual los datos de píxel de una corriente son leídos desde la memoria a la unidad de procesamiento de etapa inicial ISP 80. La lógica de decisión 414 entonces determina si está presente una condición de desbordamiento. Tal como se analizó anteriormente, esto se puede valorar determinando el estado de los bits en los registros IRQ 404. Si no se detecta condición de desbordamiento alguna, entonces el método 410 retorna al paso 412 y continua leyendo píxeles del cuadro actual. Si una condición de desbordamiento es detectada por la lógica de decisión 414, el método 410 detiene la lectura de los píxeles del cuadro actual de la memoria, tal como se muestra en el bloque 416. A continuación, en la lógica de decisión 418, se determina si la condición de desbordamiento se ha recuperado. Si la condición de desbordamiento aún persiste, el método 410 espera en la lógica de decisión 418 hasta que se recupera la condición de desbordamiento. Si la lógica de decisión 418 indica que la condición de desbordamiento se ha recuperado, entonces el método 410 avanza al bloque 420 y reanuda la lectura de los datos de píxel para el cuadro actual de la memoria .
Cuando ocurre una condición de desbordamiento mientras los datos de píxel de entrada están siendo leídos de las interfaces del sensor, las interrupciones pueden indicar cuáles unidades corriente abajo (por ejemplo, bloques de procesamiento o memoria de destino) generaron el desbordamiento. En una modalidad, el manejo del desbordamiento puede ser proporcionado con base en dos escenarios. En un primer escenario, la condición de desbordamiento ocurre durante un cuadro de imagen, pero se recupera antes del inicio del cuadro de imagen posterior. En este caso, los píxeles de entrada del sensor de imagen son tirados hasta que se recupera la condición de desbordamiento y el espacio se vuelve disponible en la fila de entrada correspondiente al sensor de imagen. La lógica de control 84 puede proporcionar un contador 406 que puede mantener un registro del número de pixeles tirados y/o cuadros tirados. Cuando se recupera la condición de desbordamiento, los pixeles tirados pueden ser reemplazados con valores de píxel no definidos (por ejemplo, todos 1 (por ejemplo, 11111111111111 para un valor de píxel de 14 bits) , todos 0, o un valor programado en un registro de datos que establece cuáles son los valores de píxel no definidos) , y se puede reanudar el procesamiento corriente abajo. En una modalidad adicional, los pixeles tirados pueden ser reemplazados con un píxel previo de no desbordamiento (por ejemplo, el último píxel "bueno" leído en la memoria intermedia de entrada) . Esto asegura que un número correcto de pixeles (por ejemplo, un número de pixeles correspondientes al número de pixeles esperados en un cuadro completo) sea enviado a la lógica de procesamiento de etapa inicial ISP 80, permitiendo así que la lógica de procesamiento de etapa inicial ISP 80 emita el número correcto de pixeles para el cuadro que se estaba leyendo de la fila de entrada del sensor cuando ocurrió el desbordamiento .
Aunque el número correcto de pixeles puede ser emitido por la etapa inicial ISP bajo este primer escenario, dependiendo del número de píxeles que fueron tirados y reemplazados durante la condición de desbordamiento, el manejo de software (por ejemplo, microprogramación cableada) , el cual puede ser implementado como parte de la lógica de control 84, puede elegir tirar (por ejemplo, excluir) el cuadro para que no sea enviado a la pantalla y/o escrito en la memoria. Dicha determinación se puede basar, por ejemplo, en el valor del contador de píxeles tirados 406 en comparación con un valor de umbral aceptable de píxeles tirados. Por ejemplo, si ocurre una condición de desbordamiento solo brevemente durante el cuadro de manera que solo una cantidad relativamente pequeña de píxeles es tirada (por ejemplo, y reemplazada con valores indefinidos o ficticios; por ejemplo 10-20 píxeles o menos), entonces la lógica de control 84 puede elegir desplegar y/o almacenar esta imagen a pesar del número pequeño de píxeles tirados, aun cuando la presencia de los píxeles de reemplazo puede aparecer de manera muy breve como un artefacto menor en la imagen resultante. Sin embargo, debido al número pequeño de píxeles de reemplazo, dicho artefacto generalmente puede pasar desapercibido o marginalmente percibido por un usuario. Es decir, la presencia de cualquiera de estos artefactos debido a los píxeles indefinidos a partir de la breve condición de desbordamiento puede no degradar significativamente la calidad estética de la imagen (por ejemplo, cualquier degradación de este tipo es mínima o insignificante al ojo humano) .
En un segundo escenario, la condición de desbordamiento puede permanecer presente al inicio del siguiente cuadro de imagen. En este caso, los pixeles del cuadro actual también son tirados y contados tal como en el primer escenario antes descrito. Sin embargo, si una condición de desbordamiento sigue estando presente al momento de detectar un borde creciente VSYNC (por ejemplo, indicando el inicio de un cuadro posterior) , la lógica de procesamiento de etapa inicial ISP 80 se puede configurar para detener el siguiente cuadro, tirando así todo el siguiente cuadro. En este escenario, el siguiente cuadro y los cuadros posteriores se seguirán tirando hasta que se recupere el desbordamiento. Una vez que se recupera el desbordamiento, el cuadro previamente actual (por ejemplo, el cuadro que estaba siendo leído cuando se detectó por primera vez el desbordamiento) puede reemplazar sus pixeles tirados con los valores de píxel indefinidos, permitiendo así que la lógica de etapa inicial ISP 80 emita el número correcto de pixeles para ese cuadro. Posteriormente, se puede reanudar el procesamiento corriente abajo. En lo que respecta a los cuadros tirados, la lógica de control 84 además puede incluir un contador que cuente el número de cuadros tirados. Estos datos pueden ser utilizados para ajustar las temporizaciones para la sincronización de audio-video. Por ejemplo, para video capturado a 30 fps, cada cuadro tiene una duración de aproximadamente 33 milisegundos . Por lo tanto, si tres cuadros son tirados debido al desbordamiento, entonces la lógica de control 84 se puede configurar para ajustar los parámetros de sincronización de audio-video para considerar la duración de aproximadamente 99 milisegundos (33 milisegundos por x 3 cuadros) atribuible a los cuadros tirados. Por ejemplo, para compensar el tiempo atribuible debido a los cuadros tirados, la lógica de control 84 puede controlar la salida de la imagen repitiendo uno o más cuadros previos .
En la figura 41 se ilustra una modalidad de un proceso 430 que muestra los escenarios antes analizados que pueden ocurrir cuando los datos de píxel de entrada están siendo leídos a partir de las interfaces del sensor. Tal como se muestra, el método 430 comienza en el bloque 432, en el cual los datos de píxel para un cuadro actual son leídos a partir del sensor a la unidad de procesamiento de etapa inicial ISP 80. La lógica de decisión 434 entonces determina si existe una condición de desbordamiento. Si no hay un desbordamiento, el método 430 continúa leyendo píxeles del cuadro actual (por ejemplo, regresa al bloque 432) . Si la lógica de decisión 434 determina que está presente una condición de desbordamiento, entonces el método 430 continua el bloque 436, donde se tira el siguiente píxel de entrada del cuadro actual. A continuación, la lógica de decisión 438 determina si el cuadro actual ha finalizado y el siguiente cuadro ha comenzado. Por ejemplo, en una modalidad, esto puede incluir, detectar un borde creciente en la señal VSYNC. Si el sensor aún está enviando el cuadro actual, el método 430 continua a la lógica de decisión 440, la cual determina si la condición de desbordamiento originalmente detectada en la lógica 434 sigue estando presente. Si la condición de desbordamiento no se ha recuperado, entonces el método 430 procede al bloque 442, en el cual se incrementa el contador de píxeles tirados (por ejemplo, para considerar el píxel de entrada tirado en el bloque 436) . El método entonces retorna al bloque 436 y continúa.
Si en la lógica de decisión 438 se detecta que el cuadro actual ha finalizado y que el sensor está enviando el siguiente cuadro (por ejemplo, se detectó un incremento VSYNC), entonces el método 430 procede al bloque 450, y todos los píxeles del siguiente cuadro, y los cuadros posteriores son tirados siempre y cuando permanezca la condición de desbordamiento (por ejemplo, mostrada por la lógica de decisión 452) . Tal como se analizó anteriormente, un contador separado puede rastrear el número de cuadros tirados, los cuales pueden ser utilizados para ajustar los parámetros de sincronización de audio-video. Si la lógica de decisión 452 indica que se ha recuperado la condición de desbordamiento, entonces los píxeles tirados del cuadro inicial en el cual primero ocurrió la condición de desbordamiento son reemplazados con un número de valores de píxel no definidos correspondientes al número de píxeles tirados de ese cuadro inicial, tal como lo indica el contador de píxeles tirados. Tal como se mencionó anteriormente, los valores de píxel indefinidos pueden ser todos 1, todos 0, un valor de reemplazo programado en un registro de datos, o puede asumir el valor de un píxel previo que fue leído antes de la condición de desbordamiento (por ejemplo, el último píxel leído antes que se detectara la condición de desbordamiento) . Por consiguiente, esto permite que el cuadro inicial sea procesado con el número correcto de píxeles y, en el bloque 446, puede continuar el procesamiento de imagen corriente abajo, lo cual puede incluir escribir el cuadro inicial en la memoria. Tal como se analizó también anteriormente, dependiendo del número de píxeles que fueron tirados en el cuadro, la lógica de control 84 puede ya sea elegir excluir o incluir el cuadro cuando emite datos de video (por ejemplo, si el número de pixeles tirados está por encima o por debajo de un umbral de pixeles tirados aceptables) . Tal como se apreciará, el manejo de desbordamiento puede ser ejecutado por separado para cada fila de entrada 400 y 402 del subsistema ISP 32.
Otra modalidad del manejo de desbordamiento que se puede implementar de acuerdo con la presente divulgación se muestra en la figura 42 por medio de un gráfico de flujo que muestra el método 460. Aquí, el manejo de desbordamiento para una condición de desbordamiento que ocurre durante un cuadro actual pero que se recupera antes del final de un cuadro actual es manejado de la misma manera que se mostró en la figura 41 y, por lo tanto, esos pasos han sido numerados con números de referencia similares 432-446. La diferencia entre el método 460 de la figura 42 y el método 430 de la figura 41 pertenece al manejo del desbordamiento cuando una condición de desbordamiento continúa en el siguiente cuadro. Por ejemplo, haciendo referencia a la lógica de decisión 438, cuando la condición de desbordamiento continua en el siguiente cuadro, en lugar de tirar el siguiente cuadro como en el método 430 de la figura 41, el método 460 implementa el bloque 462, en el cual se borra el contador de pixeles tirados, se borra la fila de entrada del sensor, y se envía una señal a la lógica de control 84 para que tire el cuadro actual parcial. Al borrar la fila de entrada del sensor y el contador de píxeles tirados, el método 460 se prepara para adquirir el siguiente cuadro (el cual ahora se convierte en el cuadro actual), regresando el método al bloque 432. Tal como se apreciará, los píxeles para este cuadro actual pueden ser leídos en la fila de entrada del sensor. Si la condición de desbordamiento se recupera antes que la fila de entrada se llene, entonces se reanuda el procesamiento corriente abajo. No obstante, si la condición de desbordamiento persiste, el método 460 continuará a partir del bloque 436 (por ejemplo, comienza a tirar píxeles hasta que el desbordamiento ya sea que se recupere o que inicie el siguiente cuadro) .
Tal como se mencionó anteriormente, el dispositivo electrónico 10 también puede permitir la captura de datos de audio (por ejemplo, a través de un dispositivo de captura de audio proporcionado como una de las estructuras de entrada 14) de manera concurrente con datos de imagen (por ejemplo, a través del dispositivo de generación de imágenes 30 que tiene sensores de imagen 90) . Por ejemplo, tal como se muestra mediante diagrama en la figura 43, datos de audio 470 y datos de imagen 472 pueden representar datos de video y audio capturados de manera concurrente por el dispositivo electrónico. Los datos de audio 470 pueden incluir muestras de audio 474 capturadas durante el tiempo (t) y, de manera similar, los datos de imagen 472 pueden representar una serie de cuadros de imagen capturados durante el tiempo t. Cada muestra de los datos de imagen 472, referida aquí por el número de referencia 476, puede representar un cuadro de imagen estática. Por lo tanto, cuando los cuadros de imagen estática son vistos en su sesión cronológica en tiempo (por ejemplo, un número particular de cuadros por segundo, tal como 15-30 cuadros por segundo) , un observador percibirá la apariencia de una imagen en movimiento, proporcionando así datos de video. Cuando los datos de audio 470 son adquiridos y representados como datos digitales, estos pueden ser almacenados como valores binarios que representan muestras (por ejemplo, 474) de la amplitud de la señal de audio en intervalos de tiempo iguales. Además, aunque se muestra en la figura 43 como teniendo divisiones discretas 474, se debiera apreciar que los datos de audio, en una implementación práctica, pueden tener una tasa de transferencia de muestra que sea lo suficientemente rápida de manera que el oído humano perciba los datos de audio 470 como sonido continuo.
Durante la reproducción de los datos de video 472, los datos de audio correspondientes 470 también pueden ser reproducidos, permitiendo así a un observador no solamente ver los datos de video de un evento capturado, sino también escuchar el sonido correspondiente al evento capturado. De manera ideal, los datos de video 472 y los datos dé audio 470 son reproducidos en una manera sincronizada. Por ejemplo, si la muestra de audio designada aquí como 474a ocurrió originalmente en el tiempo tA entonces, bajo condiciones de reproducción ideales, un cuadro de imagen originalmente capturado en el tiempo tA es emitido de manera concurrente con la muestra de audio 474a. No obstante, si no se logra la sincronización, el observador/oyente puede notar un retardo de tiempo o cambio entre los datos de audio y video. Por ejemplo, suponer que la muestra de audio 474a es emitida con un cuadro de imagen 476c originalmente capturado en el tiempo to/ el cual cronológicamente es anterior al tiempo tA. En este caso, los datos de audio 470 están "anticipados" a los datos de video 472, y el usuario puede experimentar un retardo entre escuchar la muestra de audio del tiempo tA y ver su muestra de video correspondiente esperada (cuadro de imagen 476a del tiempo tA) , el retardo es la diferencia entre los tiempos tA y t0) . De manera similar, suponer que la muestra de audio 474a es emitida con un cuadro de imagen 476b del tiempo tB, el cual cronológicamente es posterior al tiempo tA. En este último caso, los datos de audio 470 están "detrás" de los datos de video 472, y el usuario puede experimentar un retardo entre ver la muestra de video (476a) en el tiempo tA y escuchar su muestra de audio correspondiente del tiempo tA, el retardo es la diferencia entre los tiempos tA y tB) . Estos tipos de retardos en ocasiones se refieren como error de "sincronización de labios". Tal como se apreciará, estos últimos dos escenarios pueden afectar de manera negativa la experiencia del usuario. Para lograr una sincronización de audio-video, un sistema generalmente está configurado de manera que cualquier compensación para problemas de sincronización prioriza el audio sobre el video, por ejemplo, si está presente un problema de sincronización, los cuadros de imagen se pueden tirar o repetir sin alterar el audio.
En algunos sistemas convencionales, la sincronización de los datos de audio y video se realiza utilizando el inicio de las interrupciones de cuadro (por ejemplo, con base en la señal VSYNC) . Cuando ocurre dicha interrupción, indicando el inicio de un nuevo cuadro, un procesador puede ejecutar una rutina de servicio de interrupción para brindar servicio a la interrupción (por ejemplo, borrar bits) , y un sello de hora correspondiente al momento en que la interrupción recibió servicio por parte del procesador está asociado con ese cuadro. Tal como se apreciará, generalmente existe cierta latencia entre la solicitud de interrupción y el tiempo en el cual la interrupción recibió servicio por parte del procesador. Por lo tanto, un sello de hora que está asociado con un cuadro de imagen particular puede reflejar esta latencia, y por lo tanto puede no representar de manera real el tiempo preciso en el cual realmente inició el cuadro. De manera adicional, esta latencia puede ser variable dependiendo de la carga del procesador y el ancho de banda, lo cual puede complicar adicionalmente los problemas de sincronización de audio-video .
Tal como se analizó anteriormente, la lógica de etapa inicial ISP 80 puede operar dentro de su propio dominio de reloj y proporcionar una interfaz asincrona a la interfaz de sensor 94 para soportar sensores de diferentes tamaños y que tengan diferentes requerimientos de temporización. Para permitir la sincronización de datos de audio y video, la circuitería de procesamiento ISP 32 puede utilizar el reloj de etapa inicial ISP para proporcionar un contador que pueda ser utilizado para generar sellos de hora que puedan ser asociados con los cuadros de imagen capturados. Por ejemplo, haciendo referencia a la figura 44, cuatro registros incluyendo un registro de configuración de temporizador 490, un registro de código de tiempo 492, un registro de código de tiempo SensorO 494 y un registro de código de tiempo Sensorl 496, todos ellos pueden ser utilizados para proporcionar funciones de sello de hora en una modalidad con base, al menos parcialmente, en el reloj para la lógica de procesamiento de etapa inicial ISP 80. En una modalidad, los registros 490, 492, 494 y 496 pueden incluir registros de 32 bits .
El registro de configuración de tiempo 490 se puede configurar para proporcionar un valor, NClk, que pueda ser utilizado para proporcionar un conteo para la generación de códigos de sello de hora. En una modalidad, NClk puede ser un valor de cuatro bits que varíe de entre 0-15. Con base en NClk, un temporizador o contador que indique un código de hora actual puede ser incrementado por un valor de uno cada 2*NClk ciclos de reloj (con base en el dominio de reloj de etapa inicial ISP) . El código de tiempo actual puede ser almacenado en el registro de código de tiempo 492, permitiendo así un código de tiempo con 32 bits de resolución. El registro de código de tiempo 492 también puede ser restablecido por la lógica de control 84.
Haciendo referencia brevemente a la figura 10, para cada entrada de interfaz de sensor, SifO y Sifl, el registro de código de tiempo 492 puede ser muestreado cuando un borde creciente es detectado en la señal de sincronización vertical (VSYNC) (o si un borde decreciente es detectado dependiendo de cómo esté configurada la VSYNC) , indicando así el inicio de un nuevo cuadro (por ejemplo, al final de un intervalo de supresión vertical) . El código de tiempo correspondiente al borde creciente VSYNC puede ser almacenado en cualquiera del registro de código de tiempo 494 o 496 dependiendo del sensor (Sensor0 o Sensorl) desde el cual se proporciona el cuadro de imagen, proporcionando así un sello de hora que indica la hora a la cual comenzó la captura del cuadro actual . En algunas modalidades, la señal VSYNC del sensor puede tener un retardo programado o programable . Por ejemplo, si el primer píxel del cuadro está demorado por n ciclos de reloj , la lógica de control 84 se puede configurar para compensar este retardo, tal como proporcionando un desplazamiento en hardware o utilizando compensación de software/ microprogramación cableada. Por lo tanto, el sello de hora puede ser generado a partir del borde creciente VSYNC con un retardo programado añadido. En otra modalidad, el sello de hora correspondiente al inicio de un cuadro podría ser determinado utilizando el borde decreciente de la señal VSYNC con un retardo programable.
A medida que el cuadro actual está siendo procesado, la lógica de control 84 lee el sello de hora a partir del registro de código de tiempo del sensor (494 o 496) , y el sello de hora puede ser asociado con el cuadro de imagen de video como un parámetro en metadatos asociados con el cuadro de imagen. Esto se muestra de manera más clara en la figura 45, la cual proporciona una vista en diagrama de un cuadro de imagen 476 y sus metadatos asociados 498, los cuales incluyen el sello de hora 500 leído a partir del registro de código de tiempo apropiado (por ejemplo, registro 494 para SensorO o registro 496 para Sensorl) . En una modalidad, la lógica de control 84 entonces puede leer el sello de hora a partir del registro de código de tiempo cuando es disparado por un inicio de la interrupción de cuadro. Por lo tanto, cada cuadro de imagen capturado por la circuitería de procesamiento ISP 32 puede tener un sello de hora asociado con base en la señal VSY C. Circuitería de control o microprogramación cableada, la cual se puede implementar como parte de la lógica de control ISP 84 o parte de una unidad de control separada del dispositivo electrónico 10, puede utilizar los sellos de hora del cuadro de imagen para alinear o sincronizar un conjunto correspondiente de datos de audio, logrando así una sincronización de audio-video .
En algunas modalidades, el dispositivo 10 puede incluir un procesador de audio configurado para manejar el procesamiento de datos de audio (por ejemplo, datos de audio 470) . Por ejemplo, el procesador de audio puede ser una unidad de procesamiento autónoma (por ejemplo, parte de los procesadores 16) , o puede estar integrado con un procesador principal, o puede ser parte de un dispositivo de procesamiento de sistema-en-chip . En dichas modalidades, el procesador de audio y la circuitería de procesamiento de imagen 32, la cual puede ser controlada por un procesador (por ejemplo, parte de la lógica de control 84) separado del procesador de audio, puede operar con base en relojes independientes. Por ejemplo, los relojes podrían ser generados utilizando bucles de fase bloqueada (PLL) separados. Por lo tanto, para propósitos de sincronización de audio-video, el dispositivo 10 pudiera requerir correlacionar un sello de hora de imagen con un sello de hora de audio. En una modalidad, esta correlación se puede lograr utilizando un procesador principal del dispositivo 10 (por ejemplo, un CPU). Por ejemplo, el procesador principal puede sincronizar su propio reloj con aquél del procesador de audio y de la circuitería ISP 32 para determinar la diferencia entre los relojes respectivos del procesador de audio y la circuitería ISP 32. Esta diferencia, una vez conocida, puede ser utilizada para correlacionar sellos de hora de audio de los datos de audio (por ejemplo, 470) con sellos de hora de cuadro de imagen de los datos de imagen (por ejemplo, 472) .
En una modalidad, la lógica de control 84 también se puede configurar para manejar condiciones de envoltura, tal como en la situación en que se alcanza el valor máximo del código de tiempo de 32 bits, y en donde el siguiente incremento requeriría un bit adicional (por ejemplo, 33 bits) para proporcionar un valor preciso. Para proporcionar un ejemplo simplificado, este tipo de envoltura puede ocurrir cuando, en un contador de cuatro dígitos el valor 9999 es incrementado y se convierte en 0000 en lugar de 10000 debido a la limitación de cuatro dígitos. Aunque la lógica de control 84 puede tener la capacidad para restablecer el registro de código de tiempo 492, pudiera ser indeseable hacerlo cuando ocurre la condición de envoltura mientras una sesión de video se sigue capturando. Por lo tanto, en dichos casos, la lógica de control 84 puede incluir lógica, la cual puede ser implementada por software en una modalidad, configurada para manejar la condición de envoltura mediante la generación de sellos de hora de mayor precisión (por ejemplo, 64 bits) con base en los valores de registro de 32 bits. El software puede generar sellos de hora de mayor precisión, los cuales pueden ser escritos en los metadatos del cuadro de imagen hasta que se reestablece el registro de código de tiempo 492. En una modalidad, el software se puede configurar para detectar la envoltura y agregar la diferencia de tiempo que resulta de la condición de envoltura a un contador de resolución superior. Por ejemplo, en una modalidad, cuando se detecta una condición de envoltura para un contador de 32 bits, el software puede sumar el valor máximo del contador de 32 bits (para considerar la envoltura) con el valor de tiempo actual indicado por el contador de 32 bits y almacenar el resultado en un contador de mayor resolución (por ejemplo, mayor que 32 bits). En dichos casos, el resultado en el contador de alta resolución se puede escribir en la información de los metadatos de imagen hasta que se reestablece el contador de 32 bits.
La figura 46 muestra un método 510 que generalmente describe las técnicas de sincronización de audio-video antes analizadas. Tal como se muestra, el método 510 comienza en el paso 512, en donde los datos de píxel son recibidos desde un sensor de imagen (por ejemplo, ya sea SensorO o Sensorl) . A continuación, en la lógica de decisión 514 se toma una determinación respecto a si la señal VSY C indica un inicio de un nuevo cuadro. Si no se detecta un nuevo cuadro, el método 510 regresa al paso 512 y continúa recibiendo datos de píxel desde el cuadro de imagen actual. Si se detecta un nuevo cuadro en la lógica de decisión 514, entonces el método 510 continúa al paso 516, en el cual el registro de código de tiempo (por ejemplo, registro 492) es muestreado para obtener un valor de sello de hora correspondiente al borde creciente (o decreciente) de la señal VSYNC detectada en el paso 514. A continuación, en el paso 518, el valor de sello de hora es almacenado en el registro de código de tiempo (por ejemplo, registro 494 ó 496) correspondiente al sensor de imagen proporcionando los datos de píxel de entrada. Posteriormente, en el paso 520, el sello de hora es asociado con los metadatos del nuevo cuadro de imagen y, posteriormente, la información de sello de hora en los metadatos de cuadro de imagen puede ser utilizada para sincronización de audio-video. Por ejemplo, el dispositivo electrónico 10 se puede configurar para proporcionar sincronización de audio-video alineando los datos de video (utilizando los sellos de hora de cada cuadro individual) a los datos de audio correspondientes en una manera en que cualquier retardo entre la salida de audio y video correspondiente sea sustancialmente minimizada. Por ejemplo, tal como se analizó anteriormente, se puede utilizar un procesador principal del dispositivo 10 para determinar cómo correlacionar sellos de hora de audio con sellos de hora de video. En una modalidad, si los datos de audio están delante de los datos de video, los cuadros de imagen pueden ser tirados para permitir que el cuadro de imagen correcto "alcance" la corriente de datos de audio y, si los datos de audio están detrás de los datos de video, cuadros de imagen pueden ser repetidos para permitir que los datos de audio "alcancen" la corriente de video.
Continuando con las figuras 47 a 50, lógica de procesamiento ISP o subsistema 32 también se puede configurar para permitir una sincronización de destello (también referida como "estrobo") . Por ejemplo, cuando se utiliza un módulo de destello, temporalmente se puede proporcionar iluminación artificial para ayudar en la iluminación de una escena de imagen. A manera de ejemplo, el uso de un destello puede ser benéfico cuando se captura una escena de imagen bajo condiciones de poca luz. El destello o luz estroboscópica se pueden proporcionar utilizando cualquier fuente de iluminación conveniente, tal como un dispositivo de destello LED o un dispositivo de destello xenón, etcétera.
En la presente modalidad, el subsistema ISP 32 puede incluir un controlador de destello configurado para controlar la temporización y/o intervalo durante el cual está activo un módulo de destello. Tal como se apreciará, generalmente es deseable controlar la temporización y duración durante la cual está activo el módulo de destello de manera que el intervalo de destello comience antes que el primer píxel de un cuadro objetivo (por ejemplo, un cuadro de imagen que va a ser capturado) sea capturado y finalice después que el último píxel del cuadro objetivo sea capturado pero antes del inicio de un cuadro de imagen consecutivo posterior. Esto ayuda a asegurar que todos los pixeles dentro del cuadro objetivo sean expuestos a condiciones de iluminación similares mientras se está capturando la escena de imagen.
Haciendo referencia a la figura 47, un diagrama en bloques que muestra un controlador de destello 550 implementado como parte del subsistema ISP 32 y configurado para controlar un módulo de destello 552 se ilustra de acuerdo con una modalidad de la presente divulgación. En algunas modalidades, el módulo de destello 552 puede incluir más de un dispositivo estroboscópico . Por ejemplo, en algunas modalidades, el controlador de destello 550 se puede configurar para proporcionar un pre-destello (por ejemplo, para la reducción de ojos rojos) seguido por un destello principal. Los eventos de pre-destello y destello principal pueden ser en secuencia, y pueden ser proporcionados utilizando los mismos o diferentes dispositivos estroboscópicos .
En la modalidad ilustrada, la temporización del módulo de destello 552 se puede controlar con base en la información de temporización proporcionada desde los sensores de imagen 90a y 90b. Por ejemplo, la temporización de un sensor de imagen puede ser controlada utilizando una técnica de efecto gelatina, en el cual el tiempo de integración es regulado utilizando una abertura de hendidura que escanea el arreglo de pixeles del sensor de imagen (por ejemplo, 90a y 90b) . Al utilizar la información de temporización del sensor (que aquí se muestra como el número de referencia 556) , la cual puede ser proporcionada al subsistema ISP 32 a través de las interfaces de sensor 94a y 94b (cada una de las cuales puede incluir una interfaz del lado del sensor 548 y una interfaz del lado de la etapa inicial 549) , la lógica de control 84 puede proporcionar parámetros de control apropiados 554 al controlador de destello 550, los cuales entonces pueden ser utilizado por el controlador de destello 550 para activar el módulo de destello 552. Tal como se analizó anteriormente, al utilizar la información de temporización de sensor 556, el controlador de destello 556 puede asegurar que el módulo de destello esté activado antes que el primer píxel del cuadro objetivo sea capturado y permanece activado por la duración del cuadro objetivo, con el módulo de destello siendo desactivado después que el último píxel del cuadro objetivo es capturado y antes del inicio del siguiente cuadro (por ejemplo, VSYNC creciente) . Este proceso se puede referir como técnicas de "sincronización de destello" o "sincronización estroboscópica" las cuales se describen con mayor detalle a continuación.
Adicionalmente, tal como se muestra en la modalidad de la figura 47, la lógica de control 84 también puede utilizar datos estadísticos de la etapa inicial ISP 80, que aquí se muestra como el número de referencia 558, para determinar si las condiciones de iluminación presentes en la escena de la imagen correspondiente al cuadro objetivo son apropiadas para usar el módulo de destello. Por ejemplo, el subsistema ISP 32 puede utilizar la exposición automática para intentar mantener un nivel de exposición objetivo (por ejemplo, nivel de luz) ajustando el tiempo de integración y/o las ganancias del sensor. No obstante, tal como se apreciará, el tiempo de integración no puede ser más largo que el tiempo del cuadro. Por ejemplo, para datos de video adquiridos a 30 fps, cada cuadro tiene una duración de aproximadamente 33 milisegundos . Por lo tanto, si no se puede lograr un nivel de exposición objetivo utilizando un tiempo de integración máximo, las ganancias de sensor también se pueden aplicar. Sin embargo, si el ajuste del tiempo de integración y las ganancias de sensor no puede lograr una exposición objetivo (por ejemplo, si el nivel de luz es menor que un umbral objetivo) , entonces el controlador de destello se puede configurar para activar el módulo de destello. Además, en una modalidad, el tiempo de integración también se puede limitar para evitar una borrosidad del movimiento. Por ejemplo, aunque le tiempo de integración se puede extender hasta la dirección del cuadro, este pudiera ser limitado aun más en ciertas modalidades para evitar la borrosidad del movimiento.
Tal como se analizó anteriormente, a fin de asegurar que la activación del destello ilumine el cuadro objetivo por toda su duración (por ejemplo, que el destello sea encendido antes que el primer píxel del cuadro objetivo y apagado después del último píxel del cuadro objetivo) , el subsistema ISP 32 puede utilizar información de temporización del sensor 556 para determinar cuándo activar/desactivar el destello 552.
La figura 48 muestra gráficamente la manera en que la señal de temporización del sensor, de los sensores de imagen 90, puede ser utilizada para controlar la sincronización del destello. Por ejemplo, la figura 48 muestra una porción de una señal de temporización del sensor de imagen 556 que puede ser proporcionada por uno de los sensores de imagen 90a o 90b. Las porciones altas lógicas de la señal 556 representan intervalos de cuadro. Por ejemplo, un primer cuadro (CUADRO N) es representado por el número de referencia 570 y un segundo cuadro (CUADRO N+l) es representado por el número de referencia 572. El tiempo real en el cual inicia el primer cuadro 570 es indicado por el borde creciente de la señal 556 en el tiempo tVsYNc_rao (por ejemplo, con "r" designando un borde creciente y "a" designando el aspecto "real" de la señal de temporización 556) y el tiempo real en el cual finaliza el primer cuadro 570 es indicado por el borde decreciente de la señal 556 en el tiempo tVsYNc_fao (por ejemplo, con "f" designando un borde decreciente) . De manera similar, el tiempo real en el cual inicia el segundo cuadro 572 es indicado por el borde creciente de la señal 556 en el tiempo tVsYNc_rai y el tiempo real en el cual finaliza el segundo cuadro 572 es indicado por el borde decreciente de la señal 556 en el tiempo tvsYNc_fai. El intervalo 574 entre el primer y segundo cuadros se puede referir como un intervalo de supresión (por ejemplo, supresión vertical) , el cual puede permitir que la circuitería de procesamiento de imagen (por ejemplo, subsistema ISP 32) identifique cuándo inician y finalizan los cuadros de imagen. Se debiera apreciar que los intervalos de cuadro y los intervalos de supresión vertical mostrados en la presente figura no necesariamente están dibujados a escala.
Tal como se muestra en la figura 48, la señal 556 puede representar la temporización real desde el punto de vista del sensor de imagen 90. Es decir, la señal 556 representa la temporización en la cual los cuadros realmente están siendo adquiridos por el sensor de imagen. No obstante, a medida que la información de temporización de sensor es proporcionada a los componentes corriente abajo del sistema de procesamiento de imagen 32, se pueden introducir retardos en la señal de temporización de sensor. Por ejemplo, la señal 576 representa una señal de temporización retardada (retardada por un primer retardo de tiempo 578) que puede ser vista desde el punto de vista de la interfaz del lado del sensor 548 de la lógica de interfaz 94 entre el sensor 90 y la lógica de procesamiento de etapa inicial ISP 80. La señal 580 puede representar la señal de temporización de sensor retardada desde el punto de vista de la interfaz del lado de etapa inicial 549, la cual se muestra en la figura 48 como estando retardada con relación a la señal de temporización de interfaz del lado del sensor 572 por un segundo retardo de tiempo 582, y retardada con relación a la señal de temporización de sensor original 556 por un tercer retardo de tiempo 584, lo cual es igual a la suma del primer retardo de tiempo 578 y el segundo retardo de tiempo 582. A continuación, a medida que la señal 580 proveniente del lado de etapa inicial 549 de la interfaz 94 es proporcionada a la lógica de procesamiento de etapa inicial ISP 80 (FEProc) , se puede impartir un retardo adicional de manera que desde la señal retardada 588 es vista desde el punto de vista de la lógica de procesamiento de etapa inicial ISP 80. Específicamente, la señal 588 vista por la lógica de procesamiento de etapa inicial ISP 80 se muestra aquí como estando retardada con relación a la señal retardada 580 (señal de temporización del lado de etapa inicial) por un cuarto retardo de tiempo 590, y retardada con relación a la señal de temporización de sensor original 556 por un quinto retardo de tiempo 592, lo cual es igual a la suma del primer retardo de tiempo 578, el segundo retardo de tiempo 582 y el cuarto retardo de tiempo 590.
Para propósitos de controlar la temporización del destello, el controlador de destello 550 puede utilizar la primera señal disponible para la etapa inicial ISP que, por lo tanto, es cambiada por la menor cantidad de tiempo de retardo con relación a la señal de temporización de sensor real 556. Por lo tanto, en la presente modalidad, el controlador de destello 550 puede determinar los parámetros de temporización de destello con base en la señal de temporización de sensor 580, como se observa desde el punto de vista del lado de etapa inicial 549 de la interfaz sensor-a-ISP 94. Por lo tanto, la señal 596, la cual es utilizada por el controlador de destello 550 en el presente ejemplo, puede ser idéntica a la señal 580. Tal como se muestra, la señal retardada 596 (retardada por el tiempo de retardo 584 con relación a la señal 556) incluye los intervalos de cuadro ubicados entre los tiempos tVsY c_rdo y tVsY c_fao (por ejemplo, donde "d" representa "retardado") que se correlaciona con el primer cuadro 570 y entre los tiempos tVsYNc_rdi y tVsYNc_fdi, los cuales se correlacionan con el segundo cuadro 572. Tal como se analizó anteriormente, por lo general es deseable activar el destello antes del inicio de un cuadro y por la duración del cuadro (por ejemplo, para desactivar el destello después del último píxel del cuadro) para asegurar que la escena de la imagen sea iluminada para la totalidad del cuadro y para considerar cualquier tiempo de calentamiento que el destello pudiera necesitar durante la activación para alcanzar la intensidad completa (lo cual puede ser en el orden de un microsegundo (por ejemplo, 100-800 microsegundos) a unos cuantos milisegundos (por ejemplo, 1-5 milisegundos) ) . Sin embargo, debido a que la señal 596 que está siendo analizada por el controlador de destello 550 está retardada con respecto a la señal de temporización real 556, este retardo es tomado en cuenta cuando se determinan los parámetros de temporización de destello.
Por ejemplo, asumiendo que el destello va a ser activado para iluminar la escena de imagen para el segundo cuadro 572, el borde creciente retardado en tVsYNc_rdi ocurre después del borde creciente real en tVsY c_rai. Por lo tanto, puede ser difícil que el controlador de destello 550 utilice el borde creciente retardado tVsYNc_rdi para determinar un tiempo de inicio de la activación de destello, ya que el borde creciente retardado tvsYwc rdi ocurre después que el segundo cuadro 572 ya ha iniciado (por ejemplo, después de tvsYNc_rai de la señal 556) . En la presente modalidad, el controlador de destello 550 entonces puede determinar el tiempo de inicio de la activación del destello con base en el fin del cuadro previo, aquí el borde decreciente en el tiempo tVSYNc_fdo. Por ejemplo, el controlador de destello 550 puede agregar un intervalo de tiempo 600 (el cual representa el intervalo de supresión vertical 574) al tiempo tVsYNc_fdo, para calcular un tiempo que corresponda al tiempo de borde creciente retardado tVsYNc_rdi del cuadro 572. Tal como se puede apreciar, el tiempo de borde creciente retardado tVsY c rdi ocurre después del tiempo de borde creciente real tVgYNc_rai (señal 556) y, por lo tanto, un desplazamiento de tiempo 598 (Offsetl) , que corresponde al retardo de tiempo 584 de la señal 580, es sustraído de la suma de tiempo tVsYNc fdo Y el tiempo de intervalo de supresión 600. Esto produce un tiempo de inicio de activación de destello que inicia de manera concurrente con el inicio del segundo cuadro 572, en el tiempo tVsY c_rai- No obstante, tal como se mencionó antes, dependiendo del tipo de dispositivo de destello que es proporcionado (por ejemplo, xenón, LED, etcétera) , el módulo de destello 552 puede experimentar un tiempo de calentamiento entre el momento en que el módulo de destello es activado y el momento en que el dispositivo de destello alcanza su plena luminosidad. La cantidad del tiempo de calentamiento puede depender del tipo de dispositivo de destello utilizado (por ejemplo, dispositivo xenón, dispositivo LED, etcétera) . Por lo tanto, para considerar dichos tiempos de calentamiento, un desplazamiento adicional 602 (0ffset2), el cual puede ser programado o preestablecido (por ejemplo, utilizando un registro de control) , puede ser sustraído desde el inicio del segundo cuadro 572, en el tiempo tVsYNc_rai - Esto mueve el tiempo de inicio de activación de destello de regreso al tiempo 604, asegurando así que el destello esté activado (si se necesita iluminar la escena) antes del inicio del cuadro 572 que es adquirido por el sensor de imagen. Este proceso para determinar el tiempo de activación del destello se puede expresar utilizando la siguiente fórmula: tdestello_inicio_cuadrol=tvsYNC_fdO + tVert_supresión_int ~ toffsetl — toffSet2 En la modalidad ilustrada, la desactivación del destello puede ocurrir en el tiempo tVsY c_fdi de la señal de controlador de destello 596, siempre y cuando el tiempo vsYNC fdi ocurra antes del inicio del cuadro después del cuadro 572 (por ejemplo, CUADRO N+2, el cual no se muestra en la figura 48) conforme a lo indicado por el tiempo 605 en la señal de temporización de sensor 556. En otras modalidades, la desactivación del destello puede ocurrir en un tiempo (por ejemplo, un desplazamiento 606) después del tiempo tVsY c_fdi de la señal 596 pero antes del inicio del siguiente cuadro (por ejemplo, antes de un borde creciente VSYNC posterior en la señal de temporizacion del sensor 556 indicando el inicio de CUADRO N+2) , o puede ocurrir dentro de un intervalo 608 inmediatamente antes del tiempo tVsY c_fdi en donde el intervalo 608 es menor que la cantidad de Offsetl (598) . Tal como se puede apreciar, esto asegura que el destello permanezca encendido por toda la duración del cuadro objetivo (por ejemplo, cuadro 572) .
La figura 49 muestra un proceso 618 para determinar un tiempo de inicio de activación de destello en el dispositivo electrónico 10 de acuerdo con la modalidad mostrada en la figura 48. Comenzando en el bloque 620, una señal de temporizacion de sensor (por ejemplo, 556) proveniente de un sensor de imagen es adquirida y proporcionada a la lógica de control de destello (por ejemplo, controlador de destello 550) , el cual puede ser parte de un subsistema de procesamiento de señal de imagen (por ejemplo 32) del dispositivo electrónico 10. La señal de temporizacion de sensor es proporcionada a la lógica de control de destello, pero puede estar retardada con respecto a la señal de temporizacion original (por ejemplo, 556) . En el bloque 622, se determina el retardo (por ejemplo, 584) entre la señal de temporizacion de sensor y la señal de temporización de sensor retardada (por ejemplo, 596) . A continuación, un cuadro objetivo (por ejemplo, cuadro 572) que solicita iluminación de destello es identificado en el bloque 624. Para determinar el tiempo en el cual el módulo de destello (por ejemplo, 552) debiera ser activado para asegurar que el destello esté activo antes del inicio del cuadro objetivo, el proceso 618 entonces avanza al bloque 626, en el cual se determina un primer tiempo (por ejemplo, tiempo tVsYNc_fdo) correspondiente al fin del cuadro previo al cuadro objetivo, tal como lo indica la señal de temporización retardada. Posteriormente, en el bloque 628, la longitud de un intervalo de supresión entre los cuadros es determinada y agregada al primer tiempo determinado en el bloque 626 para determinar un segundo tiempo. El retardo determinado en el bloque 622 entonces es sustraído del segundo tiempo, tal como se muestra en el bloque 630, para determinar un tercer tiempo. Tal como se analizó anteriormente, esto establece que el tiempo de activación de destello coincida con el tiempo real del cuadro objetivo de acuerdo con la señal de temporización de sensor no retardada.
A fin de asegurar que el destello esté activo antes del inicio del cuadro objetivo, se sustrae un desplazamiento (por ejemplo, 602, 0ffset2) del tercer tiempo, tal como se muestra en el bloque 632 para determinar el tiempo de activación de destello deseado. Tal como se apreciará, en algunas modalidades, el desplazamiento del bloque 632 puede no solamente asegurar que el destello esté encendido antes que el cuadro objetivo, sino que también puede compensar cualquier tiempo de calentamiento que el destello pudiera requerir entre ser inicialmente activado y alcanzar la plena luminosidad. En el bloque 634, el destello 552 es activado en el tiempo de inicio de destello determinado en el bloque 632. Tal como se analizó anteriormente y como se muestra en el bloque 636, el destello puede permanecer encendido por toda la duración del cuadro objetivo, y se puede desactivar después del final del cuadro objetivo, de manera que todos los píxeles en el cuadro objetivo están sujetos a condiciones de iluminación similares. Aunque la modalidad antes descrita en las figuras 48 y 49 ha analizado la aplicación de técnicas de sincronización de destello utilizando un solo destello, se debiera además apreciar que estas técnicas de sincronización de destello también se pueden aplicar a modalidades de dispositivos que tienen dos o más dispositivos de destello (por ejemplo, dos destellos LED) . Por ejemplo, si se utiliza más de un módulo de destello, las técnicas anteriores se pueden aplicar a ambos módulos de destello, de manera que cada módulo de destello es activado por el controlador de destello antes del inicio de un cuadro y permanecer encendido por la duración del cuadro (por ejemplo, los módulos de destello pueden no necesariamente estar activados para los mismos cuadros) .
Las técnicas de temporización de destello aquí descritas se pueden aplicar cuando se adquieren imágenes utilizando el dispositivo 10. Por ejemplo, en una modalidad, se puede utilizar una técnica de pre-destello durante al adquisición de imágenes. Por ejemplo, cuando una cámara o aplicación de adquisición de imagen está activa en el dispositivo 10, la aplicación puede operar en un modo de "vista previa" . En el modo de vista previa, el sensor de imagen (por ejemplo, 90) puede estar adquiriendo cuadros de datos de imagen que pueden ser procesados por el subsistema ISP 32 del dispositivo 10 para propósitos de vista previa (por ejemplo, desplegando en una pantalla 28), aunque los cuadros pueden no ser capturados o almacenados realmente hasta que una solicitud de captura es iniciada por un usuario para colocar el dispositivo 10 en un modo de "captura" . A manera de ejemplo, esto puede ocurrir a través de la activación del usuario de un botón de captura física en el dispositivo 10, o un botón de captura suave, el cual puede ser implementado a través de software como parte de una interfaz de usuario gráfica y desplegado en una pantalla del dispositivo 10 y responder a las entradas de interfaz de usuario (por ejemplo, entradas de pantalla táctil) .
Debido a que el destello típicamente no está activo durante el modo de vista previa, la activación repentina y la iluminación de una escena de imagen utilizando un destello, en algunos casos, puede alterar significativamente algunas estadísticas de imagen para una escena particular, tal como aquellas relacionadas con las estadísticas de balance automático de blancos, etcétera, con relación a la misma escena de imagen que no es iluminada por el destello. Por lo tanto, a fin de mejorara la estadística utilizada para procesar un cuadro objetivo deseado, en una modalidad, una técnica de operación de pre-destello puede incluir, recibir una solicitud del usuario para capturar un cuadro de imagen que solicite iluminación de destello, utilizar el destello en un primer tiempo para iluminar un primer cuadro mientras el dispositivo 10 sigue estando en modo de vista previa, y actualizar la estadística (por ejemplo, estadística de balance automático de blancos) antes del inicio del siguiente cuadro. El dispositivo 10 puede entrar a modo de captura y capturar el siguiente cuadro utilizando la estadística actualizada con el destello activado, proporcionando así una precisión de imagen/color mejorada.
La figura 50 muestra un gráfico de flujo que ilustra dicho proceso 640 con más detalle. El proceso 640 comienza en el bloque 642 en el cual una solicitud es recibida para capturar una imagen utilizando el destello. En el bloque 644, el destello es activado (por ejemplo, puede ser temporizado utilizando las técnicas mostradas en las figuras 48 y 49) para iluminar un primer cuadro mientras que el dispositivo 10 sigue estando en modo de vista previa. A continuación, en el bloque 646, las estadísticas de imagen, tal como las estadísticas de balance automático de blancos, son actualizadas con base en las estadísticas adquiridas del primer cuadro iluminado. Posteriormente, en el bloque 648, el dispositivo 10 puede entrar al modo de captura y adquirir el siguiente cuadro utilizando las estadísticas de imagen actualizadas del bloque 646. Por ejemplo, las estadísticas de imagen actualizadas pueden ser utilizadas para determinar ganancias de balance de blancos y/o matrices de corrección de color (CCM) , las cuales pueden ser utilizadas por la microprogramación cableada (por ejemplo, lógica de control 84) para programar el conducto ISP 82. Por lo tanto, el cuadro (por ejemplo, siguiente cuadro) adquirido en el bloque 648 puede ser procesado por el conducto ISP 82 utilizando uno o más parámetros que son determinados con base en las estadísticas de imagen actualizadas del bloque 646.
En otra modalidad, las propiedades de color de una escena de imagen sin destello (por ejemplo, adquirida o vista previamente sin destello) pueden ser aplicadas cuando se captura un cuadro de imagen con destello. Tal como se apreciará, una escena de imagen sin destello generalmente muestra mejores propiedades de color con relación a una escena de imagen que es iluminada con el destello. El uso del destello puede ofrecer, no obstante, ruido reducido y brillantez mejorada (por ejemplo, en condiciones de baja luz) con relación a la imagen sin destello. Sin embargo, el uso del destello también puede tener como resultado que ciertos colores en la imagen de destello aparezcan de cierta forma deslavados con relación a una imagen sin destello de la misma escena. Por lo tanto, en una modalidad, para conservar los beneficios de bajo ruido y brillantez de una imagen de destello mientras que también se retienen parcialmente algunas de las propiedades de color de la imagen sin destello, el dispositivo 10 se puede configurar para analizar un primer cuadro sin el destello para obtener sus propiedades de color. Después, el dispositivo 10 puede capturar un segundo cuadro utilizando el destello y puede aplicar una técnica de transferencia de paleta de color a la imagen de destello utilizando las propiedades de color de la imagen sin destello.
En algunas modalidades, el dispositivo 10 configurado para implementar cualquiera de las técnicas de destello/estroboscópicas antes analizadas puede ser un modelo de un dispositivo de cómputo iPod®, iPhone®, iMac®, o MacBook® con dispositivos de generación de imagen integrados o externos, todos ellos disponibles de Apple Inc. Además, la aplicación de generación de imagen/cámara también puede ser una versión de las aplicaciones Camera®, iMovie®, o PhotoBooth® también de Apple Inc.
Continuando con la figura 51, se ilustra una vista más detalla de la lógica de procesamiento de píxel de etapa inicial ISP 150 (previamente analizada en la figura 10) , de acuerdo con una modalidad de la presente técnica. Tal como se muestra, la lógica de procesamiento de píxel de etapa inicial ISP 150 incluye un filtro temporal 650 y un filtro de compensación de agrupación 652. El filtro temporal 650 puede recibir una de las señales de imagen de entrada SIfO, SIfl, FEProcIn, o señales de imagen pre-procesadas (por ejemplo, 180, 184) y puede operar en los datos de píxel en bruto antes que se ejecute cualquier procesamiento adicional. Por ejemplo, el filtro temporal 650 inicialmente puede procesar los datos de imagen para reducir el ruido ponderando los cuadros de imagen en la dirección temporal. El filtro de compensación de agrupación 652, el cual se analiza con mayor detalle a continuación, puede aplicar la escala y re-muestreo en los datos de imagen en bruto agrupados a partir de un sensor de imagen (por ejemplo, 90a, 90b) para mantener una distribución espacial uniforme de los pixeles de la imagen.
El filtro temporal 650 puede estar adaptado al píxel con base en las características de movimiento y brillantez. Por ejemplo, cuando el movimiento de píxel es alto, la intensidad de la filtración se puede reducir para evitar la apariencia de "arrastre" o "artefactos de fantasma" en la imagen procesada resultante, mientras que la intensidad de la filtración se puede incrementar cuando se detecta poco o ningún movimiento. Adicionalmente , la intensidad de la filtración también se puede ajustar con base en los datos de brillantez (por ejemplo, "luminancia" ) . Por ejemplo, a medida que aumenta la brillantez de la imagen, los artefactos de filtración se pueden volver más notables al ojo humano. Por lo tanto, la intensidad de la filtración se puede reducir adicionalmente cuando un píxel tiene un alto nivel de brillantez .
Al aplicar la filtración temporal, el filtro temporal 650 puede recibir datos de píxel de referencia (Rin) y datos de entrada de historial de movimiento (Hin) , los cuales pueden ser de un cuadro original o previo filtrado. Al utilizar estos parámetros, el filtro temporal 650 puede proporcionar datos de salida de historial de movimiento (Hout) y salida de píxel filtrada (Yout) . La salida de píxel filtrada Yout entonces es pasada al filtro de compensación de agrupación 652, el cual puede estar configurado para ejecutar una o más operaciones de escala sobre los datos de salida de píxel filtrados Yout para producir la señal de salida FEProcOut . Los datos de píxel procesados FEProcOut entonces pueden ser reenviados a la lógica de procesamiento de secuencia ISP 82, tal como se analizó anteriormente.
Haciendo referencia a la figura 52, se ilustra un diagrama de proceso que muestra un proceso de filtración temporal 654 que puede ser ejecutado mediante el filtro temporal mostrado en la figura 51, de acuerdo con una primera modalidad. El filtro temporal 650 puede incluir un filtro de 2 derivaciones, en donde los coeficientes de filtro son ajustados de manera adaptable sobre una base por píxel con base al menos parcialmente en los datos de movimiento y brillantez. Por ejemplo, los píxeles de entrada x(t), con la variable "t" denotando un valor temporal, se pueden comparar con los píxeles de referencia r(t-l) en un cuadro previamente filtrado o un cuadro original previo para generar una búsqueda de índice de movimiento en una tabla de historial de movimiento (M) 655 que puede contener coeficientes de filtro. Adicionalmente, con base en los datos de entrada del historial de movimiento h(t-l), se puede determinar una salida del historial de movimiento h(t) correspondiente al píxel de entrada actual x(t).
La salida de historial de movimiento h(t) y un coeficiente de filtro, K, se pueden determinar con base en una delta de movimiento d(j,i,t), en donde (j,i) representa las coordenadas de la ubicación espacial de un píxel actual x(j,i,t). La delta de movimiento d(j,i,t) se puede calcular determinando el máximo de tres deltas absolutas entre pixeles originales y de referencia para tres pixeles horizontalmente colocados del mismo color. Por ejemplo, haciendo referencia brevemente a la figura 53, se ilustran las ubicaciones espaciales de tres pixeles de referencia colocados 657, 658 y 659 que corresponden a los pixeles de entrada originales 660, 661 y 662. En una modalidad, la delta de movimiento se puede calcular con base en estos pixeles originales y de referencia utilizando la siguiente fórmula: d(j, i, t) = max 3[abs(x(j, i - 2, t) - r(j, i - 2, t— 1)), (abs(x(j, i, t) - r(j, i, t - 1)), (la) (abs(x(j, i + 2, t) - r(j, i + 2, t - 1))] En la figura 55 a continuación se ilustra adicionalmente un gráfico de flujo que muestra esta técnica para determinar el valor delta de movimiento. Además, se debiera entender que la técnica para calcular el valor delta de movimiento, tal como se mostró anteriormente en la Ecuación la (y a continuación en la figura 55) , únicamente pretende proporcionar una modalidad para determinar un valor delta de movimiento.
En otras modalidades, se podría evaluar un arreglo de pixeles del mismo color para determinar un valor delta de movimiento. Por ejemplo, además de los tres pixeles a los que se hace referencia en la Ecuación la, una modalidad para determinar los valores delta de movimiento puede incluir también evaluar las deltas absolutas entre pixeles del mismo color de dos filas que están por arriba (por ejemplo, j-2; asumiendo un patrón Bayer) de los pixeles de referencia 660, 661 y 662 y sus pixeles colocados correspondientes, y dos filas hacia abajo (por ejemplo, j+2; asumiendo un patrón Bayer) de los pixeles de referencia 660, 661 y 662 y sus pixeles colocados correspondientes. Por ejemplo, en una modalidad, el valor delta de movimiento se puede expresar de la siguiente forma: d{j, i, t) =max 9[abs(x(j, i - 2, t) - r{j, i - 2, t -1)), (abs{x(j, i, t) - r{j, i, t -1)), (abs(x(j, i+2,í)- r(j,i+2,f-1)), (abs(x(j - 2, i-2, t ) - r(j -2, i - 2, t -1)), {abs{x(j - 2, i, t) - r(j - 2, i, t - )), (abs(x(j - 2, i + 2, t) - r(j - 2, i + 2, t - \)), ( Ib) (abs (x(j + 2, i - 2, t) - r(j + 2, i - 2, t -1)) (abs(x(j + 2,i, t ) - r(j + 2, i, t -1)), {abs{x(j+2, i + 2, t) - r{j+2, i +2, t -1))] Por lo tanto, en la modalidad mostrada por la Ecuación Ib, el valor delta de movimiento puede ser determinado comparando la delta absoluta entre un arreglo 3x3 de pixeles del mismo color, con el píxel actual (661) estando ubicado en el centro del arreglo 3x3 (por ejemplo, realmente un arreglo 5x5 para patrones de color Bayer en caso que se cuenten pixeles de diferentes colores) . Se debiera apreciar que cualquier arreglo conveniente bidimensional de pixeles del mismo color (por ejemplo, incluyendo arreglos que tienen todos los pixeles en la misma fila (por ejemplo. Ecuación la) o arreglos que tienen todos los pixeles en la misma columna) con el píxel actual (por ejemplo, 661) estando ubicado en el centro del arreglo podría ser analizado para determinar un valor delta de movimiento. Además, aunque el valor delta de movimiento podría ser determinado como el máximo de las deltas absolutas (por ejemplo, como se muestra en las Ecuaciones la y Ib), en otras modalidades, el valor delta de movimiento también podría ser seleccionado como la media o mediana de las deltas absolutas. Adicionalmente , las técnicas anteriores también se pueden aplicar a otros tipos de arreglos de filtro de color (por ejemplo, RGB , CYGM, etcétera) y no pretende ser exclusivo a patrones Bayer.
Haciendo referencia nuevamente a la figura 52, una vez que se determina el valor delta de movimiento, una búsqueda de índice de movimiento que puede ser utilizada para seleccionar el coeficiente de filtro K a partir de la tabla de movimiento (M) 655 se puede calcular sumando la delta de movimiento d(t) para el píxel actual (por ejemplo, en la ubicación espacial (j,i)) con la entrada del historial de movimiento h(t-l) . Por ejemplo, el coeficiente de filtro K se puede determinar de la siguiente manera: K = M[d(j,i,t)+Kj,i,t-l)] (2a) Adicionalmente, la salida del historial de movimiento h(t) se puede determinar utilizando la siguiente fórmula h(j,i,t) = d(j,i,t) + {\-K)xh(j,i,t - 1) (3a) A continuación, se puede utilizar la brillantez del píxel de entrada actual x(t) para generar una búsqueda de índice de luminancia en una tabla de luminancia (L) 656. En una modalidad, la tabla de luminancia puede contener factores de atenuación que pueden estar entre 0 y 1, y se pueden seleccionar con base en el índice de luminancia. Un segundo coeficiente de filtro, K' , puede ser calculado multiplicando el primer coeficiente de filtro K por el factor de atenuación de luminancia, tal como se muestra en la siguiente ecuación: K'=KxL[x(j,i,t)] (4a) El valor determinado para K' entonces puede ser utilizado como el coeficiente de filtración para el filtro temporal 650. Tal como se analizó anteriormente, el filtro temporal 650 puede ser un filtro de 2 derivaciones. Adicionalmente , el filtro temporal 650 se puede configurar como un filtro de respuesta de impulso infinito (IIR) utilizando el cuadro filtrado previo o como un filtro de respuesta de impulso finito (FIR) utilizando el cuadro original previo. El filtro temporal 650 puede calcular el píxel de salida filtrado y(t) (Yout) utilizando el píxel de entrada actual x(t), el píxel de referencia r(t-l), y el coeficiente de filtro K' utilizando la siguiente fórmula: y(j,i,0= r(j,i,t-l) + K' i,t) - r(j,i,t - 1)) (5a) Tal como se analizó anteriormente, el proceso de filtración temporal 654 mostrado en la figura 52 puede ser ejecutado sobre una base píxel-por-píxel . En una modalidad, la misma tabla de movimiento M y tabla de luminancia L pueden ser utilizadas para todos los componentes de color (por ejemplo, R, G y B) . Adicionalmente, algunas modalidades pueden proporcionar un mecanismo de derivación, en el cual se puede derivar la filtración temporal, tal como en respuesta a una señal de control proveniente de la lógica de control 84. Además, tal como se analizará a continuación con respecto a las figuras 57 y 58, una modalidad del filtro temporal 650 puede utilizar tablas separadas de movimiento y luminancia para cada componente de color de los datos de imagen.
La modalidad de la técnica de filtración temporal descrita con referencia a las figuras 52 y 53 se puede entender mejor en virtud de la figura 54, la cual muestra un gráfico de flujo que ilustra un método 664, de acuerdo con la modalidad antes descrita. El método 664 comienza en el paso 665, en el cual un píxel actual x(t) ubicado en la ubicación espacial (j,i) de un cuadro actual de datos de imagen es recibido por el sistema de filtración temporal 654. En el paso 666, un valor delta de movimiento d(t) es determinado para el píxel actual x(t) con base al menos parcialmente en uno o más píxeles de referencia colocados (por ejemplo, r(t-1) ) de un cuadro previo de los datos de imagen (por ejemplo, el cuadro de imagen inmediatamente precedente al cuadro actual) . Una técnica para determinar un valor delta de movimiento d(t) en el paso 666 se explica adicionalmente a continuación con referencia a la figura 55, y se puede ejecutar de acuerdo con la Ecuación la, tal como se mostró anteriormente .
Una vez que se obtiene el valor delta de movimiento d(t) del paso 666, se puede determinar un índice de búsqueda de tabla de movimiento utilizando el valor delta de movimiento d(t) y un valor de entrada de historial de movimiento h(t-l) correspondiente a la ubicación espacial (j,i) del cuadro previo, tal como se muestra en el paso 667. Adicionalmente , aunque no se muestra, en el paso 667 también se puede determinar un valor de historial de movimiento h(t) correspondiente al píxel actual x(t) una vez que se conoce el valor delta de movimiento d(t), por ejemplo, utilizando la Ecuación 3a que se mostró antes. Posteriormente, en el paso 668, se puede seleccionar un primer coeficiente de filtro K a partir de una tabla de movimiento 655 utilizando el índice de búsqueda de tabla de movimiento del paso 667. La determinación del índice de búsqueda de tabla de movimiento y la selección del primer coeficiente de filtro K de la tabla de movimiento se puede ejecutar de acuerdo con la Ecuación 2a, tal como se mostró anteriormente.
A continuación, en el paso 669 se puede seleccionar un factor de atenuación a partir de una tabla de luminancia 656. Por ejemplo, la tabla de luminancia 656 puede contener factores de atenuación que varían de entre aproximadamente 0 y 1, y el factor de atenuación se puede seleccionar a partir de la tabla de luminancia 656 utilizando el valor del píxel actual x(t) como un índice de búsqueda. Una vez que se selecciona el factor de atenuación, en el paso 670 se puede determinar un segundo coeficiente de filtro K' utilizando el factor de atenuación seleccionado y el primer coeficiente de filtro (del paso 668) , tal como se muestra en la Ecuación 4a anterior. Después, en el paso 671, un valor de salida temporalmente filtrado y(t) correspondiente al píxel de entrada actual x(t) se determina con base en el segundo coeficiente de filtro K' (a partir del paso 669) , el valor del píxel de referencia colocado r(t-l), y el valor del píxel de entrada x(t). Por ejemplo, en una modalidad, el valor de salida y(t) se puede determinar de acuerdo con la Ecuación 5a, tal como se mostró anteriormente.
Haciendo referencia a la figura 55, el paso 666 para determinar el valor delta de movimiento d(t) del método 664 se ilustra con más detalle de acuerdo con una modalidad. En particular, la determinación del valor delta de movimiento d(t) generalmente puede corresponder a la operación mostrada anteriormente de acuerdo con la Ecuación la. Tal como se muestra, el paso 666 puede incluir los subpasos 672-675. Comenzando en el subpaso 672, se identifica un conjunto de tres píxeles horizontalmente adyacentes que tienen mismo valor de color que el píxel de entrada actual x(t) . A manera de ejemplo, de acuerdo con la modalidad mostrada en la figura 53, los datos de imagen pueden incluir datos de imagen Bayer, y los tres píxeles horizontalmente adyacentes pueden incluir el píxel de entrada actual x(t) (661) , un segundo píxel 660 del mismo color a la izquierda del píxel de entrada actual 661, y un tercer píxel del mismo color a la derecha del píxel de entrada actual 661.
A continuación, en el subpaso 673, se identifican tres píxeles de referencia colocados 657, 658 y 659 del cuadro previo correspondiente al conjunto seleccionado de tres píxeles horizontalmente adyacentes, 660, 661 y 662. Utilizando los píxeles seleccionados 660, 661 y 662 y los tres píxeles de referencia colocados 657, 658 y 659, en el subpaso 674 se determinan los valores absolutos de las diferencias entre cada uno de los tres píxeles seleccionados 660, 661 y 662 y sus píxeles de referencia colocados correspondientes 657, 658 y 659, respectivamente. Posteriormente, en el subpaso 675, el máximo de las tres diferencias del subpaso 674 es seleccionado como el valor delta de movimiento d(t) para el píxel de entrada actual x(t) . Tal como se analizó anteriormente, la figura 55, la cual ilustra la técnica del cálculo del valor delta de movimiento mostrado en la Ecuación la, solamente pretende proporcionar una modalidad. De hecho, tal como se analizó anteriormente, se puede utilizar cualquier arreglo bidimensional conveniente de píxeles del mismo color con el píxel actual estando centrado en el arreglo para determinar un valor delta de movimiento (por ejemplo, Ecuación Ib) .
En la figura 56 se muestra otra modalidad de una técnica para aplicar filtración temporal a los datos de imagen. Por ejemplo, debido a que las relaciones señal a ruido para diferentes componentes de color de los datos de imagen pueden ser diferentes, se puede aplicar una ganancia al píxel actual, de manera que el píxel actual se gana antes de seleccionar los valores de movimiento y luminancia de la tabla de movimiento 655 y la tabla de luminancia 656. Al aplicar una ganancia respectiva que depende del color, la relación señal a ruido puede ser más consistente entre los diferentes componentes de color. A manera de ejemplo solamente, en una implementación que utiliza datos de imagen Bayer en bruto, los canales de color rojo y azul generalmente pueden ser más sensibles en comparación con los canales de color verde (Gr y Gb) . Por lo tanto, al aplicar a cada píxel procesado una ganancia apropiada que depende del color, la variación señal a ruido entre cada componente de color generalmente se puede reducir, reduciendo así, entre otras cosas, los artefactos de fantasma, así como la consistencia a través de diferentes colores después de las ganancias de balance automático de blancos.
Con esto en mente, la figura 56 proporciona un gráfico de flujo que muestra un método 676 para aplicar filtración temporal a datos de imagen recibidos por la unidad de procesamiento de etapa inicial 150 de acuerdo con dicha modalidad. Comenzando en el paso 677, un píxel actual x(t) ubicado en la ubicación espacial (j,i) de un cuadro actual de los datos de imagen es recibido por el sistema de filtración temporal 654. En el paso 678, un valor delta de movimiento d(t) es determinado para el píxel actual x(t) con base al menos parcialmente en uno o más píxeles de referencia colocados (por ejemplo, r(t-l)) de un cuadro previo de los datos de imagen (por ejemplo, el cuadro de imagen inmediatamente precedente al cuadro actual) . El paso 678 puede ser similar al paso 666 de la figura 54, y puede utilizar la operación representada en la Ecuación 1 anterior.
A continuación, en el paso 679, se puede determinar un índice de búsqueda de tabla de movimiento utilizando el valor delta de movimiento d(t), un valor de entrada de historial de movimiento h(t-l) correspondiente a la ubicación espacial (j,i) del cuadro previo (por ejemplo, correspondiente al píxel de referencia colocado r(t-l)), y una ganancia asociada con el color del píxel actual. Posteriormente, en el paso 680, se puede seleccionar un primer coeficiente de filtro K a partir de la tabla de movimiento 655 utilizando el índice de búsqueda de tabla de movimiento determinado en el paso 679. A manera de ejemplo solamente, en una modalidad, el coeficiente de filtro K y el índice de búsqueda de tabla de movimiento se puede determinar de la siguiente forma: K - M[ganancia[c]x(d(j,i,í) + h(j,i,t - 1))], (2b) en donde M representa la tabla de movimiento, y en donde la ganancia [c] corresponde a una ganancia asociada con el color del píxel actual. Adicionalmente , aunque no se muestra en la figura 56, se debiera entender que un valor de salida de historial de movimiento h(t) para el píxel actual también puede ser determinado y puede ser utilizado para aplicar filtración temporal a un píxel colocado de un cuadro de imagen posterior (por ejemplo, el siguiente cuadro) . En la presente modalidad, la salida de historial de movimiento h(t) para el píxel actual x(t) se puede determinar utilizando la siguiente fórmula: ( 3b) h{j, i, t) = d(j, i,t) + K[h(j, i, t - 1) - d(j, i, ] A continuación, en el paso 681, se puede seleccionar un factor de atenuación a partir de la tabla de luminancia 656 utilizando un índice de búsqueda de tabla de luminancia determinado con base en la ganancia (ganancia [c] ) asociada con el color del píxel actual x(t) . Tal como se analizó anteriormente, los factores de atenuación almacenados en la tabla de luminancia pueden tener un rango de aproximadamente 0 a 1. Posteriormente, en el paso 682, se puede calcular un segundo coeficiente de filtro K' con base en el factor de atenuación (a partir del paso 681) y el primer coeficiente de filtro K (a partir del paso 680) . A manera de ejemplo solamente, en una modalidad, el segundo coeficiente de filtro K' y el índice de búsqueda de tabla de luminancia se pueden determinar de la siguiente manera: K'= K x L[ganancia[c]x x{j,i,t)] (4b) A continuación, en el paso 683, un valor de salida temporalmente filtrado y(t) correspondiente al píxel de entrada actual x(t) se determina con base en el segundo coeficiente de filtro K' (a partir del paso 682), el valor del píxel de referencia colocado r(t-l), y el valor del píxel de entrada x(t) . Por ejemplo, en una modalidad, el valor de salida y(t) puede ser determinado de la siguiente forma: y(j ,t) = x(j,U) + K'(r(j,i,t-\)-x(j )) . (5b) Continuando con la figura 57, se muestra una modalidad adicional del proceso de filtración temporal 384. Aquí, el proceso de filtración temporal 384 se puede lograr en una manera similar a la modalidad analizada en la figura 56, excepto que en lugar de aplicar a cada píxel de entrada una ganancia que dependa del color (por ejemplo, ganancia [c] ) y utilizar tablas compartidas de movimiento y luminancia, se proporcionan tablas separadas de movimiento y luminancia para cada componente de color. Por ejemplo, tal como se muestra en la figura 57, las tablas de movimiento 655 pueden incluir una tabla de movimiento 655a correspondiente a un primer color, una tabla de movimiento 655b correspondiente a un segundo color, y una tabla de movimiento 655c correspondiente a un navo color, en donde n depende del número de colores presentes en los datos de imagen en bruto. De manera similar, las tablas de luminancia 656 pueden incluir una tabla de luminancia 656a correspondiente al primer color, una tabla de luminancia 656b correspondiente al segundo color, y la tabla de luminancia 356c correspondiente al navo color. Por lo tanto, en una modalidad donde los datos de imagen en bruto son los datos de imagen Bayer, se pueden proporcionar tres tablas de movimiento y luminancia para cada uno de los componentes de color rojo, azul y verde. Tal como se analiza a continuación, la selección de los coeficientes de filtración K y los factores de atenuación pueden depender de la tabla de movimiento y luminancia seleccionada para el color actual (por ejemplo, el color del píxel de entrada actual) .
En la figura 58 se muestra un método 685 que ilustra una modalidad adicional para filtración temporal utilizando tablas de movimiento y luminancia que dependen del color. Tal como se apreciará, los diversos cálculos y fórmulas que pueden ser empleados por el método 685 pueden ser similares a la modalidad mostrada en la figura 54, pero con una tabla particular de movimiento y luminancia siendo seleccionada para cada color, o similar a la modalidad mostrada en la figura 56, pero reemplazando el uso de la ganancia [c] que depende del color con la selección de una tabla de movimiento y luminancia que depende del color.
Comenzando en el paso 686, un píxel actual x(t) ubicado en la ubicación espacial (j,i) de un cuadro actual de datos de imagen es recibido por el sistema de filtración temporal 684 (figura 57) . En el paso 687, un valor delta de movimiento d(t) es determinado para el píxel actual x(t) con base al menos parcialmente en uno o más píxeles de referencia colocados (por ejemplo, r(t-l)) de un cuadro previo de los datos de imagen (por ejemplo, el cuadro de imagen inmediatamente precedente al cuadro actual) . El paso 687 puede ser similar paso 666 de la figura 54, y puede utilizar la operación mostrada en la Ecuación 1 anterior.
A continuación, en el paso 688, se puede determinar un índice de búsqueda de tabla de movimiento utilizando el valor delta de movimiento d(t) y un valor de entrada de historial de movimiento h(t-l) correspondiente a la ubicación espacial (j,i) del cuadro previo (por ejemplo, correspondiente al píxel de referencia colocado r(t-l)).
Posteriormente, en el paso 689, se puede seleccionar un primer coeficiente de filtro K a partir de una de las tablas de movimiento disponibles (por ejemplo, 655a, 655b, 655c) con base en el color del píxel de entrada actual. Por ejemplo, una vez que se identifica la tabla de movimiento apropiada, el primer coeficiente de filtro K puede ser seleccionado utilizando el índice de búsqueda de tabla de movimiento determinado en el paso 688.
Después de seleccionar el primer coeficiente de filtro K, se selecciona una tabla de luminancia correspondiente al color actual y se selecciona un factor de atenuación a partir de la tabla de luminancia seleccionado con base en el valor del píxel actual x(t), tal como se muestra en el paso 690. Posteriormente, en el paso 691, se determina un segundo coeficiente de filtro K' con base en el factor de atenuación (a partir del paso 690) y el primer coeficiente de filtro K (paso 689) . A continuación, en el paso 692, un valor de salida temporalmente filtrado y(t) correspondiente al píxel de entrada actual x(t) es determinado con base en el segundo coeficiente de filtro K' (a partir del paso 691) , el valor del píxel de referencia colocado r(t-l), y el valor del píxel de entrada x(t). Aunque la técnica mostrada en la figura 58 puede ser más costosa de implementar (por ejemplo, debido a la memoria necesaria para almacenar tablas adicionales de movimiento y luminancia) , en algunos casos, este puede ofrecer mejoras adicionales con respecto a los artefactos de fantasma y consistencia a través de los diferentes colores después de las ganancias de balance automático de blancos.
De acuerdo con modalidades adicionales, el proceso de filtración temporal proporcionado por el filtro temporal 650 puede utilizar una combinación de ganancias que dependa del color y tablas de movimiento y/o luminancia especificas del color para aplicar filtración temporal a los píxeles de entrada. Por ejemplo, en una modalidad de este tipo, se puede proporcionar una sola tabla de movimiento para todos los componentes de color, y el índice de búsqueda de tabla de movimiento para seleccionar el primer coeficiente de filtración (K) de la tabla de movimiento se puede determinar con base en una ganancia que depende del color (por ejemplo, tal como se muestra en la figura 56, pasos 679-680), aunque el índice de búsqueda de tabla de luminancia puede no tener una ganancia que dependa del color aplicada al mismo, pero puede ser utilizado para seleccionar el factor de atenuación de brillantez de una de las múltiples tablas de luminancia dependiendo del color del píxel de entrada actual (por ejemplo, tal como se muestra en la figura 58, paso 690) . Alternativamente, en otra modalidad, se pueden proporcionar múltiples tablas de movimiento y se puede utilizar un índice de búsqueda de tabla de movimiento (sin una ganancia que dependa del color aplicada) para seleccionar el primer coeficiente de filtración (K) de una tabla de movimiento correspondiente al color del píxel de entrada actual (por ejemplo, tal como se muestra en la figura 58, paso 689), mientras que se puede proporcionar una sola tabla de luminancia para todos los componentes de color, y en donde el índice de búsqueda de tabla de luminancia para seleccionar el factor de atenuación de brillantez se puede determinar con base en una ganancia que depende del color (por ejemplo, como se muestra en la figura 56, pasos 681-682). Además, en una modalidad donde se utiliza un arreglo de filtro de color Bayer, se puede proporcionar una tabla de movimiento y/o tabla de luminancia para cada uno de los componentes de color rojo (R) y azul (B) , mientras que se puede proporcionar una tabla de movimiento y/o tabla de luminancia común para ambos componentes de color verde (Gr y Gb) .
La salida del filtro temporal 650 posteriormente puede ser enviada al filtro de compensación de agrupación (BCF) 652, el cual se puede configurar para procesar los píxeles de imagen para compensar la colocación no lineal (por ejemplo, distribución espacial desigual) de las muestras de color debido a la agrupación por los sensores de imagen 90a o 90b, de manera que pueden operar correctamente las operaciones de procesamiento de imagen posteriores en la lógica de conducto ISP 82 (por ejemplo, interpolación cromática, etcétera) que depende de la colocación lineal de las muestras de color. Por ejemplo, haciendo referencia ahora a la figura 59, se muestra una muestra de plena resolución 693 de los datos de imagen Bayer. Esto puede representar datos de imagen en bruto de una muestra de plena resolución capturados por el sensor de imagen 90a (o 90b) acoplado a la lógica de procesamiento de etapa inicial ISP 80.
Tal como se apreciará, bajo ciertas condiciones de captura de imagen, puede no resultar práctico enviar los datos de imagen de plena resolución capturados por el sensor de imagen 90a a la circuitería ISP 32 para procesamiento. Por ejemplo, cuando se capturan datos de video, a fin de preservar la apariencia de una imagen en movimiento fluida desde la perspectiva del ojo humano, se pudiera desear una tasa de transferencia de cuadros de al menos aproximadamente 30 cuadros por segundo. Sin embargo, si la cantidad de datos de píxel contenidos en cada cuadro de una muestra de plena resolución excede las capacidades de procesamiento de la circuitería ISP 32 cuando son muestreados a 30 cuadros por segundo, la filtración de compensación de agrupación puede ser aplicada en conjunto con la agrupación por el sensor de imagen 90a para reducir la resolución de la señal de imagen al mismo tiempo que también se mejora la relación señal-a-ruido. Por ejemplo, tal como se analizó anteriormente, se pueden aplicar diversas técnicas de agrupación, tal como agrupación 2x2, para producir un píxel de imagen en bruto "agrupada" promediando los valores de pixeles circundantes en la región activa 312 del cuadro en bruto 310.
Haciendo referencia a la figura 60, de acuerdo con una modalidad se ilustra una modalidad del sensor de imagen 90a que puede ser configurada para agrupar los datos de imagen de plena resolución 693 de la figura 59 para producir datos de imagen en bruto agrupados correspondientes 700 mostrados en la figura 61. Tal como se muestra, el sensor de imagen 90a puede capturar los datos de imagen en bruto de plena resolución 693. La lógica de agrupación 699 se puede configurar para aplicar la agrupación a los datos de imagen en bruto de plena resolución 693 a fin de producir los datos de imagen en bruto agrupados 700, los cuales pueden ser proporcionados a la lógica de procesamiento de etapa inicial ISP 80 utilizando la interfaz de sensor 94a, que, tal como se analizó anteriormente, puede ser una interfaz SMIA o cualquier otra interfaz de cámara conveniente paralela o serial .
Tal como se ilustra en la figura 61, la lógica de agrupación 699 puede aplicar agrupación 2x2 a los datos de imagen en bruto de plena resolución 693. Por ejemplo, con respecto a los datos de imagen agrupados 700, los pixeles 695, 696, 697 y 698 pueden formar un patrón Bayer y pueden ser determinados promediando los valores de los pixeles de los datos de imagen de plena resolución 693. Por ejemplo, haciendo referencia a las figuras 59 y 61, el pixel Gr agrupado 695 puede ser determinado como el promedio o media de los pixeles Gr de plena resolución 695a-695d. De manera similar, el pixel R agrupado 696 puede ser determinado como el promedio de los pixeles R de plena resolución 696a-696d, el pixel B agrupado 697 puede ser determinado como el promedio de los pixeles B de plena resolución 697a-697d, y el pixel Gb agrupado 698 puede ser determinado como el promedio de los pixeles Gb de plena resolución 698a-698d. Por lo tanto, en la presente modalidad, la agrupación 2x2 puede proporcionar un conjunto de cuatro pixeles de plena resolución incluyendo un pixel izquierdo superior (por ejemplo, 695a) , derecho superior (por ejemplo 695b) , izquierdo inferior (por ejemplo, 695c) , y derecho inferior (por ejemplo, 695d) que sean promediados para derivar un pixel agrupado ubicado en el centro de un cuadrado formado por el conjunto de cuatro pixeles de plena resolución. Por consiguiente, el bloque Bayer agrupado 694 mostrado en la figura 61 contiene cuatro "súper píxeles" que representan los 16 píxeles contenidos en los bloques Bayer 694a-694d de la figura 59.
Además de reducir la resolución espacial, la agrupación también ofrece la ventaja añadida de reducir el ruido en la señal de imagen. Por ejemplo, siempre que un sensor de imagen (por ejemplo, 90a) es expuesto a una señal de luz, puede haber una cierta cantidad de ruido, tal como ruido de fotones, asociado con la imagen. Este ruido puede ser aleatorio o sistemático y puede provenir de múltiples fuentes. Por lo tanto, la cantidad de información contenida en una imagen capturada por el sensor de imagen puede ser expresada en términos de una relación señal -a-ruido . Por ejemplo, cada vez que una imagen es capturada por un sensor de imagen 90a y transferida a un circuito de procesamiento, tal como el circuito ISP 32, puede haber cierto grado de ruido en los valores de los píxeles debido a que el proceso de leer y transferir los datos de imagen inherentemente introduce "ruido de lectura" en la señal de la imagen. Este "ruido de lectura" puede ser aleatorio y generalmente no se puede evitar. Al utilizar el promedio de cuatro píxeles, el ruido (por ejemplo, ruido de fotones) generalmente puede ser reducido independientemente de la fuente del ruido.
Por lo tanto, cuando se consideran los datos de imagen de plena resolución 693 de la figura 59, cada patrón Bayer (bloque 2x2) 694a-694d contiene 4 píxeles, cada uno de los cuales contiene un componente de señal y ruido. Si cada píxel, por ejemplo, en el bloque Bayer 694a, es leído por separado, entonces están presentes cuatro componentes de señal y cuatro componentes de ruido. Sin embargo, al aplicar la agrupación, tal como se muestra en las figuras 59 y 61, de manera que cuatro píxeles (por ejemplo, 695a, 695b, 695c, 695d) pueden ser representados por un solo píxel (por ejemplo, 695) en los datos de imagen agrupados, la misma área ocupada por los cuatro píxeles en los datos de imagen de plena resolución 693 puede ser leída como un solo píxel con solamente un caso de un componente de ruido, mejorando así la relación señal -a-ruido .
Además, aunque la presente modalidad muestra la lógica de agrupación 699 de la figura 60 como estando configurada para aplicar un proceso de agrupación 2x2, se debiera apreciar que la lógica de agrupación 699 se puede configurar para aplicar cualquier tipo conveniente de proceso de agrupación, tal como agrupación 3x3, agrupación vertical, agrupación horizontal, y así sucesivamente. En algunas modalidades, el sensor de imagen 90a se puede configurar para seleccionar entre diferentes modos de agrupación durante el proceso de captura de imagen. Adicionalmente , en modalidades adicionales, el sensor de imagen 90a también se puede configurar para aplicar una técnica que puede ser referida como "salto" en donde en lugar de promediar las muestras de píxel, la lógica 699 selecciona solamente algunos píxeles de los datos de plena resolución 693 (por ejemplo, cada segundo píxel, cada 3 píxeles, etcétera) para emitir a la etapa inicial ISP 80 para procesamiento. Además, aunque en la figura 60 solamente se muestra el sensor de imagen 90a, se debiera apreciar que el sensor de imagen 90b puede ser implementado en una manera similar.
Como también se muestra en la figura 61, un efecto del proceso de agrupación es que el muestreo espacial de los píxeles agrupados puede no estar separado de forma igual . Esta distorsión espacial puede, en algunos sistemas, tener como resultado un dentado (por ejemplo, bordes mellados), lo cual generalmente no es deseable. Además, debido a que algunos pasos del procesamiento de imagen en la lógica de conducto ISP 82 pueden depender de la colocación lineal de las muestras de color a fin de operar correctamente, el filtro de compensación de agrupación (BCF) 652 se puede aplicar para ejecutar re-muestreo y re-posicionamiento de los píxeles agrupados de manera que los píxeles agrupados quedan distribuidos espacialmente de manera uniforme. Es decir, el BCF 652 esencialmente compensa la distribución espacial desigual (por ejemplo, mostrada en la figura 61) mediante el re-muestreo de la posición de las muestras (por ejemplo, pixeles) . Por ejemplo, la figura 62 ilustra una porción re-muestreada de datos de imagen agrupados 702 después de ser procesados por el BCF 652, en donde el bloque Bayer 703 que contiene los pixeles re-muestreados distribuidos de manera uniforme 704, 705, 706 y 707 corresponde a los pixeles agrupados 695, 696, 697 y 698, respectivamente de los datos de imagen agrupados 700 de la figura 61. Adicionalmente , en una modalidad que utiliza salto (por ejemplo, en lugar de agrupación) , tal como se mencionó anteriormente, la distorsión espacial mostrada en la figura 61 puede no estar presente. En este caso, el BCF 652 puede funcionar como un filtro de paso bajo para reducir los artefactos (por ejemplo, el dentado) que pueden resultar cuando el salto es empleado por el sensor de imagen 90a.
La figura 63 muestra un diagrama en bloques del filtro de compensación de agrupación 652 de acuerdo con una modalidad. El BCF 652 puede incluir lógica de compensación de agrupación 708 que puede procesar pixeles agrupados 700 para aplicar escala horizontal y vertical utilizando lógica de escala horizontal 709 y lógica de escala vertical 710, respectivamente, para re-muestrear y re-colocar los pixeles agrupados 700 de manera que queden acomodados en una distribución espacialmente uniforme, tal como se muestra en la figura 62. En una modalidad, las operaciones de escala ejecutadas por el BCF 652 pueden ser ejecutadas utilizando filtración de polifase de múltiple derivación horizontal y vertical. Por ejemplo, el proceso de filtración puede incluir seleccionar los píxeles apropiados a partir de los datos de imagen fuente de entrada (por ejemplo, los datos de imagen agrupados 700 proporcionados por el sensor de imagen 90a) , multiplicando cada uno de los píxeles seleccionados por un coeficiente de filtración, y sumando los valores resultantes para formar un píxel de salida en un destino deseado.
La selección de los píxeles utilizados en las operaciones de escala, los cuales pueden incluir un píxel central y píxeles vecinos circundantes del mismo color, se puede determinar utilizando analizadores diferenciales separados 711, uno para escala vertical y uno para escala horizontal. En la modalidad mostrada, los analizadores diferenciales 711 pueden ser analizadores diferenciales digitales (DDA) y se pueden configurar para controlar la posición de píxel de salida actual durante las operaciones de escala en las direcciones vertical y horizontal. En la presente modalidad, se utiliza un primer DDA (referido como 711a) para todos los componentes de color durante la escala horizontal, y un segundo DDA (referido como 711b) para todos los componentes de color durante la escala vertical. A manera de ejemplo solamente, el DDA 711 puede ser proporcionado como un registro de datos de 32 bits que contiene un número de punto fijo de 2-complementos que tiene 16 bits en la porción de entero y 16 bits en la fracción. La porción de entero de 16 bits puede ser utilizada para determinar la posición actual para un píxel de salida. La porción fraccional del DDA 711 se puede utilizar para determinar un índice o fase actual, el cual se puede basar en la posición fraccional entre pixeles de la posición del DDA actual (por ejemplo, correspondiente a la ubicación espacial de píxel de salida) . El índice o fase se puede utilizar para seleccionar un conjunto apropiado de coeficientes de un conjunto de tablas de coeficientes de filtro 712. Adicionalmente , la filtración se puede realizar por componente de color utilizando pixeles del mismo color. Por lo tanto, los coeficientes de filtración pueden ser seleccionados con base no solamente en la fase de la posición del DDA actual, sino también del color del píxel actual. En una modalidad, 8 fases pueden estar presentes entre cada píxel de entrada y, por lo tanto, los componentes de escala vertical y horizontal pueden utilizar tablas de coeficiente de profundidad 8, de manera que los 3 bits de orden superior de la porción de fracción de 16 bits se utilizan para expresar la fase o índice actual. Por lo tanto, tal como aquí se utiliza, el término datos de "imagen en bruto" o similar debiera ser entendido para referirse a datos de imagen de múltiples colores que son adquiridos por un solo sensor con un patrón de arreglo de filtro de color recubriéndolo (por ejemplo, Bayer) , proporcionando así múltiples componentes de color en un plano. En otra modalidad, DDAs separados pueden ser utilizados para cada componente de color. Por ejemplo, en dichas modalidades el BCF 652 puede extraer los componentes R, B, Gr y Gb de los datos de imagen en bruto y procesar cada componente como un plano separado.
En operación, la escala horizontal y vertical puede incluir inicializar el DDA 711 y ejecutar la filtración de polifase de múltiple derivación utilizando las porciones de entero y fraccional del DDA 711. Aunque se ejecutan separadamente y con DDAs separados, las operaciones de escala horizontal y vertical son llevadas a cabo en una manera similar. Un valor de paso o tamaño de paso (DDAStepX para escala horizontal y DDAStepY para escala vertical) determina por cuánto se incrementa el valor DDA (currDDA) después que se determina cada píxel de salida, y la filtración de polifase de múltiple derivación se repite utilizando el siguiente valor currDDA. Por ejemplo, si el valor de paso es menor que 1, entonces la imagen se escala hacia arriba, y si el valor de paso es mayor que 1, la imagen se escala hacia abajo. Si el valor de paso es igual a 1, entonces no ocurre una escala. Además, se debiera observar que algunos o diferentes tamaños de paso pueden ser utilizados para escala horizontal y vertical.
Píxeles de salida son generados por el BCF 652 en el mismo orden que los píxeles de entrada (por ejemplo, utilizando el patrón Bayer) . En la presente modalidad, los píxeles de entrada pueden ser clasificados como pares o impares con base en su ordenamiento. Por ejemplo, haciendo referencia a la figura 64, se ilustra una imagen gráfica de las ubicaciones de pixel de entrada (fila 713) y ubicaciones de pixel de salida con base en diversos valores DDAStep (filas 714-718) . En este ejemplo, la fila mostrada representa una fila de píxeles rojos (R) y verdes (Gr) en los datos de imagen Bayer en bruto. Para propósitos de filtración horizontal, el pixel rojo en la posición 0.0 en la fila 713 se puede considerar un pixel par, el pixel verde en la posición 1.0 en la fila 713 se puede considerar un pixel impar, y así sucesivamente. Para ubicaciones de pixel de salida, los píxeles pares e impares pueden ser determinados con base en el bit menos significativo en la porción de fracción (16 bits inferiores) del DDA 711. Por ejemplo, asumiendo un DDAStep de 1.25, tal como se muestra en la fila 715, el bit menos significativo corresponde al bit 14 del DDA, ya que este bit brinda una resolución de 0.25. Por lo tanto, el píxel de salida rojo en la posición DDA (currDDA) 0.0 se puede considerar un píxel par (el bit menos significativo, bit 14, es 0), el píxel de salida verde en currDDA 1.0 (bit 14, es 1), y así sucesivamente. Además, aunque la figura 64 se analiza con respecto a la filtración en la dirección horizontal (utilizando DDAStepX) , se debiera entender que la determinación de los píxeles de entrada y salida pares e impares se puede aplicar en la misma manera con respecto a la filtración vertical (utilizando DDAStepY) . En otras modalidades, los DDAs 711 también se pueden utilizar para rastrear ubicaciones de los píxeles de entrada (por ejemplo, en lugar de rastrear las ubicaciones de píxel de salida deseadas) . Además, se debiera apreciar que DDAStepX y DDAStepY se pueden fijar a los mismos o diferentes valores. Además, asumiendo que se utiliza un patrón Bayer, se debiera observar que el píxel de inicio utilizado por el BCF 652 podría ser cualquier de un píxel Gr, Gb, R o B dependiendo, por ejemplo, de cuál píxel está ubicado en una esquina dentro de la región activa 312.
Con esto en mente, los píxeles de entrada pares/impares son utilizados para generar píxeles de salida pares/impares, respectivamente. Dado que una ubicación de píxel de salida alterna entre la posición par e impar, una ubicación de píxel de entrada fuente central (referida aquí como "currPixel") para propósitos de filtración es determinada mediante el redondeo del DDA a la ubicación de píxel de entrada par o impar más cercana para ubicaciones de píxel de salida pares o impares (con base en DDAStepX, respectivamente) . En una modalidad donde el DDA 711a está configurado para utilizar 16 bits para representar un entero y 16 bits para representar una fracción, currPixel puede ser determinado para posiciones currDDA pares e impares utilizando las ecuaciones 6a y 6b a continuación: Ubicaciones de píxel de salida pares pueden ser determinadas con base en los bits [31:16] de: (currDDA + 1.0) &0xFFFE .0000 (6a) Ubicaciones de píxel de salida impares pueden ser determinadas con base en los bits [31:16] de: (currDDA) I0x0001.0000 (6b) Esencialmente, las ecuaciones anteriores presentan una operación de redondeo, en la cual las posiciones de píxel de salida pares e impares, conforme a lo determinado por currDDA, son redondeadas a las posiciones de píxel de entrada pares e impares más cercanas, respectivamente, para la selección de currPixel.
Adicionalmente , en cada posición currDDA también se puede determinar un índice o fase actual (currlndex) . Tal como se analizó anteriormente, los valores de índice o fase representan la posición fraccional entre píxeles de la posición de píxel de salida con relación a las posiciones de píxel de entrada. Por ejemplo, en una modalidad, se pueden definir 8 fases entre cada posición de píxel de entrada. Por ejemplo, haciendo referencia nuevamente a la figura 64, se proporcionan 8 valores de índice 0-7 entre el primer píxel de entrada rojo en la posición 0.0 y el siguiente píxel de entrada rojo en la posición 2.0. De manera similar, se proporcionan 8 valores de índice 0-7 entre el primer píxel de entrada verde en la posición 1.0 y el siguiente píxel de entrada verde en la posición 3.0. En una modalidad, los valores currlndex pueden ser determinados de acuerdo con las ecuaciones 7a y 7b a continuación para ubicaciones de píxel de salida pares e impares, respectivamente: Ubicaciones de píxel de salida pares pueden ser determinadas con base en los bits [16:14] de: (currDDA+0.125) (7a) Ubicaciones de píxel de salida impares pueden ser determinadas con base en los bits [16:14] de: (currDDA+1.125) (7b) Para las posiciones impares, el cambio de un píxel adicional es equivalente a agregar un desplazamiento de cuatro al índice de coeficiente para ubicaciones de píxel de salida impares a fin de considerar la compensación de índice entre diferentes componentes de color con respecto al DDA 711.
Una vez que se han determinado currPixel y currlndex en una ubicación currDDA particular, el proceso de filtración puede seleccionar uno o más píxeles del mismo color vecinos con base en currPixel (el píxel de entrada central seleccionado) . A manera de ejemplo, en una modalidad donde la lógica de escala horizontal 709 incluye un filtro polifase de 5 derivaciones y la lógica de escala vertical 710 incluye un filtro polifase de 3 derivaciones, dos píxeles del mismo color en cada lado de currPixel en la dirección horizontal pueden ser seleccionados para filtración horizontal (por ejemplo, -2, -1, 0, +1, +2) y un píxel del mismo color en cada lado de currPixel en la dirección vertical puede ser seleccionado para filtración vertical (por ejemplo, -1, 0, +1) . Además, currlndex se puede utilizar como un índice de selección para seleccionar los coeficientes de filtración apropiados a partir de la tabla de coeficiente de filtro 712 para aplicar a los píxeles seleccionados. Por ejemplo, utilizando la modalidad de filtración horizontal de 5 derivaciones/vertical de 3 derivaciones, se pueden proporcionar 5 tablas de profundidad 8 para filtración horizontal, y tres tablas de profundidad 8 para filtración vertical. Aunque se ilustran como parte del BCF 652, se debiera apreciar que las tablas de coeficiente de filtro 712, en algunas modalidades, pueden ser almacenadas en una memoria que esté físicamente separada del BCF 652, tal como la memoria 108.
Antes de analizar las operaciones de escala horizontal y vertical con mayor detalle, la siguiente Tabla 4 muestra ejemplos de valores currPixel y currlndex, conforme a lo determinado con base en diversas posiciones DDA utilizando diferentes valores DDAStep (por ejemplo, podrían aplicar a DDAStepX o DDAStepY) .
TABLA 4 Filtro de compensación de agrupación - ejemplos DDA de cálculo de currPixel y currlndex Para proporcionar un ejemplo, asumir que un tamaño de paso DDA (DDAStep) de 1.5 es seleccionado (fila 716 de la figura 64) , con la posición DDA actual (currDDA) comenzando en 0, indicando una posición de píxel de salida par. Para determinar currPixel, se puede aplicar la Ecuación 6a, tal como se muestra a continuación: currDDA=0.0 (par) 0000 0000 0000 0001. 0000 0000 0000 0000 (currDDA + 1.0) (Y) 1111 1111 1111 1110. 0000 0000 0000 0000 (OxFFFE.0000) 0000 0000 0000 0000. 0000 0000 0000 0000 currPixel (determinado como bits [31:16] del resultado) =0 ; Por lo tanto, en la posición currDDA 0.0 (fila 716) , el píxel central de entrada fuente para filtración corresponde al píxel de entrada rojo en la posición 0.0 de la fila 713.
Para determinar currlndex en currDDA par 0.0, se puede aplicar la Ecuación 7a, tal como se muestra a continuación : currDDA=0.0 (par) 0000 0000 0000 0000 . 0000 0000 0000 0000 (currDDA) + 0000 0000 0000 0000 . 0010 0000 0000 0000 (0.125) 0000 0000 0000 0000 . 0010 0000 0000 0000 currlndex (determinado como bits [16:14] del resultado) = [000] =0; Por lo tanto, en la posición currDDA 0.0 (fila 713) , se puede utilizar un valor currlndex de 0 para seleccionar los coeficientes de filtración a partir de la tabla de coeficientes de filtro 712.
Por consiguiente, la filtración (la cual puede ser vertical u horizontal dependiendo si DDAStep está en la dirección X (horizontal) o Y (vertical) ) se puede aplicar con base en los valores currPixel y currlndex determinados en currDDA 0.0, y el DDA 711 se incrementa por DDAStep (1.5), y los siguientes valores currPixel y currlndex son determinados. Por ejemplo, en la siguiente posición currDDA 1.5 (una posición impar), currPixel se puede determinar utilizando la Ecuación 6b a continuación: currDDA=0.0 ( impar) 00000000 00000001 . 1000 0000 0000 0000 (currDDA) (0) 00000000 00000001 . 0000 00000000 0000 (0x0001.0000) 000000000000 0001 . 1000 00000000 0000 currPixel (determinado como bits [31:16] del resultado) =1 ; Por lo tanto, en la posición currDDA 1.5 (fila 716) , el píxel central de entrada fuente para filtración corresponde al píxel de entrada verde en la posición 1.0 de la fila 713.
Además, currlndex en currDDA impar 1.5 se puede determinar utilizando la Ecuación 7b, tal como se muestra a continuación: currDDA=l .5 ( impar) 0000 0000 0000 0001 . 1000 0000 0000 0000 (currDDA) + 0000 0000 0000 0001 . 0010 0000 0000 0000 (1.125) 0000 0000 0000 0010 . 1010 0000 0000 0000 currlndex (determinado como bits [16:14] del resultado) = [010] =2 : Por lo tanto, en la posición currDDA 1.5 (fila 716) un valor currlndex de 2 puede ser utilizado para seleccionar los coeficientes de filtración apropiados a partir de la tabla de coeficientes de filtro 712. La filtración (la cual puede ser vertical u horizontal dependiendo si DDAStep está en la dirección X (horizontal) o Y (vertical) ) se puede entonces aplicar utilizando estos valores currPixel y currlndex.
A continuación, el DDA 711 es incrementado nuevamente por DDAStep (1.5), teniendo como resultado un valor currDDA de 3.0. El currPixel correspondiente a currDDA 3.0 se puede determinar utilizando la Ecuación 6a tal como se muestra a continuación: currDDA=3.0 ( impar) 0000 0000 0000 0100 . 0000 0000 0000 0000 (currDDA + 1.0) (Y) 1111 1111 1111 1110 . 0000 0000 0000 0000 (OxFFFE.0000) 0000 0000 0000 0100 . 0000 0000 0000 0000 currPixel (determinado como bits) [31:16] del resultado) =4 ; Por lo tanto, en la posición currDDA 3.0 (fila 716) , el píxel central de entrada fuente para filtración corresponde al píxel de entrada rojo en la posición 4.0 de la fila 713.
A continuación, currlndex en currDDA par 3.0 se puede determinar utilizando la ecuación 7a, tal como se muestra a continuación: currDDA=3.0 (par) 0000 0000 0000 001 1 . 0000 0000 0000 0000 (currDDA) + 0000 0000 0000 0000 . 0010 0000 0000 0000 (0.125) 0000 0000 0000 0011 . 0010 0000 0000 0000 currlndex (determinado como bits [16:14] del resultado) = [100] =4; Por lo tanto, en la posición currDDA 3.0 (fila 3716) , un valor currlndex de 4 puede ser utilizado para seleccionar los coeficientes de filtración apropiados a partir de la tabla de coeficientes de filtro 712. Tal como se apreciará, el DDA 711 puede seguir siendo incrementado por DDAStep para cada píxel de salida, y la filtración (la cual puede ser vertical u horizontal dependiendo si DDAStep está en la dirección X (horizontal) o Y (vertical) ) se puede aplicar utilizando el currPixel y currlndex determinados para cada valor currDDA.
Tal como se analizó anteriormente currlndex se puede utilizar como un índice de selección para seleccionar los coeficientes de filtración apropiados a partir de la tabla de coeficientes de filtro 712 para aplicar a los píxeles seleccionados. El proceso de filtración puede incluir obtener los valores de píxel fuente alrededor del píxel central (currPixel) , multiplicar cada uno de los píxeles seleccionados por los coeficientes de filtración apropiados seleccionados de la tabla de coeficientes de filtro 712 con base en currlndex, y sumar los resultados para obtener un valor del píxel de salida en la ubicación correspondiente a currDDA. Además, debido a que la presente modalidad utiliza 8 fases entre píxeles del mismo color, al utilizar la modalidad de filtración horizontal de 5 derivaciones/vertical de 3 derivaciones, se pueden proporcionar cinco tablas de profundidad 8 para la filtración horizontal, y tres tablas de profundidad 8 para la filtración vertical. En una modalidad, cada una de las entradas de la tabla de coeficientes puede incluir un número de punto fijo de 2 -complementos de 16 bits con 3 bits enteros y 13 bits de fracción.
Además, asumiendo un patrón de imagen Bayer, en una modalidad, el componente de escala vertical puede incluir cuatro filtros polifase de 3 derivaciones separados, uno para cada componente de color: Gr, R, B, y Gb. Cada uno de los filtros de 3 derivaciones puede utilizar el DDA 711 para controlar la graduación del píxel central actual y el índice para los coeficientes, tal como se describió anteriormente. De manera similar, los componentes de escala horizontal pueden incluir cuatro filtros polifase de 5 derivaciones separados, uno para cada componente de color: Gr, R, B y Gb. Cada uno de los filtros de 5 derivaciones puede utilizar el DDA 711 para controlar la graduación (por ejemplo, a través de DDAStep) del píxel central actual y el índice para los coeficientes. No obstante, se debiera entender que una cantidad mayor o menos de derivaciones podría ser utilizada por los escalares horizontales y verticales en otras modalidades .
Para casos de límite, los píxeles utilizados en el proceso de filtración horizontal y vertical pueden depender de la relación de la posición DDA actual (currDDA) con relación a un límite de cuadro (por ejemplo, límite definido por la región activa 312 en la figura 23) . Por ejemplo, en filtración horizontal, si la posición currDDA, cuando se compara con la posición del píxel de entrada central (SrcX) y el ancho (SrcWidth) del cuadro (por ejemplo, ancho 322 de la región activa 312 de la figura 23) indica que el DDA 711 está cerca del límite de manera que no hay suficientes píxeles para ejecutar la filtración de 5 derivaciones, entonces se pueden repetir los píxeles de límite de entrada del mismo color. Por ejemplo, si el píxel de entrada central seleccionado está en el borde izquierdo del cuadro, entonces el píxel central se puede replicar dos veces para la filtración horizontal. Si el píxel de entrada central está cerca del borde izquierdo del cuadro de manera que solamente está disponible un píxel entre el píxel de entrada central y el borde izquierdo, entonces, para propósitos de filtración horizontal, el píxel disponible es replicado para proporcionar dos valores de píxel a la izquierda del píxel de entrada central. Además, la lógica de escala horizontal 709 se puede configurar de manera que el número de píxeles de entrada (incluyendo los píxeles originales y replicados) no puede exceder el ancho de entrada. Esto se puede expresar de la siguiente forma: StartX = (((DDAInitX + 0x0001.0000) & 0xFFFE.0000)»16) EndX = (((DDAInitX + DDAStepX * (BCFOutWidth - 1)) 10x0001.0000)» 16) EndX - StartX <= SrcWidth - 1 en donde DDAInitX representa la posición inicial del DDA 711, DDAStepX representa el valor de paso DDA en la dirección horizontal, y BCFOutWidth representa el ancho del cuadro emitido por el BCF 652.
Para filtración vertical, si la posición currDDA, cuando se compara con la posición del píxel de entrada central (SrcY) y el ancho (SrcHeight) del cuadro (por ejemplo, ancho 322 de la región activa 312 de la figura 23) indica que el DDA 711 está cerca del límite de manera que no hay suficientes pixeles para ejecutar la filtración de 3 derivaciones, entonces se pueden repetir los pixeles de límite de entrada. Además, la lógica de escala vertical 710 se puede configurar de manera que el número de pixeles de entrada (incluyendo pixeles originales y replicados) no puede exceder la altura de entrada. Esto se pueden expresar de la siguiente forma: StartY = (((DDAInitY + 0x0001.0000) & 0xFFFE.0000)»16) EndY = (((DDAInitY + DDAStepY * (BCFOutHeight - 1)) | 0x0001.0000)» 16) EndY - StartY <= SrcHeight - 1 en donde, DDAInitY representa la posición inicial del DDA 711, DDAStepY representa el valor de paso DDA en la dirección vertical, y BCFOutHeight representa el ancho del cuadro emitido por el BCF 652.
Haciendo referencia ahora a la figura 65, se muestra un gráfico de flujo que ilustra un método 720 para aplicar filtración de compensación de agrupación a datos de imagen recibidos por la unidad de procesamiento de píxel de etapa inicial 150 de acuerdo con una modalidad. Se apreciará que el método 720 ilustrado en la figura 65 puede aplicar tanto a escala vertical como horizontal. Comenzando en el paso 721, se inicia el DDA 711 y se determina un valor de paso DDA (el cual puede corresponder a DDAStepX para escala horizontal y DDAStepY para escala vertical) . A continuación, en el paso 722, se determina una posición DDA actual (currDDA) , con base en DDAStep. Tal como se analizó anteriormente, currDDA puede corresponder a una ubicación de píxel de salida. Utilizando currDDA, el método 720 puede determinar un píxel central (currPixel) a partir de los datos de píxel de entrada que pueden ser utilizados para filtración de compensación de agrupación para determinar un valor de salida correspondiente en currDDA, tal como se indica en el paso 723. Posteriormente, en el paso 724, se puede determinar un índice correspondiente a currDDA (currlndex) con base en la posición fraccional entre píxeles de currDDA con relación a los píxeles de entrada (por ejemplo, fila 713 de la figura 64) . A manera de ejemplo, en una modalidad donde el DDA incluye 16 bits enteros y 16 bits fracciónales, currPixel puede ser determinado de acuerdo con las ecuaciones 6a y 6b, y currlndex puede ser determinado de acuerdo con las ecuaciones 7a y 7b, tal como se mostró anteriormente. Aunque aquí se describe como un ejemplo la configuración de entero de 16 bits/fracción de 16 bits, se debiera apreciar que se pueden utilizar otras configuraciones del DDA 711 de acuerdo con la presente técnica. A manera de ejemplo, otras modalidades de la DDA 711 se pueden configurar para incluir una porción de entero de 12 bits y una porción de fracción de 20 bits, una porción de entero de 14 bits y una porción de fracción de 18 bits, y así sucesivamente.
Una vez que se determinan currPixel y currlndex, píxeles fuente del mismo color alrededor de currPixel pueden ser seleccionados para filtración de multi-derivación, tal como lo indica el paso 725. Por ejemplo, tal como se analizó anteriormente, una modalidad puede utilizar filtración polifase de 5 derivaciones en la dirección horizontal (por ejemplo, seleccionando 2 píxeles del mismo color en cada lado de currPixel) y puede utilizar filtración polifase de 3 derivaciones en la dirección vertical (por ejemplo, seleccionando 1 píxel del mismo color en cada lado de currPixel) . A continuación, en el paso 726, una vez que se seleccionan los píxeles fuente, se pueden seleccionar coeficientes de filtración a partir de la tabla de coeficientes de filtro 712 del BCF 652 con base en currlndex.
Posteriormente, en el paso 727, se puede aplicar filtración a los píxeles fuente para determinar el valor de un píxel de salida correspondiente a la posición representada por currDDA. Por ejemplo, en una modalidad, los píxeles fuente pueden ser multiplicados por sus coeficientes de filtración respectivos, y los resultados se pueden sumar para obtener el valor de píxel de salida. La dirección en la cual se aplica la filtración en el paso 727 puede ser vertical u horizontal dependiendo si DDAStep está en la dirección X (horizontal) o Y (vertical). Finalmente, en el paso 263, la DDA 711 es incrementada por DDAStep en el paso 728, y el método 720 regresa al paso 722, con lo cual se determina el siguiente valor de píxel de salida utilizando técnicas de filtración de compensación de agrupación aquí analizadas.
Haciendo referencia a la figura 66, de acuerdo con una modalidad se ilustra con más detalle el paso 723 para determinar currPixel a partir del método 720. Por ejemplo, el paso 723 puede incluir el subpaso 729 para determinar si la ubicación de píxel de salida correspondiente a currDDA (del paso 722) es par o impar. Tal como se analizó anteriormente, un pixel de salida par o impar puede ser determinado con base en el bit menos significativo de currDDA con base en DDAStep. Por ejemplo, dado un DDAStep de 1.25, un valor currDDA de 1.25 puede ser determinado como impar, debido a que el bit menos significativo (correspondiente al bit 14 de la porción fraccional de la DDA 711) tiene un valor de 1. Para un valor currDDA de 2.5, el bit 14 es 0, indicando así una ubicación de pixel de salida par.
En la lógica de decisión 730, se realiza una determinación respecto a si la ubicación del pixel de salida correspondiente a currDDA es par o impar. Si el pixel de salida es par, la lógica de decisión 730 continúa con el subpaso 731, en donde currPixel es determinado incrementando el valor currDDA por 1 y redondeando el resultado a la ubicación de pixel de entrada par más cercana, conforme a lo representado por la ecuación 6a anterior. Si el pixel de salida es impar, entonces la lógica de decisión 730 continúa con el subpaso 732, en donde currPixel es determinado redondeando el valor currDDA a la ubicación de pixel de entrada impar más cercana, conforme a lo representado por la ecuación 6b anterior. El valor currPixel entonces se puede aplicar al paso 725 del método 720 para seleccionar los píxeles fuente para filtración, tal como se analizó anteriormente .
Haciendo referencia también a la figura 67, el paso 724 para determinar currlndex del método 720 se ilustra con mayor detalle de acuerdo con una modalidad. Por ejemplo, el paso 724 puede incluir el subpaso 733 de determinar si la ubicación de píxel de salida correspondiente a currDDA (del paso 722) es par o impar. Esta determinación se puede realizar en una manera similar al paso 729 de la figura 66. En la lógica de decisión 734, se toma una determinación respecto a si la ubicación de píxel de salida correspondiente a currDDA es par o impar. Si el píxel de salida es par, la lógica de decisión 734 continúa con el subpaso 735, en donde currlndex es determinado incrementando el valor currDDA por un paso de índice determinando currlndex con base en el bit entero de orden inferior y los dos bits de fracción de orden superior del DDA 711. Por ejemplo, en una modalidad en donde se proporcionan 8 fases entre cada píxel del mismo color, y en donde el DDA incluye 16 bits enteros y 16 bits de fracción, un paso de índice puede corresponder a 0.125, y currlndex se puede determinar con base en los bits [16:14] del valor currDDA incrementado por 0.125 (por ejemplo, Ecuación 7a) . Si el píxel de salida es impar, la lógica de decisión 734 continua al subpaso 736, en donde currlndex es determinado incrementando el valor currDDA por un paso de índice y un desplazamiento de píxel, y determinando currlndex con base en el bit entero de orden inferior y los dos bits de fracción de orden superior de la DDA 711. Por lo tanto, el una modalidad en donde se proporcionan 8 fases entre cada píxel del mismo color, y en donde el DDA incluye 16 bits enteros y 16 bits de fracción, un paso de índice puede corresponder a 0.125, un desplazamiento de píxel puede corresponder a 1.0 (un desplazamiento de 8 pasos de índice al siguiente píxel del mismo color) , y currlndex se puede determinar con base en los bits [16:14] del valor currDDA incrementado por 1.125 (por ejemplo, ecuación 7b) .
Aunque la modalidad aquí ilustrada proporciona el BCF 652 como un componente de la unidad de procesamiento de píxel de etapa inicial 150, otras modalidades pueden incorporar el BCF 652 en un conducto de procesamiento de datos de imagen en bruto de la secuencia ISP 82 que, como se analiza adicionalmente a continuación, puede incluir lógica de detección/corrección de píxeles defectuosos, bloques de ganancia/desplazamiento/compensación, lógica de reducción de ruido, lógica de corrección de sombreado de lente, y lógica de interpolación cromática. Además, en modalidades donde la lógica de detección/corrección de píxeles defectuosos, bloques de ganancia/desplazamiento/compensación, lógica de reducción de ruido, lógica de corrección de sombreado de lente antes mencionados no se basan en la colocación lineal de los píxeles, el BCF 652 se puede incorporar con la lógica de interpolación cromática a fin de ejecutar la filtración de compensación de agrupación y reposicionar los píxeles antes de la interpolación cromática, ya que la interpolación cromática generalmente se basa en el posicionamiento espacial uniforme de los píxeles. Por ejemplo, en una modalidad, el BCF 652 puede ser incorporado en cualquier parte entre la entrada del sensor y la lógica de interpolación cromática, con la filtración temporal y/o la detección/corrección de píxeles defectuosos siendo aplicados a los datos de imagen en bruto antes de la compensación de agrupación.
Tal como se analizó anteriormente, la salida del BCF 652, la cual puede ser la salida FEProcOut (109) que tiene datos de imagen distribuidos espacialmente de manera uniforme (por ejemplo, muestra 702 de la figura 62), puede ser reenviada a la lógica de procesamiento de secuencia ISP 82 para procesamiento adicional. Sin embargo, antes de cambiar el foco de este análisis a la lógica de procesamiento de secuencia ISP 82, primero se proporcionará una descripción más detallada de diversas funcionalidades que pueden ser proporcionadas por las unidades de procesamiento de estadísticas (por ejemplo, 142 y 144) que pueden ser implementadas en la lógica de etapa inicial ISP 80.
Haciendo referencia nuevamente a la descripción general de las unidades de procesamiento de estadísticas 142 y 144, estas unidades se pueden configurar para recopilar diversas estadísticas referentes a los sensores de imagen que capturan y proporcionan las señales de imagen en bruto (SIfO y SIfl) , tal como estadísticas relacionadas con la autoexposición, balance automático de blancos, enfoque automático, detección de parpadeo, compensación de nivel de negro, y corrección de sombreado de lente, y así sucesivamente. Al hacer esto, las unidades de procesamiento de estadísticas 142 y 144 primero pueden aplicar una o más operaciones de procesamiento de imagen a sus señales de entrada respectivas, SIfO (desde SensorO) y SIfl (desde Sensorl) .
Por ejemplo, haciendo referencia a la figura 68, se ilustra de acuerdo con una modalidad una vista de diagrama en bloques más detallada de la unidad de procesamiento de estadística 142 asociada con SensorO (90a) . Tal como se muestra, la unidad de procesamiento de estadísticas 142 puede incluir los siguientes bloques funcionales: lógica de detección y corrección de píxeles defectuosos 738, lógica de compensación de nivel de negro (BLC) 739, lógica de corrección de sombreado de lente 740, lógica BLC inversa 741, y lógica de recopilación de estadísticas 742. Cada uno de estos bloques funcionales se analizará a continuación. Además, se debiera entender que la unidad de procesamiento de estadísticas 144 asociada con Sensorl (90b) se puede implementar en una manera similar.
Inicialmente , la salida de la lógica de selección 146 (por ejemplo, SIfO o SIfInO) es recibida por la lógica de corrección de píxeles defectuosos de etapa inicial 738. Tal como se apreciará, "píxeles defectuosos" se puede entender para hacer referencia a píxeles de generación de imagen dentro de los sensores de imagen 90 que no detectan los niveles de luz con precisión. Los píxeles defectuosos se pueden atribuir a un número de factores, y pueden incluir píxeles "calientes" (o de fuga) , píxeles "atascados" , y "píxeles muertos" . Un píxel "caliente" generalmente aparece como más brillante que un píxel no defectuoso dada la misma cantidad de luz en la misma ubicación espacial. Los píxeles calientes pueden ser el resultado de fallas de restablecimiento y/o una alta fuga. Por ejemplo, un píxel caliente puede exhibir una fuga de carga más alta de lo normal con relación a los píxeles no defectuosos, y por lo tanto puede parecer más brillante que los píxeles no defectuosos. Adicionalmente , los píxeles "muertos" y "atascados" pueden ser el resultado de impurezas, tal como polvo u otros materiales de rastro, contaminando el sensor de imagen durante el proceso de fabricación y/o ensamble, lo cual puede ocasionar que ciertos pixeles defectuosos sean más oscuros o más brillantes que un píxel no defectuoso, o pueden ocasionar que un píxel defectuoso esté fijo a un valor particular sin considerar la cantidad de luz a la cual realmente esté expuesto. Adicionalmente , los pixeles muertos y atascados también pueden ser el resultado de fallas del circuito que ocurren durante la operación del sensor de imagen. A manera de ejemplo, un píxel atascado siempre puede parecer que está encendido (por ejemplo, completamente cargado) y por lo tanto parece más brillante, mientras que un píxel muerto parece siempre estar apagado.
La lógica de detección y corrección de pixeles defectuosos (DPDC) 738 en la lógica de etapa inicial ISP 80 puede corregir (por ejemplo, reemplazar valores de píxel defectuoso) los pixeles defectuosos antes que sean considerados en la recopilación de estadísticas (por ejemplo, 742) . En una modalidad, la corrección de pixeles defectuosos se ejecuta de manera independiente para cada componente de color (por ejemplo, R, B, Gr y Gb para un patrón Bayer) . Generalmente, la lógica DPDC de etapa inicial 460 puede permitir la corrección de defecto dinámico, en donde las ubicaciones de los pixeles defectuosos son determinadas automáticamente con base en los gradientes direccionales calculados utilizando píxeles vecinos del mismo color. Tal como se entenderá, los defectos pueden ser "dinámicos" en el sentido de que la caracterización de un píxel como siendo defectuoso en un momento determinado puede depender de los datos de imagen en los píxeles vecinos. A manera de ejemplo, un píxel atascado que siempre está en la máxima brillantez puede no ser visto como un píxel defectuoso si la ubicación del píxel atascado está en un área de la imagen actual que es dominada por colores más brillantes o blanco. Por el contrario, si el píxel atascado está es una región de la imagen actual que es dominada por colores más oscuros o negro, entonces el píxel atascado puede ser identificado como un píxel defectuoso durante el procesamiento por la lógica DPDC 738 y puede ser corregido por consiguiente.
La lógica DPDC 738 puede utilizar uno o más píxeles vecinos horizontales del mismo color en cada lado de un píxel actual para determinar si el píxel actual es defectuoso utilizando gradientes direccionales píxel-a-píxel . Si un píxel actual es identificado como defectuoso, el valor del píxel defectuoso puede ser reemplazado con el valor de un píxel vecino horizontal. Por ejemplo, en una modalidad, se utilizan cinco píxeles vecinos horizontales del mismo color que están dentro del límite del cuadro en bruto 310 (figura 23), en donde los cinco píxeles vecinos horizontales incluyen el píxel actual y dos píxeles vecinos en cualquier lado. Por lo tanto, tal como se ilustra en la figura 69, para un componente de color determinado C y para el píxel actual P, los píxeles vecinos horizontales PO, Pl, P2 y P3 pueden ser considerados por la lógica DPDC 738. No obstante, se debiera observar que dependiendo de la ubicación del píxel actual P, los píxeles fuera del cuadro en bruto 310 no son considerados cuando se calculan los gradientes píxel -a-píxel .
Por ejemplo, tal como se muestra en la figura 69, en un caso de "borde izquierdo" 743, el píxel actual P está en el borde más a la izquierda del cuadro en bruto 310 y, por lo tanto, los píxeles vecinos PO y Pl fuera del cuadro en bruto 310 no son considerados, dejando solamente los píxeles P, P2 y P3 (N=3) . En un caso de "borde izquierdo + 1" 744, el píxel actual P está a un píxel de unidad lejos del borde más a la izquierda del cuadro en bruto 310 y, por lo tanto, el píxel P0 no es considerado. Esto deja solamente los píxeles Pl, P, P2 y P3 (N=4) . Además, en un caso "centrado" 745, los píxeles P0 y Pl en el lado izquierdo del píxel actual P y los píxeles P2 y P3 en el lado derecho del píxel actual P están dentro del límite del cuadro en bruto 310 y, por lo tanto, todos los píxeles vecinos P0, Pl, P2 y P3 (N=5) son considerados en el cálculo de los gradientes píxel -a-píxel . Adicionalmente , se pueden encontrar casos similares 746 y 747 a medida que se aproxima al borde más a la derecha del cuadro en bruto 310. Por ejemplo, dado el caso de "borde derecho-1" 746, el píxel actual P está a un píxel de unidad lejos del borde más a la derecha del cuadro en bruto 310 y, por lo tanto, el píxel P3 no es considerado (N=4) . De manera similar, en el caso de "borde derecho" 747, el píxel actual P está en el borde más a la derecha del cuadro en bruto 310 y, por lo tanto, ambos píxeles vecinos P2 y P3 no son considerados (N=3) .
En la modalidad ilustrada, para cada píxel vecino (k=0 a 3) dentro del límite de la imagen (por ejemplo, cuadro en bruto 310) , los gradientes píxel-a-píxel se pueden calcular de la siguiente forma: Gk=abs (P-Pk) , para 0<J<3 (solo para k dentro del cuadro en bruto) (8) Una vez que se han determinado los gradientes píxel-a-píxel, la detección de píxeles defectuosos se puede ejecutar a través de la lógica DPDC 738 de la siguiente forma. Primero, se asume que un píxel es defectuoso si un cierto número de sus gradientes Gk está en o por debajo de un umbral particular, denotado por la variable dprTh. Por lo tanto, para cada píxel, se acumula un conteo (C) del número de gradientes para píxeles vecinos dentro de los límites de imagen que están en o por debajo del umbral dprTh. A manera de ejemplo, para cada píxel vecino dentro del cuadro en bruto 310, el conteo acumulado C de los gradientes que está en o por debajo del umbral dprTh se puede calcular de la siguiente forma : N C = y (Gk <dprTh) , t (9) para 0<\k<3 (solo para k dentro del cuadro en bruto) Tal como se apreciará, dependiendo de los componentes de color, el valor de umbral dprTh puede variar. A continuación, si el conteo acumulado C es determinado como menor que o igual a un conteo máximo, denotado por la variable dprMaxC, entonces el píxel se puede considerar defectuoso. Esta lógica se expresa de la siguiente manera: si (C =dprMaxC) , entonces el píxel es defectuoso (10) Los píxeles defectuosos son reemplazados utilizando un número de convenciones de reemplazo. Por ejemplo, en una modalidad, un píxel defectuoso puede ser reemplazado con el píxel a su izquierda inmediata, Pl . En una condición de límite (por ejemplo, Pl está fuera del cuadro en bruto 310) , un píxel defectuoso puede ser reemplazado con el píxel a su derecha inmediata, P2. Además, se debiera entender que los valores de reemplazo pueden ser retenidos o propagados para operaciones sucesivas de detección de píxeles defectuosos. Por ejemplo, haciendo referencia al conjunto de píxeles horizontales mostrados en la figura 69, si PO o Pl fueron identificados previamente por la lógica DPDC 738 como píxeles defectuosos, sus valores de reemplazo correspondientes pueden ser utilizados para detección de píxeles defectuosos y el reemplazo del píxel actual P.
Para resumir las técnicas de detección y corrección de píxeles defectuosos antes analizadas, en la figura 70 se proporciona un gráfico de flujo que muestra dicho proceso, y al que se hará referencia a través del número de referencia 748. Tal como se muestra, el proceso 748 comienza en el paso 749, en el cual se recibe un píxel actual (P) y se identifica un conjunto de píxeles vecinos. De acuerdo con la modalidad antes descrita, los píxeles vecinos pueden incluir dos píxeles horizontales del mismo componente de color de lados opuestos del píxel actual (por ejemplo, PO, Pl, P2 y P3) . A continuación, en el paso 750 se calculan los gradientes píxel -a-píxel horizontales con respecto a cada píxel vecino dentro del cuadro en bruto 310, tal como se describió en la ecuación 8 anterior. Posteriormente, en el paso 751, se determina un conteo C del número de gradientes que son menores que o iguales a un umbral particular dprTh. Tal como se muestra en la lógica de decisión 752, si C es menor o igual a dprMaxC, entonces el proceso 748 continúa al paso 753, y el píxel actual es identificado como defectuoso. El píxel defectuoso entonces es corregido en el paso 754 utilizando un valor de reemplazo. Adicionalmente , haciendo referencia nuevamente a la lógica de decisión 752, si C es mayor que dprMaxC, entonces el proceso continúa al paso 755, y el píxel actual es identificado como no defectuoso, y su valor no es modificado.
Se debiera observar que las técnicas de detección/corrección de píxeles defectuosos aplicadas durante el procesamiento de estadísticas de etapa inicial ISP pueden ser menos robustas que la detección/corrección de píxeles defectuosos que se realiza en la lógica de conducto ISP 82. Por ejemplo, tal como se analizará con mayor detalle a continuación, la detección/corrección de píxeles defectuosos ejecutada en la lógica de conducto ISP 82, además de la corrección del defecto dinámico, puede permitir la corrección del defecto fijo, en donde las ubicaciones de los píxeles defectuosos son conocidas con antelación y cargadas en una o más tablas de defectos. Además, la corrección de defecto dinámico, en la lógica de conducto ISP 82, también puede considerar los gradientes de píxel en las direcciones horizontal y vertical, y también puede permitir la detección/corrección de granularidad óptica, tal como se analizará a continuación.
Volviendo a la figura 68, la salida de la lógica DPDC 738 entonces es pasada a la lógica de compensación de nivel de negro (BLC) 739. Lo lógica BLC 739 puede permitir la ganancia digital, desplazamiento y recorte independientemente para cada componente de color "c" (por ejemplo, R, B, Gr y Gb para Bayer) en los píxeles utilizados para recopilación de estadísticas. Por ejemplo, tal como se expresa a través de la siguiente operación, el valor de entrada para el píxel actual primero es desplazado por un valor señalizado, y después multiplicado por una ganancia.
Y = (X+0 [c] )xG [c] , (11) en donde X representa el valor de píxel de entrada para un componente de color determinado C (por ejemplo, R, B, Gr o Gb) , 0 [c] representa un desplazamiento de 16 bits con signo para el componente de color actual c, y G [c] representa un valor de ganancia para el componente de color c. En una modalidad, la ganancia G[c] puede ser un número sin signo de 16 bits con 2 bits enteros y 14 bits de fracción (por ejemplo, 2.14 en representación de punto flotante), y la ganancia G[c] se puede aplicar con redondeo. A manera de ejemplo solamente, la ganancia G[c] puede tener un rango de entre 0 a 4X (por ejemplo, 4 veces el valor de píxel de entrada) .
A continuación, tal como se muestra en la siguiente Ecuación 12, el valor calculado Y, el cual está con signo, entonces puede ser recortado a un rango mínimo y máximo : Y = (Y < min[c]? mintc] : (Y > max[c]? max[c]:Y (12) Las variables min[c] y max[c] pueden representar valores de recorte de 16 bits con signo para los valores de salida mínimo y máximo, respectivamente. En una modalidad, la lógica BLC 739 también se puede configurar para mantener un conteo del número de pixeles que fueron recortados por arriba y debajo del máximo y mínimo, respectivamente, por componente de color.
Posteriormente, la salida de la lógica BLC 739 es reenviada a la lógica de corrección de sombreado de lente (LSC) 740, la lógica LSC 740 se puede configurar para aplicar una ganancia apropiada sobre una base por píxel para compensar las caídas en intensidad, las cuales por lo general son aproximadamente proporcionales a la distancia desde el centro óptico de la lente 88 del dispositivo de generación de imagen 30. Tal como se puede apreciar, dichas caídas pueden ser el resultado de la óptica geométrica de la lente. A manera de ejemplo, una lente que tiene propiedades ópticas ideales puede ser modelada como la cuarta potencia del coseno del ángulo incidente, cos4(9), referido como la ley eos4. Sin embargo, debido a que la fabricación de la lente no es perfecta, diversas irregularidades en la lente pueden ocasionar que las propiedades ópticas se desvíen del modelo de eos4 asumido. Por ejemplo, los bordes más delgados de la lente por lo general muestran la mayor cantidad de irregularidades. Adicionalmente , las irregularidades en los patrones de sombreado de la lente también pueden ser el resultado de un arreglo de microlente dentro de un sensor de imagen que no esté perfectamente alineado con el filtro de arreglo de color. Además, el filtro infrarrojo (IR) en algunas lentes puede ocasionar que la caída dependa del iluminante y, por lo tanto, las ganancias de sombreado de la lente se pueden adaptar dependiendo de la fuente de luz detectada.
Haciendo referencia a la figura 71, se ilustra un perfil tridimensional 756 que muestra la intensidad de la luz contra la posición del píxel para una lente típica. Tal como se muestra, la intensidad de la luz cerca del centro 757 de la lente gradualmente cae hacia las esquinas o bordes 758 de la lente. Las irregularidades de sombreado de la lente mostradas en la figura 71 se pueden ilustrar mejor en la figura 72, la cual muestra un dibujo a color de una imagen 759 que muestra las caídas en la intensidad de la luz hacia las esquinas y bordes. Particularmente, se debiera observar que la intensidad de la luz en el centro aproximado de la imagen parece ser más brillante que la intensidad de la luz en las esquinas y/o bordes de la imagen.
De acuerdo con modalidades de las presentes técnicas, las ganancias de corrección de sombreado de lente pueden ser especificadas como una rejilla bidimensional de ganancias por canal de color (por ejemplo, Gr, R, G, Gb para un filtro BAyer) . Los puntos de rejilla de ganancia pueden estar distribuidos a intervalos horizontales y verticales fijos dentro del cuadro en bruto 310 (figura 23) . Tal como se analizó anteriormente en la figura 23, el cuadro en bruto 310 puede incluir una región activa 312 la cual define un área sobre la cual se está ejecutando el procesamiento para una operación de procesamiento de imagen particular. Con respecto a la operación de corrección de sombreado de lente, una región de procesamiento activa, la cual se puede referir como la región LSC, está definida dentro de la región de cuadro en bruto 310. Tal como se analizará a continuación, la región LSC debe estar completamente dentro o en los límites de la rejilla de ganancia, de otra manera los resultados pueden ser indefinidos .
Por ejemplo, haciendo referencia a la figura 73, se muestra una región LSC 760 y una rejilla de ganancia 761 que pueden ser definidas dentro del cuadro en bruto 310. La región LSC 760 puede tener un ancho 762 y un alto 763, y puede estar definida por un desplazamiento-x 764 y un desplazamiento-y 765 con respecto al límite del cuadro en bruto 310. También se proporcionan desplazamientos de rejilla (por ejemplo, desplazamiento-x de rejilla 766 y desplazamiento-y de rejilla 767) desde la base 768 de las ganancias de rejilla 761 al primer píxel 769 en la región LSC 760. Estos desplazamientos pueden estar dentro del primer intervalo de rejilla para un componente de color determinado. Los intervalos de punto de rejilla horizontales (dirección x) y verticales (dirección y) 770 y 771, respectivamente, pueden ser especificados de manera independiente para cada canal de colo .
Tal como se analizó anteriormente, asumiendo el uso de un arreglo de filtro de color Bayer, se pueden definir 4 canales de color de ganancias de rejilla (R, B, Gr y Gb) . En una modalidad, puede estar disponible un total de 4K puntos de rejilla (4096), y para cada canal de color, se puede proporcionar una dirección base para la ubicación de inicio de las ganancias de rejilla, tal como utilizando un señalizador. Además, los intervalos de punto de rejilla horizontales (770) y verticales (771) pueden ser definidos en términos de píxeles a la resolución de un plano de color y, en algunas modalidades, pueden ser proporcionados para intervalos de punto de rejilla separados por una potencia de 2, tal como por 8, 16, 32, 64 o 128, etcétera, en las direcciones horizontal y vertical. Tal como se puede apreciar, utilizando una potencia de 2 , se puede lograr una implementación eficiente de interpolación de ganancia utilizando un desplazamiento (por ejemplo, división) y operaciones de adición. Al utilizar estos parámetros, se pueden utilizar los mismos valores de ganancia incluso a medida que la región de cultivo del sensor de imagen está cambiando. Por ejemplo, solamente se necesitan actualizar unos pocos parámetros para alinear los puntos de rejilla con la región cultivada (por ejemplo, actualizando los desplazamientos de rejilla 770 y 771) en lugar de actualizar todos los valores de ganancia de rejilla. A manera de ejemplo solamente, esto puede ser útil cuando se utiliza el cultivo durante operaciones digitales de agrandamiento-reducción. Además, aunque la rejilla de ganancia 761 mostrada en la modalidad de la figura 73 se muestra teniendo puntos de rejilla por lo general igualmente separados, se debiera entender que en otras modalidades, los puntos de rejilla pueden no necesariamente estar igualmente separados . Por ejemplo, en algunas modalidades, los puntos de rejilla pueden estar distribuidos de manera no uniforme (por ejemplo, logarítmicamente), de manera que los puntos de rejilla están menos concentrados en el centro de la región LSC 760, pero más concentrados hacia las esquinas de la región LSC 760, típicamente en donde es más notable la distorsión de sombreado de lente.
De acuerdo con las técnicas de corrección de sombreado de lente aquí divulgadas, cuando una ubicación de píxel actual está ubicada fuera de la región LSC 760, ninguna ganancia es aplicada (por ejemplo, el píxel es pasado sin cambios) . Cuando la ubicación de píxel actual está en una ubicación de rejilla de ganancia, se puede utilizar el valor de ganancia en ese punto de rejilla particular. Sin embargo, cuando una ubicación de píxel actual está entre puntos de rejilla, la ganancia puede ser interpolada utilizando interpolación bi-lineal. Un ejemplo de interpolación de la ganancia para la ubicación de píxel "G" en la figura 74 se proporciona a continuación.
Tal como se muestra en la figura 74, el píxel G está entre los puntos de rejilla GO, Gl, G2 y G3 ; los cuales pueden corresponder a las ganancias de izquierda superior, derecha superior, izquierda inferior y derecha inferior, respectivamente, con relación a la ubicación de píxel actual G. El tamaño horizontal y vertical del intervalo de rejilla es representado por X y Y, respectivamente. Adicionalmente , ii y jj representan los desplazamientos de píxel horizontal y vertical, respectivamente, con relación a la posición de la ganancia izquierda superior GO . Con base en estos factores, la ganancia correspondiente a la posición G entonces puede ser interpolada de la siguiente manera: (G0(7 - jj)(X - ii)) + (Gl(Y - jj)(ii)) + (G2(jj)(X - ii)) + (G3(ii)(jj)) XY (13a) Los términos en la Ecuación 13a anterior entonces se pueden combinar para obtener la siguiente expresión: G _ G0[XY - X (jj) - Y(ii) + (iiXjj)] + Gl[Y(ii) - (ii)(jj)]+ G2[X (jj) - (ii)(jj)] + G3[(ii)(jj)} XY (13b) En una modalidad, el método de interpolación puede ser ejecutado por incrementos, en lugar de utilizar un multiplicador en cada píxel, reduciendo así la complejidad del cálculo. Por ejemplo, el término (ii) (jj) se puede obtener utilizando una sumadora que se puede inicializar a 0 en la ubicación (0,0) de la rejilla de ganancia 761 y se puede incrementar por el número de fila actual cada vez que el número de columna actual aumenta por un píxel. Tal como se analizó anteriormente, debido a que los valores de X y Y pueden ser seleccionados como potencias de dos, la interpolación de ganancia se puede lograr utilizando una operación de desplazamiento simple. Por lo tanto, el multiplicador solamente se necesita en el punto de rejilla GO (en lugar de necesitarse en cada píxel) , y solamente se necesitan operaciones de adición para determinar la ganancia interpolada para los pxxeles restantes.
En algunas modalidades, la interpolación de ganancias entre los puntos de rejilla puede utilizar una precisión de 14 bits, y las ganancias de rejilla pueden ser valores de 10 bits sin signo con 2 bits enteros y 8 bits fracciónales (por ejemplo, representación de punto de flotación 2.8). Utilizando esta convención, la ganancia puede tener un rango de entre 0 y 4X, y la resolución de ganancia entre puntos de rejilla puede ser 1/256.
Las técnicas de corrección de sombreado de lente pueden ser ilustradas adicionalmente mediante el proceso 772 mostrado en la figura 75. Tal como se muestra, el proceso 772 comienza en el paso 773, en el cual se determina la posición de un píxel actual con relación a los límites de la región LSC 760 de la figura 73. A continuación, la lógica de decisión 774 determina si la posición del píxel actual está dentro de la región LSC 760. Si la posición del píxel actual está fuera de la región LSC 760, el proceso 772 continúa al paso 775, y no se aplica ganancia alguna al pixel actual (por ejemplo, el pixel pasa sin cambios) .
Si la posición del pixel actual está dentro de la región LSC 760, el proceso 772 continúa a la lógica de decisión 776, en la cual se determina adicionalmente si la posición del pixel actual corresponde a un punto de rejilla dentro de la rejilla de ganancia 761. Si la posición del pixel actual corresponde a un punto de rejilla, entonces el valor de ganancia en ese punto de rejilla es seleccionado y aplicado al pixel actual, tal como se muestra en el paso 777. Si la posición de pixel actual no corresponde a un punto de rejilla, entonces el proceso 772 continúa al paso 778, y una ganancia es interpolada con base en los puntos de rejilla fronterizos (por ejemplo, G0, Gl, G2 y G3 de la figura 74) . Por ejemplo, la ganancia interpolada puede ser calculada de acuerdo con las ecuaciones 13a y 13b, tal como se analizó anteriormente. Posteriormente, el proceso 772 finaliza en el paso 779, en el cual la ganancia interpolada del paso 778 es aplicada al pixel actual.
Tal como se apreciará, el proceso 772 puede ser repetido para cada pixel de los datos de imagen. Por ejemplo, tal como se muestra en la figura 76, se ilustra un perfil tridimensional que muestra las ganancias que pueden ser aplicadas a cada posición de pixel dentro de una región LSC (por ejemplo, 760) . Tal como se muestra, la ganancia aplicada en las esquinas 780 de la imagen puede ser generalmente más grande que la ganancia aplicada al centro 781 de la imagen debido a la mayor caída en la intensidad de la luz en las esquinas, tal como se muestra en las figuras 71 y 72. Al utilizar las técnicas de corrección de sombreado de lente, aquí descritas, la apariencia de las caídas de intensidad de luz en la imagen puede ser reducida o sustancialmente eliminada. Por ejemplo, la figura 77 proporciona un ejemplo de la manera en que el dibujo a color de la imagen 759 de la figura 72 puede aparecer después que se aplica la corrección de sombreado de lente. Tal como se muestra, en comparación con la imagen original de la figura 72, la intensidad de luz general por lo regular es más uniforme a través de la imagen. Particularmente, la intensidad de la luz en el centro aproximado de la imagen puede ser sustancialmente igual a los valores de intensidad de luz en las esquinas y/o bordes de la imagen. Adicionalmente, tal como se mencionó antes, el cálculo de ganancia interpolada (Ecuaciones 13a y 13b) , en algunas modalidades puede ser reemplazado con una "delta" aditiva entre puntos de rejilla sacando ventaja de la estructura de incremento de columna y fila secuencial. Tal como se apreciará, esto reduce la complejidad computacional .
En modalidades adicionales, además de utilizar ganancias de rejilla, se utiliza un componente de ganancia global por color que es escalado como una función de la distancia desde el centro de la imagen. El centro de la imagen puede ser proporcionado como un parámetro de entrada, y puede ser calculado analizando la amplitud de la intensidad de la luz de cada píxel de imagen en la imagen uniformemente iluminada. La distancia radial entre el píxel central identificado y el píxel actual, entonces puede ser utilizada para obtener una ganancia radial linealmente escalada, Gr, tal como se muestra a continuación: Gr=Gp[c]xR, (14) en donde Gp[c] representa un parámetro de ganancia global para cada componente de color c (por ejemplo, componentes R, B, Gr y Gb para un patrón Bayer) , y en donde R representa la distancia radial entre el píxel central y el píxel actual.
Con referencia a la figura 78, la cual muestra la región LSC 760 antes analizada, la distancia R puede ser calculada o estimada utilizando varias técnicas. Tal como se muestra, el píxel C correspondiente al centro de la imagen puede tener las coordenadas (x0( yo) , Y el píxel actual G puede tener las coordenadas (xG, YG) · En una modalidad, la lógica LSC 740 puede calcular la distancia R utilizando la siguiente Ecuación: (15) En otra modalidad, se puede utilizar una fórmula de cálculo más simple, que se muestra a continuación, para obtener un valor estimado para R.
R = a x max(abs(xG - x0), abs(yG - yQ)) + fi x min(abs(xG - x0), abs(yG - y0)) (16) En la Ecuación 16, los coeficientes de estimación a y ß se pueden escalar a valores de 8 bits. A manera de ejemplo solamente, en una modalidad, a puede ser igual a aproximadamente 123/128 y ß puede ser igual a aproximadamente 51/128 para proporcionar un valor estimado para R. Al utilizar estos valores de coeficiente, el error más grande puede ser aproximadamente 4%, con un error medio de aproximadamente 1.3%. Por lo tanto, aún cuando la técnica de estimación de cierta manera puede ser menos precisa que utilizando la técnica de cálculo al determinar R (Ecuación 15) , el margen de error es lo suficientemente bajo que los valores estimados o R son convenientes para determinar los componentes de ganancia radial para las técnicas de corrección de sombreado de la lente presentes.
La ganancia radial Gr entonces se puede multiplicar por el valor de ganancia de rejilla interpolado G (Ecuaciones 13a y 13b) para el píxel actual a fin de determinar una ganancia total que puede ser aplicada al píxel actual. El píxel de salida Y se obtiene multiplicando el valor de píxel de entrada X con la ganancia total, tal como se muestra a continuación : Y= (GxGrXX) (17) Por lo tanto, de acuerdo con la presente técnica, la corrección de sombreado de lente puede ser ejecutada utilizando solamente la ganancia interpolada, tanto los componentes de ganancia interpolada como de ganancia radial. Alternativamente, la corrección de sombreado de lente también se puede lograr utilizando solamente la ganancia radial en conjunto con una tabla de rejilla radial que compensa los errores de aproximación radial. Por ejemplo, en lugar de una rejilla de ganancia rectangular 761, tal como se muestra en la figura 73, se puede proporcionar una rejilla de ganancia radial que tenga una pluralidad de puntos de rejilla definiendo ganancias en las direcciones radial y angular. Por lo tanto, cuando se determina la ganancia a aplicar a un píxel que no se alinea con uno de los puntos de rejilla radial dentro de la región LSC 760, la interpolación se puede aplicar utilizando cuatro puntos de rejilla que encierran el píxel para determinar una ganancia de sombreado de lente interpolada apropiada.
Haciendo referencia a la figura 79, el uso de componentes de ganancia radial e interpolada en corrección de sombreado de lente se ilustra a través del proceso 782. Se debiera observar que el proceso 782 puede incluir pasos que son similares al proceso 772, descrito anteriormente en la figura 75. Por consiguiente, dichos pasos han sido numerados con números de referencia similares. Comenzando en el paso 773, el píxel actual es recibido y se determina su ubicación con relación a la región LSC 760. A continuación, lógica de decisión 774 determina si la posición del píxel actual está dentro de la región LSC 760. Si la posición de píxel actual está fuera de la región LSC 760, el proceso 782 continua al paso 775, y ninguna ganancia se aplica al píxel actual (por ejemplo, el píxel pasa sin cambio) . Si la posición del píxel actual está dentro de la región LSC 760, entonces el proceso 782 puede continuar simultáneamente al paso 783 y la lógica de decisión 776. Haciendo referencia primero al paso 783, se recuperan datos que identifican el centro de la imagen. Tal como se analizó anteriormente, la determinación del centro de la imagen puede incluir analizar amplitudes de intensidad de luz para los píxeles bajo iluminación uniforme. Esto puede ocurrir durante la calibración, por ejemplo. Por lo tanto, se debiera entender que el paso 783 no necesariamente abarca calcular repetidamente el centro de la imagen para el procesamiento de cada píxel, sino que se puede referir a la recuperación de los datos (por ejemplo, coordenadas) del centro de la imagen previamente determinado. Una vez que se identifica el centro de la imagen, el proceso 782 puede continuar al paso 784, en donde se determina la distancia entre el centro de la imagen y la ubicación del píxel actual (R) . Tal como se analizó anteriormente, el valor de R se puede calcular (Ecuación 15) o estimar (Ecuación 16) . Después, en el paso 785, se puede calcular un componente de ganancia radial Gr utilizando la distancia R y el parámetro de ganancia global correspondiente al componente de color del píxel actual (Ecuación 14) . El componente de ganancia radial Gr se puede utilizar para determinar la ganancia total, tal como se analizará en el paso 787 a continuación.
Haciendo referencia nuevamente a la lógica de decisión 776, se determina si la posición del píxel actual corresponde a un punto de rejilla dentro de la rejilla de ganancia 761. Si la posición del píxel actual corresponde a un punto de rejilla, entonces se determina el valor de ganancia en ese punto de rejilla, tal como se muestra en el paso 786. Si la posición de píxel actual no corresponde a un punto de rejilla, entonces el proceso 782 continúa al paso 778, y se calcula una ganancia interpolada con base en los puntos de rejilla fronterizos (por ejemplo, G0 , Gl, G2 y G3 de la figura 74) . Por ejemplo, la ganancia interpolada puede ser calculada de acuerdo con las Ecuaciones 13a y 13b, tal como se analizó anteriormente. A continuación, en el paso 787, se determina una ganancia total con base en la ganancia radial determinada en el paso 785, así como una de las ganancias de rejilla (paso 786) o la ganancia interpolada (778) . Tal como se apreciará, esto puede depender de cuál lógica de decisión de ramificación 776 se toma durante el proceso 782. La ganancia total entonces es aplicada al píxel actual, tal como se muestra en el paso 788. Una vez más, se debiera observar que al igual que el proceso 772, el proceso 782 también se puede repetir para cada píxel de los datos de imagen .
El uso de la ganancia radial en conjunto con las ganancias de rejilla puede ofrecer varias ventajas. Por ejemplo, el uso de una ganancia radial permite el uso de una sola rejilla de ganancia común para todos los componentes de color. Esto puede reducir en gran medida el espacio de almacenamiento total requerido para almacenar rejillas de ganancia separadas para cada componente de color. Por ejemplo, en un sensor de imagen Bayer, el uso de una sola rejilla de ganancia para cada uno de los componentes R, B, Gr, Gb puede reducir los datos de rejilla de ganancia por aproximadamente 75%. Tal como se apreciará, esta reducción en los datos de ganancia de rejilla puede disminuir los costos de implementación, ya que las tablas de datos de ganancia de rejilla se pueden considerar para una porción significativa de memoria o área de chip en el hardware de procesamiento de imágenes. Además, dependiendo de la implementación de hardware, el uso de un solo conjunto de valores de rejilla de ganancia puede ofrecer ventajas adicionales, tal como la reducción del área de chip general (por ejemplo, tal como en la situación en que los valores de rejilla de ganancia son almacenados en una memoria en chip) y la reducción de los requerimientos de ancho de banda de memoria (por ejemplo, tal como en la situación en que los valores de rejilla de ganancia son almacenados en una memoria externa fuera de chip) .
Habiendo descrito completamente las funcionalidades de la lógica de corrección de sombreado de lente 740 mostrada en la figura 68, la salida de la lógica LSC 740 posteriormente es reenviada a la lógica de compensación inversa de nivel de negro (IBLC) 741. La lógica IBLC 741 proporciona ganancia, desplazamiento y recorte independientemente para cada componente de color (por ejemplo, R, G, Gr y Gb) , y generalmente ejecuta la función inversa a la lógica BLC 739. Por ejemplo, tal como se muestra en la siguiente operación, el valor del píxel de entrada primero es multiplicado por una ganancia y después desplazado por un valor con signo.
Y=(XxG[c] )+0[c] , (18) en donde X representa el valor de píxel de entrada para un componente de color determinado c (por ejemplo, R, B, Gr o Gb) , 0[c] representa un desplazamiento de 16 bits con signo para el componente de color actual c, y G[c] representa un valor de ganancia para el componente de color c. En una modalidad, la ganancia G[c] puede tener un rango de entre aproximadamente 0 a 4x (4 veces el valor de píxel de entrada X) . Se debiera observar que estas variables entonces pueden ser las mismas variables analizadas anteriormente en la Ecuación 11. El valor calculado Y se puede recortar a un rango mínimo y máximo utilizando, por ejemplo, la Ecuación 12. En una modalidad, la lógica IBLC 741 se puede configurar para mantener un conteo del número de píxeles que fueron recortados por arriba y por debajo del máximo y mínimo, respectivamente, por componente de color.
Posteriormente, la salida de la lógica IBLC 741 es recibida por el bloque de recopilación de estadísticas 742, lo cual puede permitir la recopilación de diversos puntos de datos estadísticos referentes a los sensores de imagen 90, tal como aquellos relacionados con la exposición automática (AE) , balance automático de blancos (A B) , enfoque automático (AF) , detección de parpadeo, y así sucesivamente. Con esto en mente, a continuación con respecto a las figuras 80-97 se proporciona una descripción de ciertas modalidades del bloque de recopilación de estadísticas 742 y varios aspectos relacionados con las mismas.
Tal como se apreciará, se pueden utilizar estadísticas AWB, AE y AF en la adquisición de imágenes en cámaras estáticas digitales así como cámaras de video. Por simplicidad, las estadísticas AWB, AE, y AF colectivamente se pueden denominar aquí como "estadísticas 3A" . En la modalidad de la lógica de etapa inicial ISP que se ilustra en la figura 68, la arquitectura para la lógica de recopilación de estadísticas 742 ("lógica de estadísticas 3A" ) se puede implementar en hardware, software o una combinación de los mismos. Además, se puede utilizar software de control o microprogramación cableada para analizar los datos estadísticos recopilados por la lógica de estadísticas 3A 742 y controlar diversos parámetros de la lente (por ejemplo, longitud focal), sensor (por ejemplo, ganancias análogas, tiempos de integración) , y el conducto ISP 82 (por ejemplo, ganancias digitales, coeficientes de matriz de corrección de color) . En algunas modalidades, la circuitería de procesamiento de imagen 32 se puede configurar para proporcionar flexibilidad en la recopilación de estadísticas para permitir que software de control o microprogramación cableada implementen diversos algoritmos AWB, AE, y AF.
Con respecto al balance de blancos (AWB) , la respuesta del sensor de imagen en cada píxel puede depender de la fuente de iluminación, debido a que la fuente de luz es reflejada desde los objetos en la escena de la imagen. Por lo tanto, cada valor de píxel registrado en la escena de la imagen está relacionado con la temperatura del color de la fuente de luz. Por ejemplo, la figura 79 muestra un gráfico 789 que ilustra el rango de color de las áreas blancas bajo temperaturas altas y bajas de color para espacio de color YCbCr. Tal como se muestra, el eje x del gráfico 789 representa la crominancia de la diferencia de azul (Cb) y el eje y del gráfico 789 representa la crominancia de la diferencia de rojo (Cr) del espacio de color YCbCr. El gráfico 789 también muestra un eje de baja temperatura de color 790 y un eje de alta temperatura de color 791. La región 792 en la cual están colocados los ejes 790 y 791, representa el rango de color de áreas blancas que están en bajas y altas temperaturas de color en el espacio de color YCbCr. Sin embargo, se debiera entender que el espacio de color YCbCr simplemente es un ejemplo de un espacio de color que puede ser utilizado en conjunto con el procesamiento de balance automático de blancos en la presente modalidad. Otras modalidades pueden utilizar cualquier espacio de color conveniente. Por ejemplo, en algunas modalidades, otros espacios de color convenientes pueden incluir un espacio de color Lab (CIELab) (por ejemplo, basado en CIE1976) , un espacio de color normalizado rojo/azul (por ejemplo, un R/ (R+2G+B) y B/ (R+2G+B) ; un espacio de color R/G y B/G; un espacio de color Cb/Y y Cr/Y, etcétera. Por consiguiente, para propósitos de esta divulgación, los ejes del espacio de color utilizados por la lógica de estadísticas 3A 742 se pueden referir como Cl y C2 (tal como en el caso de la figura 80) .
Cuando un objeto blanco es iluminado bajo una baja temperatura de color, este puede aparecer enrojecido en la imagen capturada. Por el contrario, un objeto blanco que está iluminado bajo una alta temperatura de color puede aparecer azuloso en la imagen capturada. El objetivo del balance de blancos por lo tanto es ajustar los valores RGB de manera que la imagen aparezca al ojo humano como si ésta hubiese sido tomada bajo luz canónica. Por lo tanto, en el contexto de las estadísticas de generación de imágenes relacionadas con el balance de blancos, la información de color referente a los objetos blancos es recopilada para determinar la temperatura del color de la fuente de luz. En general, los algoritmos de balance de blancos pueden incluir dos pasos principales: Primero, se estima la temperatura del color de la fuente de luz. Segundo, se utiliza la temperatura de color estimada para ajustar los valores de ganancia de color y/o determinar/ajustar los coeficientes de una matriz de corrección de color. Dichas ganancias pueden ser una combinación de ganancias de sensor de imágenes análogas y digitales, así como ganancias digitales ISP.
Por ejemplo, en algunas modalidades, el dispositivo de generación de imágenes 30 puede ser calibrado utilizando múltiples iluminantes de diferente referencia. Por consiguiente, el punto blanco de la escena actual puede ser determinado seleccionando los coeficientes de corrección de color correspondientes a una iluminante de referencia que se ajuste de manera más cercana a la iluminante de la escena actual. A manera de ejemplo solamente, una modalidad puede calibrar el dispositivo de generación de imágenes 30 utilizando cinco iluminantes de referencia, una iluminante de baja temperatura de color, una iluminante de mediana-baja temperatura de color, una iluminante de mediana temperatura de color, una iluminante de media-alta temperatura de color, y una iluminante de alta temperatura de color. Tal como se muestra en la figura 81, una modalidad puede definir ganancias de balance de blancos utilizando los siguientes perfiles de corrección de color: Horizon (H) (simulando una temperatura de color de aproximadamente 2300 grados) , Incandescente (A o IncA) (simulando una temperatura de color de aproximadamente 2856 grados) , D50 (simulando una temperatura de color de aproximadamente 5000 grados) , D65 (simulando una temperatura de color de aproximadamente 6500 grados) , y D75 (simulando una temperatura de color de aproximadamente 7500 grados) .
Dependiendo de la iluminante de la escena actual, se pueden determinar ganancias de balance de blancos utilizando las ganancias correspondientes a la iluminante de referencia que se ajuste de manera más cercana a la iluminante actual. Por ejemplo, si la lógica de estadísticas 742 (descrita con mayor detalle en la figura 82 a continuación) determina que la iluminante actual se ajuste de manera aproximada a la iluminante de mediana temperatura de color de referencia, D50, entonces las ganancias del balance de blancos de aproximadamente 1.37 y 1.23 se pueden aplicar a los canales de color rojo y azul, respectivamente, mientras que aproximadamente ninguna ganancia (1.0) es aplicada a los canales verdes (G0 y Gl para datos Bayer) . En algunas modalidades, si la temperatura de color de la iluminante actual se ubica entre dos iluminantes de referencia, se pueden determinar ganancias de balance de blancos a través de la interpolación de las ganancias del balance de blancos entre las dos iluminantes de referencia. Además, aunque el presente ejemplo muestra un dispositivo de generación de imágenes que está siendo calibrado utilizando las iluminantes H, A, D50, D65, y D75, se debiera entender que se puede utilizar cualquier tipo conveniente de iluminante para calibración de cámara, tal como TL84 o CWF (iluminantes de referencia fluorescente), y así sucesivamente.
Tal como se analizará con mayor detalle a continuación, se pueden proporcionar diversas estadísticas para AWB incluyendo un histograma de color bidimensional (2D) , y sumas de RGB o YCC para proporcionar múltiples rangos de color programables . Por ejemplo, en una modalidad, la lógica de estadísticas 742 puede proporcionar un conjunto de múltiples filtros de píxel, de los cuales un subconjunto de los múltiples filtros de píxel puede ser seleccionado para procesamiento AWB. En una modalidad, se pueden proporcionar ocho conjuntos de filtros, cada uno con parámetros configurables diferentes y tres conjuntos de filtros de rango de color pueden ser seleccionados a partir del conjunto para recopilar estadísticas de mosaico, así como para recopilar estadísticas para cada ventana flotante. A manera de ejemplo, un primer filtro seleccionado puede ser configurado para cubrir la temperatura de color actual a fin de obtener estimación de color precisa, un segundo filtro seleccionado se puede configurar para cubrir las áreas de baja temperatura de color, y un tercer filtro seleccionado se puede configurar para cubrir las áreas de alta temperatura de color. Esta configuración particular puede permitir al algoritmo AWB ajustar el área de temperatura de color actual a medida que la fuente de luz está cambiando. Además, el histograma de color 2D se puede utilizar para determinar los iluminantes globales y locales y para determinar diversos umbrales de filtro de píxel para acumular los valores RGB. Una vez más, se debiera entender que la selección de los tres filtros de píxel pretende ilustrar solo una modalidad. En otras modalidades, se puede seleccionar una cantidad menor o mayor de filtros de píxel para las estadísticas AWB.
Adicionalmente, además de seleccionar tres filtros de píxel, también se puede utilizar un filtro de píxel adicional para exposición automática (AE) , la cual generalmente se refiere a un proceso de ajustar el tiempo de integración del píxel y ganancias para controlar la luminancia de la imagen capturada. Por ejemplo, la exposición automática puede controlar la cantidad de luz de la escena que es capturada por los sensores de imagen fijando el tiempo de integración. En algunas modalidades, mosaicos y ventanas flotantes de estadísticas de luminancia pueden ser recopilados a través de la lógica de estadísticas 3A 742 y procesadas para determinar parámetros de integración y control de ganancia.
Además, el enfoque automático se puede referir a determinar la longitud focal óptima de la lente a fin de optimizar sustancialmente el foco de la imagen. En algunas modalidades, las ventanas de flotación de estadísticas de alta frecuencia pueden ser recopiladas y la longitud focal de la lente puede ser ajustada para poner una imagen en foco. Tal como se analiza adicionalmente a continuación, en una modalidad, ajustes de enfoque automático pueden utilizar ajustes finos y ásperos con base en una o más métricas, referidas como clasificaciones de enfoque automático (clasificaciones AF) para poner una imagen en foco. Además, en algunas modalidades, estadísticas/clasificaciones AF pueden ser determinadas para diferentes colores, y la relatividad entre las estadísticas/clasificaciones AF para cada canal de color pueden ser utilizadas para determinar la dirección del foco.
Por lo tanto, estos diversos tipos de estadísticas, entre otros, se pueden determinar y recopilar a través del bloque de recopilación de estadísticas 742. Tal como se muestra, la salida STATSO del bloque de recopilación de estadística 742 de la unidad de procesamiento de estadísticas SensorO 142 puede ser enviada a la memoria 108 y enrutada a la lógica de control 84 o, alternativamente, puede ser enviada directamente a la lógica de control 84. Además, se debiera entender que la unidad de procesamiento de estadísticas Sensorl 144 también puede incluir un bloque de recopilación de estadísticas 3A configurado de manera similar que proporciona estadísticas STATS1, tal cono se muestra en la figura 10.
Tal como se analizó anteriormente, la lógica de control 84, la cual puede ser un procesador dedicado en el subsistema ISP 32 del dispositivo 10, puede procesar los datos estadísticos recopilados para determinar uno o más parámetros de control para controlar el dispositivo de generación de imágenes 30 y/o la circuitería de procesamiento de imágenes 32. Por ejemplo, dichos parámetros de control pueden incluir parámetros para operar la lente del sensor de imagen 90 (por ejemplo, parámetros de ajuste de longitud focal), parámetros de sensor de imagen (por ejemplo, ganancias análogas y/o digitales, tiempo de integración) , así como parámetros de procesamiento de conducto ISP (por ejemplo, valores de ganancia digital, coeficientes de matriz de corrección de color (CCM) ) . De manera adicional, tal como se mencionó antes, en algunas modalidades, el procesamiento estadístico puede ocurrir a una precisión de 8 bits, y por lo tanto, los datos de píxel en bruto que tienen una profundidad de bit superior pueden ser escalados hacia abajo a un formato de 8 bits para propósitos de estadísticas. Tal como se analizó antes, la escalación hacia abajo a 8 bits (o cualquier otra resolución de bit inferior) puede reducir el tamaño del hardware (por ejemplo, área) y también puede reducir la complejidad del procesamiento, así como permitir que los datos estadísticos sean más robustos al ruido (por ejemplo, utilizando ponderación espacial de los datos de imagen) .
Con lo anterior en mente, la figura 82 es un diagrama en bloques que muestra lógica para implementar una modalidad de la lógica de estadísticas 3A 742. Tal como se muestra, la lógica de estadísticas 3A 742 puede recibir una señal 793 que representa los datos RGB Bayer los cuales, tal como se muestra en la figura 68, pueden corresponder a la salida de la lógica BLC inversa 741. La lógica de estadísticas 3A 742 puede procesar los datos RGB Bayer 793 para obtener diversas estadísticas 794, las cuales pueden representar la salida STATSO de la lógica de estadísticas 3A 742, tal como se muestra en la figura 68, o alternativamente la salida STATS1 de una lógica de estadísticas asociada con la unidad de procesamiento de estadísticas Sensorl 144.
En la modalidad ilustrada, para que las estadísticas sean más robustas al ruido, los píxeles RGB Bayer de entrada 793 primero son promediados por la lógica 795. Por ejemplo, la premediación se puede ejecutar en un tamaño de ventana de píxeles de sensor 4x4 que consisten de cuatro cuadretes Bayer 2x2 (por ejemplo, un bloque 2x2 de píxeles que representan el patrón Bayer) , y los valores rojo (R) , verde (G) , y azul (B) ponderados en la ventana 4x4 pueden ser calculados y convertidos a 8 bits, tal como se mencionó antes. Este proceso se ilustra con mayor detalle con respecto a la figura 83, la cual muestra una ventana 4x4 796 de píxeles formados como cuatro cuadretes Bayer 2x2 797. Al utilizar este arreglo, cada canal de color incluye un bloque 2x2 de píxeles correspondientes dentro de la ventana 796, y píxeles del mismo color pueden ser sumados y promediados para producir un valor de color promedio para cada canal de color dentro de la ventana 796. Por ejemplo, los píxeles rojos 799 pueden ser promediados para obtener un valor rojo promedio (RAV) 803, y los píxeles azules 800 pueden ser promediados para obtener un valor azul promedio (BAv) 804 dentro de la muestra 796. Con respecto a la premediación de los píxeles verdes, se pueden utilizar varias técnicas debido a que el patrón Bayer tiene dos veces la cantidad de muestras verdes como de muestras rojas o azules. En una modalidad, el valor verde promedio (GAv) 802 se puede obtener promediando solo los píxeles Gr 798, solo los píxeles Gb 801, o todos los píxeles Gr y Gb 798 y 801 juntos. En otra modalidad, los píxeles Gr y Gb 798 y 801 en cada cuádrete Bayer 797 pueden ser promediados, y el promedio de los valores verdes para cada cuádrete Bayer 797 pueden ser promediados juntos todavía para obtener GAV 802. Tal como se apreciará, el promediado de los valores de píxel a través de los bloques de píxel puede permitir la reducción del ruido. Además, se debiera entender que el uso de un bloque 4x4 como una muestra de ventana simplemente pretende proporcionar un ejemplo. De hecho, en otras modalidades, se puede utilizar cualquier tamaño de bloque conveniente (por ejemplo, 8x8, 16x16, 32x32, etcétera) .
Posteriormente, los valores RGB Bayer escalados hacia abajo 806 son ingresados a las unidades lógicas de conversión de espacio de color 807 y 808. Debido a que algunos de los datos de estadísticas 3A se pueden basar en los píxeles después de la aplicación de la conversión del espacio de color, la lógica de conversión de espacio de color (CSC) 807 y la lógica CSC 808 se pueden configurar para convertir los valores RGB Bayer muestreados hacia abajo 806 en uno o más espacios de color diferentes. En una modalidad, la lógica CSC 807 puede permitir una conversión del espacio no lineal y la lógica CSC 808 puede permitir una conversión del espacio lineal. Por lo tanto, las unidades lógicas CSC 807 y 808 pueden convertir los datos de imagen en bruto del RGB Bayer de sensor a otro espacio de color (por ejemplo, sRGBuneax , sRGB , YCbCr, etcétera) que pueden ser más ideales o convenientes para ejecutar la estimación del punto blanco para balance de blancos.
En la presente modalidad, la lógica CSC no lineal 807 se puede configurar para ejecutar una multiplicación de matriz 3x3, seguido por un mapeo no lineal implementado como una tabla de búsqueda, y además seguido por otra multiplicación de matriz 3x3 con un desplazamiento añadido. Esto permite que la conversión del espacio de color de estadísticas 3A replique el procesamiento de color del procesamiento RGB en el conducto ISP 82 (por ejemplo, aplicando ganancia de balance de blancos, aplicando una matriz de corrección de color, aplicando ajustes gama RGB, y ejecutando conversión de espacio de color) para una temperatura de color determinada. Este también puede permitir la conversión de los valores RGB Bayer a un espacio de color más consistente tal como CIELab, o cualesquiera de los otros espacios de color antes analizados (por ejemplo, YCbCr, un espacio de color normalizado rojo/azul, etcétera). Bajo algunas condiciones, un espacio de color Lab puede ser más conveniente para operaciones de balance de blancos debido a que la cromaticidad es más lineal con respecto a la brillantez .
Tal como se muestra en la figura 82, los píxeles de salida de la señal escalada hacia abajo RGB Bayer 806 son procesados con una primera matriz de corrección de color 3x3 (3A_CCM) , referida aquí por el número de referencia 808. En la presente modalidad, la 3A_CCM 809 se puede configurar para conversión de un espacio de color RGB de cámara (camRGB) a un espacio calibrado sRGB lineal (sRGBiineal) . Una conversión de espacio de color programable que se puede utilizar en una modalidad es proporcionada por las siguientes ecuaciones 19-21 : s iineai = max(0, min(255, (3A_CCM_00*R + 3A_CCM_01*G + 3A_CCM_02*B))); (19) sGüneai = max(0, min(255, (3A_CCM_10*R + 3A_CCM_11*G + 3A_CCM_12*B))); (20) sBnneai = max(0, min(255, (3A_CCM_20*R + 3A_CCM_21*G + 3A_CCM_22*B))); (21) en donde 3A_CCM_00-3A_CCM_22 representa los coeficientes con signo de la matriz 808. Por lo tanto, cada uno de s iineai f sGüneai y sBüneai los componentes del espacio de color sRGBüneai pueden ser determinados primero determinando la suma de los valores RGB Bayer muestreados hacia abajo rojos, azules y verdes con coeficientes 3A_CCM correspondientes aplicados, y después recortando este valor ya sea a 0 o 255 (los valores de píxel mínimo y máximo para datos de píxel de 8 bits) si el valor excede 255 o es menor que 0. Los valores sRGBüneai resultantes son representados en la figura 82 por el número de referencia 810 como la salida de la 3A_CCM 809. De manera adicional, la lógica de estadísticas 3A 742 puede mantener un conteo del número de pixeles recortados para cada uno de los componentes sRüneai sGiineai y sBiineai/ expresado de la siguiente forma: 3A_CCM_R_conteorecorte_b¾o: número de pixeles sRlineal < 0 recortados 3A_CCM_R_conteorecort_alto: número de pixeles sRlineal > 255 recortados 3A_CCM_G_conteorecorte_bajo: número de pixeles sGlineal < 0 recortados 3A_CCM_G_conteorecorte_alto: número de pixeles sGlineal > 255 recortados 3A_CCM_B_conteorecorte_bajo: número de pixeles sBlineal < 0 recortados 3A_CCM_B_conteorecorte_alto: número de pixeles sBlineal > 255 recortados A continuación los pixeles sRGBiineai 810 pueden ser procesados utilizando una tabla de búsqueda no lineal 811 para producir pixeles sRGB 812. La tabla de búsqueda 811 puede contener entradas de valores de 8 bits , con cada valor de entrada de tabla representando un nivel de salida. En una modalidad, la tabla de búsqueda 811 puede incluir 65 entradas con una entrada uniformemente distribuida, en donde un índice de tabla representa valores de entrada en pasos de 4. Cuando el valor de entrada cae entre los intervalos, los valores de salida están linealmente interpolados.
Tal como se apreciará, el espacio de color sRGB puede representar el espacio de color de la imagen final producida por el dispositivo de generación de imágenes 30 (figura 7) para un punto blanco determinado, ya que la recopilación de estadísticas de balance de blancos se realiza en el espacio de color de la imagen final producida por el dispositivo de imagen. En una modalidad, un punto blanco puede ser determinado mediante la concordancia de las características de la escena de la imagen con una o más iluminantes de referencia con base, por ejemplo, en las relaciones rojo-a-verde y/o azul-a-verde. Por ejemplo, una iluminante de referencia puede ser D65, una iluminante estándar CIE para simular condiciones de luz de día. Además de D65, la calibración del dispositivo de generación de imágenes 30 también se puede ejecutar para otros iluminantes de referencia diferentes, y el proceso de determinación de balance de blancos puede incluir determinar una iluminante actual de manera que el procesamiento (por ejemplo, balance de color) se puede ajustar para la iluminante actual con base en los puntos de calibración correspondientes. A manera de ejemplo, en una modalidad, el dispositivo de generación de imágenes 30 y la lógica de estadísticas 3A 742 se pueden calibrar utilizando, además de D65, una iluminante de referencia fluorescente blanco frío (CWF) , la iluminante de referencia TL84 (otra fuente fluorescente) , y la iluminante de referencia IncA (o A) , la cual simula iluminación incandescente. De manera adicional, tal como se analizó antes, otras iluminantes correspondientes a diferentes temperaturas de color (por ejemplo, H, IiicA, D50, D65 y D75, etcétera) también pueden ser utilizadas en calibración de cámara para procesamiento de balance de blancos. Por lo tanto, un punto blanco puede ser determinado analizando una escena de imagen y determinando cuál iluminante de referencia se ajusta de manera más cercana a la fuente de iluminante actual .
Haciendo referencia todavía a la lógica CSC no lineal 807, la salida de píxel sRGB 812 de la tabla de búsqueda 811 puede ser procesada adicionalmente con una segunda matriz de corrección 3x3 813, referida aquí como 3A_CSC. En la modalidad mostrada, la matriz 3A_CSC 813 se muestra como configurada para convertir del espacio de color sRGB al espacio de color YCbCr, aunque se puede configurar para convertir los valores sRGB en otros espacios de color también. A manera de ejemplo, se puede utilizar la siguiente conversión de espacio de color programable (ecuaciones 22-27) : Y = 3A_CSC_00*sR + 3A_CSC_01 *sG + 3A_CSC_02*sB + 3A_0ffsetY; (22) Y = max(3A_CSC_MIN_Y, min(3A_CSC_MAX_Y, Y)); (23) Cl = 3A_CSC_10*sR + 3A_CSC_1 l*sG + 3A_CSC_12*sB + 3A_0ffsetCl; (24) Cl = max(3A_CSC_MIN_Cl, min(3A_CSC_MAX_Cl, Cl)); (25) C2 = 3A_CSC_20*sR + 3 A_CSC_21 *sG + 3 A_CSC_22*sB + 3 A_0ffsetC2; (26) C2 = max(3A_CSC_MIN_C2, min(3A_CSC_MAX_C2, C2)); (27) en donde 3A_CSC_00-3A_CSC_22 representan coeficientes firmados para la matriz 813, 3A_0ffsetY, 3A_0ffsetCl y 3A_OffsetC2 representan desplazamientos firmados, y Cl y C2 representan diferentes colores, aquí la crominancia de diferencia de azul (Cb) y la crominancia de diferencia de rojo (Cr) , respectivamente. No obstante, se debiera entender que Cl y C2 pueden representar cualesquiera colores de crominancia de diferencia conveniente, y no necesariamente requieren ser colores Cb y Cr.
Tal como se muestra en las ecuaciones 22-27, al determinar cada componente de YCbCr, coeficientes apropiados de la matriz 813 son aplicados a los valores sRGB 812 y el resultado se suma con un desplazamiento correspondiente (por ejemplo, ecuaciones 22, 24 y 26) . De manera esencial, este paso es un paso de multiplicación de matriz 3x1. Este resultado de la multiplicación de matriz entonces es recortado entre un valor máximo y mínimo (por ejemplo, las ecuaciones 23, 25 y 27) . Los valores de recorte mínimo y máximo asociados pueden ser programables y pueden depender, por ejemplo, de estándares de video o generación de imagen particulares (por ejemplo, BT.601 o BT.709) que se estén utilizando .
La lógica de estadísticas 3A 742 también puede mantener un conteo del número de píxeles recortados para cada uno de los componentes Y, Cl y C2 , como se expresa a continuación : 3A_CSC_Y_conteorecorte_bajo: número de píxeles Y <3A_CSC_MIN_Y recortado 3A_CSC_Y_ conteorecorte _alto: número de píxeles Y > 3A_CSC_MAX_Y recortado 3A_CSC_C1_ conteorecorte _bajo número de píxeles Cl < 3 A_CSC_MIN_C1 recortado 3A_CSC_C1_ conteorecorte _alto: número de píxeles C 1 > 3 A_CSC_MAX_C 1 recortado 3A_CSC_C2_ conteorecorte _bajo número de píxeles C2 < 3A_CSC_MI _C2 recortado 3A_CSC_C2_ conteorecorte _alto: número de píxeles C2 > 3A_CSC_MAX_C2 recortado Los píxeles de salida de la señal de muestra hacia abajo RGB Bayer 806 también pueden ser proporcionados a la lógica de conversión de espacio de color lineal 808, la cual se puede configurar para implementar una conversión de espacio de color de cámara. Por ejemplo, los píxeles de salida 806 de la lógica de muestreo hacia abajo RGB Bayer 795 pueden ser procesados a través de otra matriz de conversión de color 3x3 (3A_CSC2) 815 de la lógica CSC 808 para convertir de RGB del sensor (camRGB) a un espacio de color de balance de blancos lineal (camYClC2), en donde Cl y C2 pueden corresponder a Cb y Cr, respectivamente. En una modalidad, los píxeles de crominancia pueden ser escalados por luminancia, lo cual puede ser benéfico al implementar un filtro de color que tiene una consistencia de color mejorada y es robusto para cambios de color debido a los cambios de luminancia. Un ejemplo de la manera en que se puede ejecutar la conversión del espacio de color de la cámara utilizando la matriz 3x3 815 se proporciona a continuación en las ecuaciones 28-31: camY = 3A_CSC2_00*R + 3A_CSC2_01*G + 3A_CSC2_02*B + 3A_Offset2Y; (28) camY = max(3A_CSC2_MIN_Y, min(3A_CSC2_MAX_Y, camY)); (29) camCl = (3A_CSC2_10*R + 3A_CSC2_11*G + 3A_CSC2_12*B); (30) camC2 = (3A_CSC2_20*R + 3A_CSC2_21*G + 3A_CSC2_22*B); (31) en donde 3A_CSC2_00-3A_CSC2_22 representan los coeficientes con signo para la matriz 815, 3A_Offset2Y representa un desplazamiento con signo para camY, y camCl y camC2 representan diferentes colores, aquí la crominancia de diferencia de azul (Cb) y la crominancia de diferencia de rojo (Cr) , respectivamente. Tal como se muestra en la ecuación 28, para determinar camY, coeficientes correspondientes de la matriz 815 son aplicados a los valores RGB Bayer 806 y el resultado se suma con 3A_Offset2Y. Este resultado entonces es recortado entre un valor máximo y mínimo, tal como se muestra en la ecuación 29. Tal como se analizó anteriormente, los límites del recorte pueden ser programables .
En este punto, los píxeles de camCl y camC2 de la salida 816 están con signo. Tal como se analizó antes, en algunas modalidades, los píxeles de crominancia se pueden escalar. Por ejemplo, a continuación se muestra una técnica para implementar la escalacion de la crominancia: camCl = camCl * ChromaScale * 255 / (camY ? camY : 1); (32) camC2 = camC2 * ChromaScale * 255 / (camY ? camY : 1); (33) en donde ChromaScale representa un factor de escalacion de punto flotante entre 0 y 8. En las ecuaciones 32 y 33, la expresión (camY ? camY:l) está destinada a evitar una condición de dividir-entre-cero. Es decir, si camY es igual a cero, el valor de camY se establece a 1. Además, en una modalidad, ChromaScale se puede fijar a uno de dos posibles valores dependiendo del signo de caraCl. Por ejemplo, tal como se muestra a continuación en la Ecuación 34, ChromaScale se puede establecer a un primer valor (ChromaScaleO) si camCl es negativo, o incluso se puede establecer a un segundo valor (ChromaScalel) : ChromaScale = ChromaScaleO si (camCl < 0) (34) ChromaScalel de otra manera Posteriormente, se agregan los desplazamientos de crominancia, y los píxeles de crominancia camCl y camC2 son recortados, tal como se muestra a continuación en las ecuaciones 35 y 36, para generar valores de píxel sin signo correspondientes : camCl = max(3A_CSC2_MIN_Cl, min(3A_CSC2_MAX_Cl, (camCl + 3A_Offset2Cl))) (35) camC2 = max(3A_CSC2_MIN_C2) min(3A_CSC2_MAX_C2, (camC2 + 3A_Offset2C2))) (36) en donde 3A_CSC2_00 - 3A_CSC2_22 son coeficientes con signo de la matriz 815, y 3A_Offset2Cl y 3A_Offset2C2 son desplazamientos con signo. Además, se cuenta el número de píxeles que son recortados para camY, camCl y camC2 , tal como se muestra a continuación: A_CSC2_Y_conteorecorte_bajo: número de píxeles camY < 3A_CSC2_MI _Y recortados A_CSC2_Y_conteorecorte_alto: número de píxeles camY > 3A_CSC2_MAX_Y recortados A_CSC2_Cl_conteorecorte_bajo: número de píxeles camC l < 3A_CSC2_MIN_C1 recortados A_CSC2_C l_conteorecorte_alto: número de píxeles camC l > 3 A_CSC2_MAX_C 1 recortados A_CSC2_C2_conteorecorte_bajo: número de píxeles camC2 < 3A_CSC2_MIN_C2 recortados A CSC2 C2 conteorecorte alto: número de píxeles camC2 > 3A_CSC2_MAX_C2 recortados Por lo tanto, la lógica de conversión de espacio de color lineal y no lineal 807 y 808 puede, en la presente modalidad, proporcionar datos de píxel en diversos espacios de color: sRGBiineai (señal 810), sRGB (señal 812), YCbCr (señal 814) , y camYCbCr (señal 816) . Se debiera entender que los coeficientes para cada matriz de conversión 809 (3A_CCM) , 813 (3A_CSC) , y 815 (3A_CSC2) , así como los valores en la tabla de búsqueda 811, se pueden establecer y programar de manera independiente .
Haciendo referencia todavía a la figura 82, los píxeles de salida de crominancia de cualquiera de la conversión de espacio de color no lineal (YCbCr 814) o la conversión de espacio de color de cámara (camYCbCr 816) se pueden utilizar para generar un histograma de color bidimensional (2D) 817. Tal como se muestra, la lógica de selección 818 y 819, la cual se puede implementar como multiplexores o mediante cualquier otra lógica conveniente, se puede configurar para seleccionar entre píxeles de luminancia y crominancia de cualquiera de la conversión de espacio de color no lineal o de cámara. La lógica de selección 818 y 819 puede operar en respuesta a señales de control respectivas las cuales, en una modalidad, pueden ser abastecidas por la lógica de control principal 84 de la circuitería de procesamiento de imágenes 32 (figura 7) y se puede establecer a través del software.
Para el presente ejemplo, se puede asumir que la lógica de selección 818 y 819 seleccionan la conversión del espacio de color YC1C2 (814), donde el primer componente es luminancia y donde Cl, C2 son el primer y segundo colores (por ejemplo, Cb, Cr) . Se genera un histograma 2D 817 en el espacio de color C1-C2 para una ventana. Por ejemplo, la ventana puede ser especificada con un inicio y ancho de columna, y un inicio y alto de fila. En una modalidad, la posición y tamaño de la ventana se pueden establecer como un múltiplo de 4 píxeles, y se pueden utilizar agrupamientos 32x32 para un total de 1024 agrupamientos. Los límites del agrupamiento pueden estar a un intervalo fijo y, a fin de permitir la reducción y expansión de la recopilación del histograma en áreas específicas del espacio de color, se puede definir una escala y desplazamiento de píxel .
Los 5 bits superiores (que representan un total de 32 valores) de Cl y C2 después del desplazamiento y la escalación se pueden utilizar para determinar el agrupamiento . Los índices del agrupamiento para Cl y C2 , referidos aquí por Cl_índice y C2_índice, se pueden determinar de la siguiente manera: Cl_índice = ((Cl - Cl_desplazamiento)»(3 - Cl_escala) (37) C2_índice = ((C2 - C2_desplazamiento)»(3 - C2_escala) (38) Una vez que se determinan los índices, los agrupamientos del histograma de color son incrementados por un valor de conteo (el cual puede tener un valor de entre 0 y 3 en una modalidad) si los índices del agrupamiento están en el rango [0, 31] , tal como se muestra a continuación en la ecuación 39. De manera efectiva, esto permite la ponderación de los conteos de color con base en los valores de luminancia (por ejemplo, píxeles más brillantes son ponderados de manera más pesada, en lugar de ponderarlos de forma igual (por ejemplo, por 1) ) .
Si (C l_índice >= 0 && C l_índice <= 31 && C2_índice >= 0 && C2_índice <= 31 ) (39) StatsCbCrHist[C2_índice&31][Cl_índice&31] += Conteo; donde Conteo se determina con base en el valor de luminancia seleccionado, Y en este ejemplo. Tal como se apreciará, los pasos representados por las ecuaciones 37, 38 y 39 se pueden implementar a través de un bloque de lógica de actualización de agrupamiento 821. Además, en una modalidad, se pueden establecer múltiples umbrales de luminancia para definir los intervalos de luminancia. A manera de ejemplo, cuatro umbrales de luminancia (Ythd0-Ythd3) pueden definir cinco intervalos de luminancia, con valores de Conteo ConteoO-4 siendo definidos para cada intervalo. Por ejemplo, ConteoO-Conteo4 se pueden seleccionar (por ejemplo, mediante la lógica de condición de píxel 820) con base en los umbrales de luminancia de la siguiente forma: si (Y <= YthdO) (40) Conteo = ConteoO además si (Y <= Ythdl) Conteo = Conteo 1 además si (Y <= Ythd2) Conteo = Conteo2 además si (Y <= Ythd3) Conteo = Conteo3 además Conteo = Conteo4 Con lo anterior en mente, la figura 84 ilustra el histograma de color con escalación y desplazamientos establecidos a cero para Cl y C2. Las divisiones dentro del espacio CbCr representan cada uno de los agrupamientos 32x32 (1024 agrupamientos totales) . La figura 85 proporciona un ejemplo de reducción y agrandamiento dentro del histograma de color 2D para precisión adicional, en donde el área rectangular 822 donde el rectángulo pequeño especifica la ubicación de los agrupamientos 32x32.
Al inicio de un cuadro de datos de imagen, los valores del agrupamiento son inicializados a cero. Para cada píxel que pasa al histograma de color 2D 817, el agrupamiento correspondiente al valor C1C2 concordante es incrementado por un valor de conteo determinado (Conteo0-Conteo4 ) el cual, tal como se analizó anteriormente, se puede basar en el valor de luminancia. Para cada agrupamiento dentro del histograma 2D 817, el conteo total de píxeles es reportado como parte de los datos estadísticos recopilados (por ejemplo, STATSO) . En una modalidad, el conteo total de píxeles para cada agrupamiento puede tener una resolución de 22 bits, con lo cual se proporciona una asignación de memoria interna igual a 1024x22 bits.
Haciendo referencia nuevamente a la figura 82, los píxeles RGB Bayer (señal 806) , los píxeles sRGBiineai (señal 810), los píxeles sRGB (señal 812), y los píxeles YC1C2 (por ejemplo, YCbCr) (señal 814) son proporcionados a un conjunto de filtros de píxel 824a-c, donde sumas de RGB, sRGBiineai/ sRGB, YC1C2 o camYClC2 pueden ser acumuladas condicionalmente sobre cualquiera de las condiciones de píxel camYClC2 o YC1C2, conforme a lo definido por cada filtro de píxel 824.
Es decir, los valores Y, Cl y C2 de cualquier salida de la conversión de espacio de color no lineal (YC1C2) o la salida de la conversión de espacio de color de cámara (camYClC2) son utilizados para seleccionar condicionalmente valores RGB, sRGBüneai» sRGB o YC1C2 para acumulación. Aunque la presente modalidad muestra la lógica de estadísticas 3A 742 como teniendo 8 filtros de píxel (PF0-PF7) , se debiera entender que se puede proporcionar cualquier número de filtros de píxel .
La figura 86 muestra un diagrama lógica funcional que muestra una modalidad de los filtros de píxel, específicamente PFO (824a) y PF1 (824b) de la figura 82. Tal como se muestra, cada filtro de píxel 824 incluye una lógica de selección, la cual recibe los píxeles RGB Bayer, los píxeles sRGBiineai/ los píxeles sRGB y uno de cualquiera de los píxeles YC1C2 o camYClC2 , según sean seleccionados por otra lógica de selección 826. A manera de ejemplo, la lógica de selección 825 y 826 puede ser implementada utilizando multiplexores o cualquier otra lógica conveniente. La lógica de selección 826 puede seleccionar ya sea YC1C2 o camYClC2. La selección se puede realizar en respuesta a una señal de control que puede ser suministrada por la lógica de control principal 84 de la circuitería de procesamiento de imágenes 32 (figura 7) y/o establecida por software. A continuación, el filtro de píxel 824 puede utilizar lógica 827 para evaluar los píxeles YC1C2 (por ejemplo, ya sea no lineal o de cámara) seleccionados por la lógica de selección 826 contra una condición de píxel. Cada filtro de píxel 824 puede utilizar el circuito de selección 825 para seleccionar uno de cualquiera de los píxeles RGB Bayer, píxeles sRGBiineai; píxeles sRGB, y píxel YC1C2 o camYClC2 dependiendo de la salida del circuito de selección 826.
Al utilizar los resultados de la evaluación, los píxeles seleccionados por la lógica de selección 825 pueden ser acumulados (828) . En una modalidad, la condición del píxel puede ser definida utilizando umbrales Cl_min, Cl_max, C2_min, C2_max, tal como se muestra en el gráfico 789 de la figura 80. Un píxel está incluido en las estadísticas si satisface las siguientes condiciones: 1. Cl_min <= Cl <= Cl_max 2. C2_min <= C2 <= C2_max 3. abs ((C2_delta * Cl) - (Cl_delta * C2) + Desplazamiento) < distancia_max 4. Ymin <-= Y ^= Ymax Haciendo referencia al gráfico 829 de la figura 87, en una modalidad, el punto 830 representa los valores (C2, Cl) correspondientes a los datos de píxel YC1Y2 actuales, según sean seleccionados por la lógica 826. Cl_delta puede ser determinado como la diferencia entre Cl_l y C1_0 , y C2_delta puede ser determinado como la diferencia entre C2_l y C2_0. Tal como se muestra en la figura 87, los puntos (C1_0, C2_0) y (Cl_l, C2__l) pueden definir los límites mínimo y máximo para Cl y C2. El desplazamiento se puede determinar multiplicando Cl_delta por el valor 832 (C2_intercepción) en donde la línea 831 intercepta el eje C2. Por lo tanto, asumiendo que Y, Cl y C2 satisfacen las condiciones de límite mínimo y máximo, los píxeles seleccionados ( RGB Bayer, sRGBuneai , sRGB , y YClC2/camYClC2 ) quedan incluidos en la suma de acumulación si su distancia 833 desde la línea 831 es menor que distancia_max 834, la cual puede ser la distancia 833 en píxeles desde la línea multiplicada por un factor de normalización: distancia_max = distancia * sqrt(C l_deltaA2 + C2_deltaA2) En la presente modalidad, distancia, Cl_delta y C2_delta pueden tener un rango de -255 a 255. Por lo tanto, distancia_max 834 puede ser representado por 17 bits. Los puntos (C1_0, C2_0) y (Cl_l, C2_l) , así como los parámetros para determinar distancia_max (por ejemplo, factores de normalización) , pueden ser proporcionados como parte de la lógica de condición de píxel 827 en cada filtro de píxel 824. Tal como se apreciará, las condiciones del píxel 827 pueden ser configurables/programables .
Aunque el ejemplo mostrado en la figura 87 muestra una condición de píxel basada en dos conjuntos de puntos (C1_0, C2_0) y (Cl_l, C2_l) , en modalidades adicionales, algunos filtros de píxel pueden definir formas más complejas y regiones sobre las cuales se determinan las condiciones de píxel. Por ejemplo, la figura 88 muestra una modalidad donde un filtro de píxel 824 puede definir un polígono de cinco lados 835 utilizando los puntos (C1_0, C2_0) , (Cl_l, C2_l) , (Cl_2, C2_2) y (Cl_3, C2_3), y (Cl_4, C2_4 ) . Cada lado 836a-836e puede definir una condición lineal. No obstante, a diferencia del caso mostrado en la figura 87 (por ejemplo, el píxel puede estar en cualquier lado de la línea 831 siempre y cuando se satisfaga distancia_max) , la condición puede ser que el píxel (Cl, C2) debe estar ubicado en el lado de la línea 836a-836e de manera que queda encerrado por el polígono 835. Por lo tanto, el píxel (Cl, C2) es contado cuando ocurre la intersección de múltiples condiciones de línea. Por ejemplo, en la figura 88, dicha intersección ocurre con respecto al píxel 837a. No obstante, el píxel 837b no puede satisfacer la condición de línea para la línea 836d y, por lo tanto, no sería contado en las estadísticas cuando fuesen procesadas por un filtro de píxel configurado de esta manera.
En una modalidad adicional, mostrada en la figura 89, se puede determinar una condición de píxel con base en las formas de traslape. Por ejemplo, la figura 89 muestra la manera en que un filtro de píxel 824 puede tener condiciones de píxel definidas utilizando dos formas de traslape, aquí rectángulos 838a y 838b definidos por los puntos (C1_0, C2_0) , (Cl_l, C2_l) , (Cl_2, C2_2) y (Cl_3, C2_3 ) y los puntos (Cl_4, C2_4), (Cl_5, C2_5) , (Cl_6, C2_6) y (Cl_7, C2_7), respectivamente. En este ejemplo, un píxel (Cl, C2) puede satisfacer las condiciones de línea definidas por dicho filtro de píxel al quedar encerrados dentro de la región colectivamente delimitada por las formas 838a y 838b (por ejemplo, satisfaciendo las condiciones de línea de cada línea que define ambas formas) . Por ejemplo, en la figura 89, estas condiciones se satisfacen con respecto al píxel 839a. No obstante, el píxel 839b no puede satisfacer estas condiciones (específicamente con respecto a la línea 840a del rectángulo 838a y la línea 840b del rectángulo 838b) y, por lo tanto, no serían contadas en las estadísticas cuando fuesen procesadas por un filtro de píxel configurado de esta manera.
Para cada filtro de píxel 824, píxeles calificados son identificados con base en las condiciones de píxel definidas por la lógica 827 y, para valores de píxel calificado, se pueden recopilar las siguientes estadísticas mediante el motor de estadísticas 3A 742: sumas de 32 bits: (Insuma/ Gsuma, Bsuma) O (SR-lineal_suma/ SGineai_suma, SBiineai_suraa) , O (sRsuma, sGsuma, sBsuma) o (Ysuma/ Clsuma, C2suma) y un Conteo de pixeles de 24 bits, el cual puede representar la suma del número de pixeles que fueron incluidos en la estadística. En una modalidad, el software puede utilizar la suma para generar un promedio dentro de un mosaico o ventana.
Cuando pixeles camYClC2 son seleccionados por la lógica 825 de un filtro de píxel 824, umbrales de color pueden ser definidos en valores de crominancia escalados. Por ejemplo, debido a que la intensidad de la crominancia en los puntos blancos aumenta con el valor de luminancia, el uso de la crominancia escalada con el valor de luminancia en el filtro de píxel 824 puede, en algunos casos, proporcionar resultados con consistencia mejorada. Por ejemplo, condiciones de luminancia mínimas y máximas pueden permitir que el filtro ignore áreas oscuras y/o brillantes. Si el píxel satisface la condición de píxel YC1C2, los valores RGB, sRGBüneai, sRGB o YC1C2 son acumulados. La selección de los valores de píxel mediante la lógica de selección 825 puede depender del tipo de información que se necesite. Por ejemplo, para balance de blancos, típicamente se seleccionan los pixeles RGB o sRGBiineai. Para detectar condiciones específicas, tal como cielo, pasto, tonos de piel, etcétera, un conjunto de pixeles YCC o sRGB puede ser más conveniente.
En la presente modalidad, se pueden definir ocho conjuntos de condiciones de píxel, uno asociado con cada uno de los filtros de píxel PF0-PF7 824. Algunas condiciones de píxel pueden ser definidas para tallar un área en el espacio de color C1-C2 (figura 80) donde el punto blanco tiene probabilidades de ser. Esto se puede determinar o estimar con base en el iluminante actual. Después, se pueden utilizar las sumas RGB acumuladas para determinar el punto blanco actual con base en las relaciones R/G y/o B/G para ajustes de balance de blancos. Además, algunas condiciones de píxeles pueden ser definidas o adaptadas para ejecutar análisis de escena y clasificaciones. Por ejemplo, algunos filtros de píxel 824 y ventanas/mosaicos pueden ser utilizados para detectar condiciones, tal como cielo azul en una porción superior de un cuadro de imagen, o pasto verde en una porción inferior de un cuadro de imagen. Esta información también se puede utilizar para ajustar balance de blancos. Adicionalmente, algunas condiciones de píxel pueden ser definidas o adaptadas para detectar tonos de piel . Para dichos filtros, se pueden utilizar mosaicos para detectar áreas del cuadro de imagen que tienen tono de piel. Al identificar estas áreas, se puede mejorar la calidad del tono de piel, por ejemplo, reduciendo la cantidad del filtro de ruido en las áreas de tono de piel y/o disminuyendo la cuantificación en la compresión de video en esas áreas para mejorar la calidad.
La lógica de estadísticas 3A 742 también puede permitir la recopilación de datos de luminancia. Por ejemplo, el valor de luminancia, camY, de la conversión del espacio de color de cámara (camYClC2) se puede utilizar para acumular estadísticas de suma de luminancia. En una modalidad, la siguiente información de luminancia puede ser recopilada por la lógica de estadísticas 3A 742: Ysuma : suma de camY cond(YSuma) : suma de camY que satisface la condición: Ym¡n <= camY < Ymax Yconteol : conteo de píxeles donde camY < Ymin, Ycount2 : conteo de píxeles donde camY >= Ymax Aquí, Yconteol puede representar el número de píxeles sub-expuestos y Yconteo2 puede representar el número de píxeles sobre-expuestos . Esto se puede utilizar para determinar si la imagen está sobre-expuesta o sub-expuesta . Por ejemplo, si los píxeles no saturan, la suma de camY (YSUma) puede indicar una luminancia promedio en una escena, la cual se puede utilizar para lograr una exposición AE objetivo. Por ejemplo, en una modalidad, la luminancia promedio puede ser determinada dividiendo YSuma entre el número de píxeles. Además, al conocer las estadísticas de luminancia/AE para las estadísticas de mosaico y ubicaciones de ventana, se puede ejecutar la medición AE. Por ejemplo, dependiendo de la escena de la imagen, puede ser deseable ponderar las estadísticas AE en la ventana central de manera más pesada que aquellas en los bordes de la imagen, tal como puede ser en el caso de un retrato.
En la modalidad aquí ilustrada, la lógica de recopilación de estadísticas 3A se puede configurar para recopilar estadísticas en mosaicos y ventanas. En la configuración ilustrada, una ventana puede ser definida para estadísticas de mosaico 863. La ventana puede ser especificada con un inicio y ancho de columna, y un inicio y alto de fila. En una modalidad, la posición y tamaño de ventana se pueden seleccionar como un múltiplo de cuatro pixeles y, dentro de esta ventana, las estadísticas son recopiladas en mosaicos de tamaños arbitrarios. A manera de ejemplo, todos los mosaicos en la ventana pueden ser seleccionados de manera que tengan el mismo tamaño. El tamaño de mosaico puede ser establecido de manera independiente para las direcciones horizontal y vertical y, en una modalidad, se puede establecer el límite máximo en el número de mosaicos horizontales (por ejemplo, un límite de 128 mosaicos horizontales) . Además, en una modalidad, el tamaño de mosaico mínimo se puede establecer a 8 pixeles de ancho por 4 pixeles de alto, por ejemplo. A continuación se muestran algunos ejemplos de las configuraciones de mosaico con base en diferentes modos de video/generación de imágenes y estándares para obtener una ventana de 16x16 mosaicos: VGA 640x480 : intervalo de mosaico 40x30 pixeles HD 1280x720 : intervalo de mosaico 80x45 pixeles HD 1920x1080: intervalo de mosaico 120x68 pixeles 5MP 2592x1944 : intervalo de mosaico 162x122 pixeles 8MP 3280x2464 : intervalo de mosaico 205x154 pixeles Con respecto a la presente modalidad, a partir de los ocho filtros de pixeles disponibles 824 (PF0-PF7) , cuatro pueden ser seleccionados para las estadísticas de mosaico 863. Para cada mosaico, se pueden recopilar las siguientes estadísticas : (RsumaO» Gsumao, Bsumao) O (sRi¡neal_suma05 sGlirieal_sumaO> Ülineal_sumao)> O (sRsumaO* sGSUma0> sBsumao) O (YSuma0> Clsuma0, C2sumao), ConteoO (Rsumal ) GSumal > Bsumal ) O (sRijneal_sumal > sGljneal_sumal > sBi¡neal_suma]), O (sRsumai j sGsuma], sBsumai) o (Ysumai» Clsumal, C2suma]), Conteol (Rsuma2> Gsuma2, BSUma2) O (sR|ineal_suma2> sGl¡neal_suma2» sBiineai_suma2), O (sRSuma2> sGsuma2, sBSUma2) O (YSUma2, Clsuma2, C2suma2), Conteo2 (Rsuma3> GSUma3» BSuma3) O (sRljneal_suma3» sGlineal_suma3> SBljneal_suma3)! O (sRsuma3> Gsuma3> Bsuma3) O (Ysuma3> Clsuma3> C2suma3)> Conteo3, O Ysuma, cond(Ysuma), Yconteoi , Yconteo2 (de camY) En las estadísticas antes enlistadas, ConteoO-3 representa el conteo de pixeles que satisfacen las condiciones de píxel correspondientes a los cuatro filtros de píxel seleccionados. Por ejemplo, si los filtros de píxel PFO, PF1, PF5 y PF6 son seleccionados como los cuatro filtros de píxel para un mosaico o ventana particular, entonces las expresiones antes proporcionadas pueden corresponder a los valores y sumas de Conteo correspondientes a los datos de píxel (por ejemplo, RGB Bayer, sRGBiineai, sRGB, YC1Y2 , camYClC2) los cuales son seleccionados para esos filtros (por ejemplo, mediante lógica de selección 825) . De manera adicional, los valores de conteo pueden ser utilizados para normalizar las estadísticas (por ejemplo, dividiendo las sumas de color entre los valores de conteo correspondiente) . Tal como se muestra, dependiendo al menos parcialmente de los tipos de estadísticas que se necesitan, los filtros de pixeles seleccionados 824 se pueden configurar para seleccionar entre cualquiera de datos de píxel RGB Bayer, sRGBiineai# o sRGB, o datos de píxel YC1C2 (conversión de espacio de color no lineal o de cámara dependiendo de la selección mediante la lógica 826) , y determinar las estadísticas de suma de color para los datos de píxel seleccionados. Adicionalmente , tal como se analizó antes, el valor de luminancia, camY, de la conversión de espacio de color de cámara (camYClC2) también es recopilado para la información de suma de luminancia para estadísticas de exposición automática (AE) .
Adicionalmente , la lógica de estadísticas 3A también se puede configurar para recopilar estadísticas 861 para múltiples ventanas. Por ejemplo, en una modalidad, se pueden utilizar hasta ocho ventanas flotantes, con cualquier región rectangular que tenga un múltiplo de 4 píxeles en cada dimensión (por ejemplo, alto por ancho) hasta un tamaño máximo correspondiente al tamaño del cuadro de imagen. No obstante, la ubicación de las ventanas no necesariamente está restringida a múltiplos de 4 píxeles. Por ejemplo, las ventanas se pueden traslapar entre sí.
En la presente modalidad, se pueden seleccionar cuatro filtros de píxel 824 a partir de los ocho filtros de píxel disponibles (PF0-PF7) para cada ventana. Las estadísticas para cada ventana se pueden recopilar en la misma manera que para mosaicos, antes analizados. Por lo tanto, para cada ventana, se pueden recopilar las siguientes estadísticas 861: (RsumaO> GSUmaO> Bsumao) 0 SRlineal_sumaOj sGl¡neal_sumaO> SBiineal_sumao)i 0 (sRsumaO» sGgumaO> sBSumao) O (Ysuma0> lsuma0, C2sumao),ConteoO (Rsuma3> Gsuma3, Bsuma3) O (sRi¡neai_suma3 , sGlineal_suma3> SB]¡neai_suma3), O (sRsuma3, sGsuma3, sBsuma3) o (Ysuma3> Clsuma3, C2suma3), Conteo3, O Y, cond(Ysuma), Yconteoi , YConteo2 (de camY) En las estadísticas antes enlistadas, ConteoO-3 representa el conteo de píxeles que satisface las condiciones de píxel correspondientes a los cuatro filtros de píxel seleccionados para una ventana particular. A partir de los ocho filtros de píxel disponibles PF0-PF7, los cuatro filtros de píxel activos pueden ser seleccionados de manera independiente para cada ventana. De manera adicional, uno de los conjuntos de estadísticas puede ser recopilado utilizando filtros de píxel o las estadísticas de luminancia camY. Las estadísticas de ventana recopiladas para AWB y AE, en una modalidad, pueden ser mapeadas a uno o más registros.
Haciendo referencia todavía a la figura 82, la lógica de estadísticas 3A 742 también se puede configurar para adquirir las estadísticas de suma de fila de luminancia 859 para una ventana utilizando el valor de luminancia, camY, para la conversión del espacio de color de cámara. Esta información se puede utilizar para detectar y compensar el parpadeo. El parpadeo es generado por una variación periódica en algunas fuentes de luz fluorescente e incandescente, típicamente causada por la señal de energía AC. Por ejemplo, haciendo referencia a la figura 90, se muestra un gráfico que ilustra la manera en que el parpadeo puede ser causado por variaciones en una fuente de luz. La detección de parpadeo entonces se puede utilizar para detectar la frecuencia de la energía AC utilizada para la fuente de luz (por ejemplo, 50 Hz o 60 Hz) . Una vez que se conoce la frecuencia, el parpadeo se puede evitar fijando el tiempo de integración del sensor de imagen a un múltiplo entero del periodo de parpadeo.
Para detectar el parpadeo, la luminancia de cámara, camY, es acumulada sobre cada fila. Debido al muestreo hacia abajo de los datos de Bayer de entrada, cada valor camY puede corresponder a 4 filas de los datos de imagen en bruto originales. Lógica de control y/o microprogramacion cableada entonces pueden ejecutar un análisis de frecuencia del promedio de fila o, de manera más confiable, de las diferencias del promedio de fila sobre cuadros consecutivos para determinar la frecuencia de la energía AC asociada con una fuente de luz particular. Por ejemplo, con respecto a la figura 90, los tiempos de integración para el sensor de imagen se pueden basar en los tiempos ti, t2, t3 y t4 (por ejemplo, de manera que la integración ocurre en los tiempos correspondientes al momento en que una fuente de iluminación que muestra variaciones está generalmente al mismo nivel de brillantez.
En una modalidad, se puede especificar una ventana de suma de filas de luminancia y las estadísticas 859 son reportadas para píxeles dentro de esa ventana. A manera de ejemplo, para captura de video HD 1080p, asumiendo una ventana de 1024 píxeles de alto, se generan 256 sumas de filas de luminancia (por ejemplo, una suma por cada cuatro fila debido a la escalación hacia abajo por la lógica 795) , y cada valor acumulado puede ser expresado con 18 bits (por ejemplo, valores camY de 8 bits, hasta para 1024 muestras por fila) .
La lógica de recopilación de estadísticas 3A 742 de la figura 82 también puede permitir la recopilación de estadísticas de enfoque automático (AF) 842 por medio de la lógica de estadísticas de enfoque automático 841. En la figura 91 se proporciona un diagrama en bloques funcional que muestra una modalidad de la lógica de estadísticas AF 841 en una manera más detallada. Tal como se muestra, la lógica de estadísticas AF 841 puede incluir un filtro horizontal 843 y un detector de borde 844 que se aplica al RGB Bayer original (no muestreado hacia abajo) , dos filtros 3x3 846 en Y de Bayer, y dos filtros 3x3 847 en camY. En general, el filtro horizontal 843 proporciona una estadística de resolución fina por componente de color, los filtros 3x3 846 pueden proporcionar estadísticas de resolución fina en Bayer Y (RGB Bayer con transformada 3x1 (bloque 845) aplicada) , y los filtros 3x3 847 pueden proporcionar estadísticas bidimensionales más ásperas en camY (debido a que camY se obtiene utilizando datos RGB Bayer escalados hacia abajo, es decir, lógica 815) . Además, la lógica 841 puede incluir lógica 852 para decimar los datos RGB Bayer (por ejemplo, promediado 2x2, promediado 4x4, etcétera), y los datos RGB Bayer decimados 853 pueden ser filtrados utilizando filtros 3x3 854 para producir una salida filtrada 855 para datos RGB Bayer decimados. La presente modalidad proporciona 16 ventanas de estadísticas. En los límites de cuadro de fila, los píxeles de borde son replicados para los filtros de la lógica de estadísticas AF 841. Los diversos componentes de la lógica de estadísticas AF 841 se describen con mayor detalle a continuación.
Primero, el proceso de detección de borde horizontal incluye la aplicación del filtro horizontal 843 para cada componente de color (R, Gr, Gb, B) seguido por un detector de borde opcional 844 en cada componente de color. Por lo tanto, dependiendo de las condiciones de la generación de imágenes, esta configuración permite que la lógica de estadísticas AF 841 sea establecida como un filtro de paso alto sin detección de borde (por ejemplo, detector de borde deshabilitado) o, alternativamente, como un filtro de paso bajo seguido por un detector de borde (por ejemplo, detector de borde habilitado). Por ejemplo, en condiciones de baja luz, el filtro horizontal 843 puede ser más susceptible al ruido y, por lo tanto, la lógica 841 puede configurar el filtro horizontal como un filtro de paso bajo seguido por un detector de borde habilitado 844. Tal como se muestra, la señal de control 848 puede habilitar o deshabilitar el detector de borde 844. Las estadísticas de los diferentes canales de color son utilizadas para determinar la dirección del enfoque para mejorar la afinidad, debido a que los diferentes colores se pueden enfocar a diferente profundidad. En particular, la lógica de estadísticas AF 841 puede permitir técnicas para habilitar el control de enfoque automático utilizando una combinación de ajustes ásperos y finos (por ejemplo, a la longitud focal de la lente) . Modalidades de dichas técnicas se describen en detalle a continuación .
En una modalidad, el filtro horizontal puede ser un filtro de 7 derivaciones y se puede definir de la siguiente forma en las ecuaciones 41 y 42: salida(i) = (af_horzfilt_coeff[0] *(in(i-3)+in(i+3)) + af_horzfilt_coeff[l] *(in(i-2)+in(i+2)) + (41) af_horzfilt_coeff[2] *(in(i-l)+in(i+l)) + af_horzfilt_coeff[3]*in(i) ) salida(i) = max(-255, min(255, out(i))) (42) Aquí, cada coeficiente af_horzfilt_coeff [0 : 3] puede estar en el rango [-2, 2], e i representa el índice de píxel de entrada para R, Gr, Gb o B. La salida filtrada salida (i) se puede recortar entre el valor mínimo y máximo de -255 y 255, respectivamente (Ecuación 42) . Los coeficientes de filtro pueden ser definidos de forma independiente por componente de color .
El detector de borde opcional 844 puede seguir la salida del filtro horizontal 843. En una modalidad, el detector de borde 844 puede ser definido como: borde(i) = abs(-2*salida(i-l) + 2*salida(i+l)) + abs(-salida(i-2) + salida(i+2)) (43) borde(i) = max(0, min(255, borde(i))) (44) Por lo tanto, el detector de borde 844, cuando es habilitado, puede emitir un valor basado en los dos píxeles en cada lado del píxel de entrada actual i, tal como lo muestra la ecuación 43. El resultado puede ser reportado a un valor de 8 bits entre 0 y 255, tal como se muestra en la ecuación 44.
Dependiendo si se detecta un borde, la salida final del filtro de píxel (por ejemplo, filtro 843 y detector 844) puede ser seleccionada ya sea como la salida del filtro horizontal 843 o la salida de detector de borde 844. Por ejemplo, tal como se muestra en la Ecuación 45, la salida 849 del detector de borde 844 puede ser borde (i) en caso que se detecte un borde, o puede ser un valor absoluto de la salida de filtro horizontal salida (i) en caso que no se detecte un borde . borde(i) = (af_horzfilt_borde_detectado) ? borde(i) : abs(salida(i)) (45) Para cada ventana, los valores acumulados, borde_suma [R, Gr, Gb, B] , pueden ser seleccionados para ser (1) la suma de borde (j,i) para cada píxel en la ventana, o (2) el valor máximo de borde (i) a través de una línea en la ventana, max(borde), sumados en las líneas en la ventana. Asumiendo un tamaño de cuadro en bruto de 4096 x 4096 píxeles, el número de bits requeridos para almacenar los valores máximos de borde suma [R, Gr, Gb, B] , es 30 bits (por ejemplo, 8 bis por píxel, más 22 bits para una ventana que cubre todo el cuadro de imagen en bruto) .
Tal como se analizó, los filtros 3x3 847 para luminiscencia camY pueden incluir dos filtros 3x3 programables , referidos como F0 y Fl, los cuales se aplican a camY. El resultado del filtro 847 va ya sea a una función cuadrada o una función de valor absoluto. El resultado es acumulado en una ventana AF determinada para ambos filtros 3x3 FO y Fl a fin de generar un valor de borde de luminancia. En una modalidad, los valores de borde de luminancia en cada píxel camY son definidos de la siguiente forma: edgecamY_FX(j,i) = FX * camY (46) = FX(0,0) * camY (j-1, i-1) + FX(0,1) * camY (j-1, i)+ FX(0,2) * camY (j-1, i+1) + FX(1,0) * camY (j, i-1) + FX(1,1) * camY (j, i) + FX(1,2) * camY (j, i+D + FX(2,0) * camY G+l, i-1) + FX(2,1) * camY (j+1, i) + FX(2,2) * camY (j+1, i+1) edgecamY_FX(j,i) = f(max(-255, min(255, edgecaniY_FX(j,i)))) (47) f(a) = aA2 or abs(a) donde FX representa los filtros programables 3x3, F0 y Fl, con coeficientes con signo en el rango [-4, 4]. Los índices j e i representan ubicaciones de píxel en la imagen camY. Como se analizó anteriormente, el filtro en camY puede proporcionar estadísticas de resolución áspera, debido a que camY se deriva utilizando datos RGB Bayer escalados hacia abajo (por ejemplo, 4x4 a 1) . Por ejemplo, en una modalidad, los filtros F0 y Fl pueden ser establecidos utilizando un operador Scharr, el cual ofrece una simetría rotacional mejorada sobre un operador Sobel, un ejemplo de lo cual se muestra a continuación: Para cada ventana, los valores acumulados 850 determinados por los filtros 847, edgecamY_FX_sum (donde FX = F0 y Fl) , pueden ser seleccionados ya sea para (1) la suma de edgecamY_FX (j , i) para cada píxel en la ventana, o (2) el valor máximo de edgecamY_FX (j ) en una línea en la ventana, sumados en las líneas en la ventana. En una modalidad, edgecamY_FX_sum se puede saturar a un valor de 32 bits cuando f(a) se establece a aA2 para proporcionar estadísticas "más pico" con una resolución más fina. Para evitar la saturación se puede establecer un tamaño de ventana máximo X*Y en píxeles de cuadro en bruto de manera que no exceda un total de 1024x1024 píxeles (por ejemplo, es decir, X*Y <= 1048576 píxeles). Tal como se observó, f (a) también se puede establecer como un valor absoluto para proporcionar más estadísticas lineales.
Los filtros AF 3x3 846 en Bayer Y pueden ser definidos en una manera similar que los filtros 3x3 en camY, pero se aplican a valores de luminancia Y generados a partir de un cuádrete Bayer (2x2 píxeles) . Primero, valores RGB Bayer de 8 bits son convertidos a Y con coeficientes programables en el rango [0, 4] para generar un valor Y de blancos balanceados, tal como se muestra a continuación en la ecuación 48: bayerY = max(0, min(255, bayerY_Coeff[0] * R + bayerY_Coeff[l] * (Gr + Gb)/2 + (48) bayerY_Coeff[2] * B)) Al igual que los filtros 847 para camY, los filtros 3x3 846 para luminancia BayerY pueden incluir dos filtros 3x3 programables , referidos como FO y Fl, los cuales se aplican a bayerY. El resultado del filtro 846 va ya sea a una función cuadrada o una función de valor absoluto. El resultado se acumula en una ventana AF determinada para ambos filtros 3x3 FO y Fl para generar un valor de borde de luminancia. En una modalidad, los valores de borde de luminancia en cada píxel bayerY son definidos de la siguiente forma: edgebayerY_FX j,i) = FX * bayerY (49) = FX(0,0) * bayerY (j-1 , i-1) + FX(0, 1) * bayerY (j-l , i) + FX(0,2) * bayerY (j-1 , i) + FX(1,0) * bayerY 0, i-1) + FX(1, 1) * bayerY (j, i) + FX(1 ,2) * bayerY (j-1, i) + FX(2,0) * bayerY (j+l , i-1) + FX(2, 1) * bayerY (j+l, i) + FX(2,2) * bayerY (j+l , i) edgebayerY_FX(j,i) = f(max(-255, min(255, edgebayerY_FX(j,i)))) (50) f(a) = aA2 or abs(a) donde FX representa los filtros programables 3x3, FO y Fl , con coeficientes con signo en el rango [-4, 4] . Los índices j e i representan ubicaciones de píxel en la imagen bayerY. Tal como se analizó antes, el filtro en Bayer Y puede proporcionar estadísticas de resolución fina, debido a que la señal RGB Bayer recibida por la lógica AF 841 no está decimada. A manera de ejemplo solamente, los filtros FO y Fl de la lógica de filtro 846 pueden ser establecidos utilizando una de las siguientes configuraciones de filtro: Para cada ventana, los valores acumulados 851 determinados por los filtros 846, edgebayerY_FX_sum (donde FX=F0 y Fl) , pueden ser seleccionados para ser cualquiera de (1) la suma de edgebayerY_FX (j , i ) para cada píxel en la ventana, o (2) el valor máximo de edgebayerY_FX (j ) en una línea en la ventana, sumados en las líneas en la ventana. Aquí, edgebayerY_FX_sum puede saturarse a 32 bits cuando f(a) se establece a A . Por lo tanto, para evitar la saturación, el tamaño de ventana máximo X*Y en píxeles de cuadro en bruto se debiera establecer de manera que no exceda un total de 512x512 píxeles (por ejemplo, X*Y<=262144) . Tal como se analizó anteriormente, la configuración de f(a) a aA2 puede permitir estadísticas más pico, mientras que la configuración de f(a) a abs(a) puede proporcionar estadísticas más lineales .
Tal como se analizó anteriormente, las estadísticas 842 para AF son recopiladas para 16 ventanas. Las ventanas pueden ser cualquier área rectangular con cada dimensión siendo un múltiplo de 4 píxeles. Debido a que cada lógica de filtración 846 y 847 incluye dos filtros, en algunos casos, un filtro puede ser utilizado para normalización sobre 4 pixeles, y puede ser configurado para filtrar en las direcciones vertical y horizontal. Además, en algunas modalidades, la lógica AF 841 puede normalizar las estadísticas AF por brillantez. Esto se puede lograr estableciendo uno o más de los filtros de los bloques lógicos 846 y 847 como filtros de derivación. En algunas modalidades, la ubicación de las ventanas puede estar restringida a múltiplos de 4 pixeles, y se permite que las ventanas se traslapen. Por ejemplo, una ventana puede ser utilizada para adquirir valores de normalización, mientras que otra ventana puede ser utilizada para estadísticas adicionales, tal como varianza, como se analiza a continuación. En una modalidad, puede estar restringida a múltiplos de 4 pixeles, y se permite que las ventanas se traslapen. Por ejemplo, una ventana puede ser utilizada para adquirir valores de normalización, mientras que otra ventana puede ser utilizada para estadísticas adicionales, tal como varianza, como se analiza a continuación. En una modalidad, los filtros AF (por ejemplo, 843, 846, 847) pueden no implementar la aplicación de píxel en el borde de un cuadro de imagen y, por lo tanto, a fin de que los filtros AF utilicen todos los pixeles válidos, las ventanas AF pueden ser establecidas de manera que cada una esté al menos a 4 pixeles del borde superior del cuadro, al menos 8 pixeles del borde inferior del cuadro y al menos 12 píxeles del borde izquierdo/derecho del cuadro. En la modalidad ilustrada, se pueden recopilar y reportar las siguientes estadísticas para cada ventana: 32-bit edgeGr_sum para Gr 32-bit edgeR_sum para R 32-bit edgeB_sum para B 32-bit edgeGb_sum para Gb 32-bit edgebayerY_FO_sum para Y de Bayer para filtroO (FO) 32-bit edgebayerY_Fl_sum para Y de Bayer para filtro 1 (Fl) 32-bit edgecamY_FO_sum para camY para filtroO (FO) 32-bit edgecamY_Fl_sum para camY para filtrol (Fl) En dicha modalidad, la memoria requerida para almacenar las estadísticas AF 842 puede ser 16 (ventanas) multiplicadas por 8 (Gr, R, B, Gb, bayerY_F0, bayerY_Fl, camY_F0, camY_Fl) multiplicados por 32 bits.
Por lo tanto, en una modalidad, el valor acumulado por ventana puede ser seleccionado entre: la salida del filtro (la cual puede ser configurada como una configuración por omisión) , el píxel de entrada, o el píxel de entrada al cuadrado. La selección se puede realizar para cada una de las 16 ventanas AF, y puede aplicar a todas las 8 estadísticas AF (enlistadas antes) en una ventana determinada. Esto se puede utilizar para normalizar la clasificación AF entre dos ventanas en traslape, una de las cuales está configurada para recopilar la salida del filtro y una de las cuales está configurada para recopilar la suma de píxel de entrada. Adicionalmente , para calcular la varianza de pixeles en el caso de dos ventanas en traslape, una ventana se puede configurar para recopilar la suma de pixeles de entrada, y la otra para recopilar la suma de pixeles de entrada al cuadrado, proporcionando así una varianza que se puede calcular como: Varianza = (avg_píxel2) - (avg_píxel) 2 Utilizando las estadísticas AF, la lógica de control ISP 84 (figura 7) se puede configurar para ajustar una longitud focal de la lente de un dispositivo de imagen (por ejemplo, 30) , utilizando una serie de ajustes de longitud focal con base en "clasificaciones" de enfoque automático fino y áspero para poner una imagen en foco. Tal como se analizó antes, los filtros 3x3 847 para camY pueden permitir estadísticas ásperas, mientras que el filtro horizontal 843 y el detector de borde 844 pueden permitir estadísticas comparativamente más finas por componente de color, mientras que los filtros 3x3 846 en BayerY pueden permitir estadísticas finas en BayerY. Además, los filtros 3x3 854 en una señal RGB Bayer decimada 853 pueden proporcionar estadísticas ásperas para cada canal de color. Tal como se analiza adicionalmente a continuación, las clasificaciones AF se pueden calcular con base en los valores de salida de filtro para una señal de entrada particular (por ejemplo, suma de salidas de filtro F0 y Fl para camY, BayerY, Bayer RGB decimada, o con base en salidas del detector de borde/horizontal, etcétera.) La figura 92 muestra un gráfico 856 que muestra curvas 858 y 860 que representan clasificaciones AF ásperas y finas, respectivamente. Tal como se muestra, las clasificaciones AF ásperas basadas en las estadísticas ásperas pueden tener una respuesta más lineal a través de la distancia focal de la lente. Por lo tanto, en cualquier posición focal, un movimiento de lente puede generar un cambio en una clasificación de enfoque automático el cual puede ser utilizado para detectar si la imagen está entrando más en foco o fuera de foco. Por ejemplo, un incremento en una clasificación AF áspera después de un ajuste de lente puede indicar que la longitud focal está siendo ajustada en la dirección correcta (por ejemplo, hacia la posición focal óptica) .
No obstante, a medida que se aproxima la posición focal óptica, puede disminuir el cambio en la clasificación AF áspera para pasos de ajustes de lentes más pequeños, haciendo difícil discernir la dirección correcta del ajuste focal. Por ejemplo, tal como se muestra en el gráfico 856, el cambio en la clasificación AF áspera entre la posición áspera (CP) CP1 y CP2 es representado por ACi2, lo cual muestra un incremento en la aspereza de CP1 a CP2. No obstante, tal como se muestra, de CP3 a CP4 , el cambio AC34 es la clasificación AF áspera (la cual pasa a través de la posición focal óptima (OFP) ) , aunque sigue aumentando, es relativamente más pequeño. Se debiera entender que las posiciones CP1-CP6 a lo largo de la longitud focal L no pretenden corresponder necesariamente a los tamaños de paso tomados por la lógica de enfoque automático a lo largo de la longitud focal. Es decir, puede haber pasos adicionales tomados entre cada posición áspera que no se muestran. Las posiciones ilustradas CP1-CP6 solamente pretenden mostrar la manera en que el cambio en la clasificación AF áspera puede disminuir gradualmente a medida que la posición focal se aproxima a la OFP.
Una vez que se determina la posición aproximada de la OFP (por ejemplo, con base en las clasificaciones AF ásperas mostradas en la figura 92, la posición aproximada de la OFP puede ser entre CP3 y CP5) , los valores de clasificación AF finos, representados por la curva 860 pueden ser evaluados para refinar la posición focal. Por ejemplo, las clasificaciones AF finas pueden ser más planas cuando la imagen está fuera de foco, de manera que un cambio grande de la posición de la lente no provoca un cambio grande en la clasificación AF fina. No obstante, a medida que la posición focal se aproxima a la posición focal óptica (OFP) , la clasificación AF fina puede cambiar de manera aguda con pequeños ajustes de posición. Por lo tanto, al colocar un pico o ápice 862 en la curva de clasificación AF fina 860, la OFP puede ser determinada para la escena de imagen actual. Por lo tanto, para resumir, las clasificaciones AF ásperas pueden ser utilizadas para determinar las inmediaciones generales de la posición focal óptica, mientras que las clasificaciones AF finas pueden ser utilizadas para marcar una posición más exacta dentro de esa inmediación.
En una modalidad, el proceso de enfoque automático puede comenzar adquiriendo clasificaciones AF ásperas a lo largo de toda la longitud focal disponible, comenzando en la posición 0 y finalizando en la posición L (que se muestra en el gráfico 856) y puede determinar las clasificaciones AF ásperas en diversas posiciones de paso (por ejemplo, CP1-CP6) . En una modalidad, una vez que la posición focal de la lente ha alcanzado la posición L, la posición puede restablecerse a 0 antes de evaluar las clasificaciones AF en diversas posiciones focales. Por ejemplo, esto se puede deber al tiempo de asentamiento del serpentín de un elemento mecánico que controla la posición focal. En esta modalidad, después del restablecimiento a la posición 0, la posición focal puede ser ajustada hacia la posición L a una posición que primero indique un cambio negativo en una clasificación AF áspera, aquí la posición CP5 que muestra un cambio negativo ?0 5 con respecto a la posición CP4. A partir de la posición CP5, la posición focal se puede ajustar en incrementos más pequeños con relación a incrementos utilizados en los ajustes de clasificación AF áspera (por ejemplo, posiciones FP1, FP2 , FP3 , etcétera) de regreso en la dirección hacia la posición 0, mientras que se busca un pico 862 en la curva de clasificación AF fina 860. Tal como se analizó antes, la posición focal OFP correspondiente al pico 862 en la curva de clasificación AF fina 860 puede ser la posición focal óptima para la escena de imagen actual.
Tal como se apreciará, las técnicas antes descritas para ubicar el área óptima y la posición óptima para enfoque se pueden referir como "escalación de montaña" en el sentido de que los cambios en las curvas para las clasificaciones AF 858 y 860 se analizan para ubicar la OFP. Además, aunque el análisis de las clasificaciones AF ásperas (curva 858) y las clasificaciones AF finas (curva 860) se muestra como utilizando pasos del mismo tamaño para análisis de clasificación ásperas (por ejemplo, distancia entre CP1 y CP2) y pasos del mismo tamaño para análisis de clasificación fina (por ejemplo, distancia entre FP1 y FP2) , en algunas modalidades, los tamaños de paso pueden variar dependiendo del cambio en la clasificación de una posición a la siguiente. Por ejemplo, en una modalidad, el tamaño de paso entre CP3 y CP4 se puede reducir con relación al tamaño de paso entre CP1 y CP2 debido a que la delta general en la clasificación AF áspera (AC3 ) es menor que la delta de CP1 a CP2 (?0?2) · En la figura 93 se ilustra un método 864 que muestra este proceso. Comenzando en el bloque 865, se determina una clasificación AF áspera para datos de imagen a diversos pasos a lo largo de la longitud focal, de la posición 0 a la posición L (figura 92) . Posteriormente, en el bloque 866, las clasificaciones AF ásperas son analizadas y la posición áspera que muestra el primer cambio negativo en la clasificación AF áspera es identificada como un punto de inicio para el análisis de clasificación AF fina. Por ejemplo, posteriormente, en el bloque 867 la posición focal es escalonada nuevamente hacia atrás a la posición inicial 0 en pasos más pequeños, con la clasificación AF fina en cada paso siendo analizada hasta que se ubica un pico en la curva de clasificación AF (por ejemplo, curva 860 de la figura 92) . En el bloque 868, la posición focal correspondiente al pico se establece como la posición focal óptima para la escena de imagen actual .
Tal como se analizó antes, debido a los tiempos de asentamiento del serpentín mecánico, la modalidad de la técnica mostrada en la figura 93 se puede adaptar para adquirir clasificaciones AF ásperas a lo largo de toda la longitud focal inicialmente, en lugar de analizar cada posición áspera una por una y buscar un área de foco óptima. No obstante, otras modalidades en las cuales los tiempos de asentamiento del serpentín son de menor preocupación, pueden analizar las clasificaciones AF ásperas una por una en cada paso, en lugar de buscar en toda la longitud focal.
En algunas modalidades, las clasificaciones AF pueden ser determinadas utilizando valores de luminancia de balance de blancos derivados de los datos RGB Bayer. Por ejemplo, el valor de luminancia, Y, se puede derivar decimando un cuádrete Bayer 2x2 por un factor de 2, tal como se muestra en la figura 94, o decimando un bloque de píxeles 4x4 consistente de 4 cuadretes Bayer 2x2 por un factor de 4, tal como se muestra en la figura 95. En una modalidad, las clasificaciones AF se pueden determinar utilizando gradientes. En otra modalidad, las clasificaciones AF se pueden determinar aplicando una transformada 3x3 utilizando un operador Scharr, el cual proporciona simetría rotacional al mismo tiempo que reduce al mínimo los errores angulares medios cuadráticos ponderados en el dominio de Fourier. A manera de ejemplo, el cálculo de una clasificación AF áspera en caraY utilizando un operador Scharr común (antes analizado) se muestra a continuación: A F Clasificación aspem donde in representa el valor Y de luminancia decimado. En otras modalidades, la clasificación AF para estadísticas ásperas y finas se puede calcular utilizando otras transformadas 3x3.
Los ajustes de enfoque automático también se pueden realizar de manera diferente dependiendo de los componentes de color, debido a que diferentes longitudes de onda de luz se pueden ver afectadas de manera diferente por la lente, lo cual es un motivo por lo que el filtro horizontal 843 es aplicado a cada componente de color de forma independiente. Por lo tanto, el enfoque automático se puede seguir realizando incluso en la presencia de aberración cromática en la lente. Por ejemplo, debido a que el rojo y azul típicamente se enfocan en una posición o distancia diferentes con respecto al verde cuando están presentes aberraciones cromáticas, clasificaciones AF relativas para cada color se pueden utilizar a fin de determinar la dirección del enfoque. Esto se ilustra mejor en la figura 96, la cual muestra la posición focal óptima para los canales de color azul, rojo y verde para una lente 870. Tal como se muestra, las posiciones focales óptimas para rojo, verde y azul se muestran por las letras de referencia R, G y B respectivamente, cada una correspondiendo a una clasificación AF, con una posición focal actual 872. Generalmente, en dicha configuración, puede ser deseable seleccionar la posición óptima del foco como la posición correspondiente a la posición focal óptima para los componentes verdes (por ejemplo, debido a que RGB Bayer tiene dos veces tantos componentes verdes como rojos o azules) , aquí la posición G. Por lo tanto, se puede esperar que para una posición focal óptima, el canal verde debiera mostrar la clasificación de enfoque automático más alta. Por lo tanto, con base en las posiciones de las posiciones focales óptimas para cada color (con aquellas más cercanas a la lente teniendo clasificaciones AF superiores) , la lógica AF 841 y lógica de control asociada 84 pueden determinar cuál dirección enfocar con base en las clasificaciones AF relativas para azul, verde y rojo. Por ejemplo, si el canal azul tiene una clasificación AF superior con relación al canal verde (tal como se muestra en la figura 96) , entonces la posición focal es ajustada en la dirección negativa (hacia el sensor de imagen) sin tener que analizar primero la dirección positiva desde la posición actual 872. En algunas modalidades, se puede realizar la detección o análisis del iluminante utilizando temperaturas correlacionadas con el color (CCT) .
Además, tal como se mencionó antes, se pueden también utilizar clasificaciones de varianza. Por ejemplo, sumas de píxel y valores de suma de píxel al cuadrado se pueden acumular para tamaños de bloque (por ejemplo, 8x8-32x32 píxeles) , y se pueden utilizar para derivar clasificaciones de varianza (por ejemplo, avg_pixel2) (avg_pixel ) A2 ) . Las varianzas se pueden sumar para obtener una clasificación de varianza total para cada ventana. Se pueden utilizar tamaños de bloque más pequeños para obtener clasificaciones de varianza finas, tamaños de bloque más grandes se pueden utilizar para obtener clasificaciones de varianza más ásperas .
Haciendo referencia a la lógica de estadísticas 3A 742 de la figura 82, la lógica 742 también se puede configurar para recopilar histogramas de componentes 874 y 876. Tal como se apreciará, los histogramas pueden ser utilizados para analizar la distribución del nivel de píxeles en una imagen. Esto puede ser útil para implementar ciertas funciones, tal como ecualización de histograma, donde los datos de histograma son utilizados para determinar la especificación del histograma (concordancia de histograma) . A manera de ejemplo, los histogramas de luminancia se pueden utilizar para AE (por ejemplo, para ajustar/configurar los tiempos de integración del sensor) , e histogramas de color se pueden utilizar para A B . En la presente modalidad, los histogramas pueden ser 256, 128, 64 o 32 agrupamientos (donde los 8, 7, 6 y 5 bits superiores del píxel son utilizados para determinar el agrupamiento, respectivamente) para cada componente de color, conforme a lo especificado por un tamaño de agrupamiento (BinSize) . Por ejemplo, cuando los datos de píxel es 14 bits, un factor de escala adicional entre 0-6 y un desplazamiento puede ser especificado para determinar qué rango (por ejemplo, cuáles 8 bits) de los datos de píxel es recopilado para propósitos de estadísticas. El número de agrupamiento se puede obtener de la siguiente forma: idx = ( (pixel - hist_desplazamiento) >> ( 6 - hist_escala) En una modalidad, los agrupamientos de histograma de color son incrementados solamente si los índices de agrupamiento están en el rango [0, 2A (8-BinSize) ] : si (idx >= 0 && idx < 2A(8-BinSize)) StatsHist[idx] += Conteo; En la presente modalidad, la unidad de procesamiento de estadísticas 142 puede incluir dos unidades de histograma. Este primer histograma 874 (HistO) se puede configurar par recopilar datos de píxel como parte de la recopilación de estadísticas después de la decimación 4x4. Para HistO, los componentes se pueden seleccionar para ser RGB, sRGBiineai, sRGB o YC1C2 utilizando circuito de selección 880. El segundo histograma 876 (Histl) se puede configurar para recopilar datos de píxel antes del conducto de estadísticas (antes de la lógica de corrección de píxel defectuoso 738) , como se muestra con mayor detalle en la figura 96. Por ejemplo, los datos RGB Bayer en bruto (salida de 146) pueden ser decimados (para producir la señal 878) utilizando la lógica 882 omitiendo píxeles, tal como se analiza con mayor detalle a continuación. Para el canal verde, el color puede ser seleccionado entre Gr, Gb o ambos, Gr y Gb (ambos conteos Gr y Gb son acumulados en los agrupamientos de verde) .
A fin de mantener el ancho del agrupamiento de histograma igual entre los dos histogramas, Histl se puede configurar para recopilar datos de píxel cada 4 píxeles (cada otro cuádrete Bayer) . El inicio de la ventana del histograma determina la primera ubicación del cuádrete Bayer donde el histograma comienza a acumular. El inicio en esta ubicación, cada otro cuádrete Bayer se omite horizontalmente y verticalmente para Histl. La ubicación de inicio de ventana puede ser cualquier posición de píxel para Histl y, por lo tanto, los pixeles que son omitidos por el cálculo del histograma pueden ser seleccionados cambiando el inicio de la ubicación de ventana. Histl se puede utilizar para recopilar datos, representados por 884 en la figura 97, cerca del nivel de negro para ayudar en la compensación dinámica del nivel de negro en el bloque 739. Por lo tanto, aunque se muestra en la figura 97 como estando separado de la lógica de estadísticas 3A 742 para propósitos ilustrativos, se debiera entender que el histograma 876 en realidad puede ser parte de las estadísticas escritas en la memoria, y que en realidad puede estar físicamente ubicado dentro de la unidad de procesamiento de estadísticas 142.
En la presente modalidad, los agrupamientos rojo (R) y azul (B) pueden ser 20 bits, con el agrupamiento verde (G) que es de 21 bits (el verde es más grande para permitir la acumulación de Gr y Gb en Histl) . Esto permite un tamaño de imagen máximo de 4160 por 3120 pixeles (12 MP) . El tamaño de memoria interna requerido es 3x256x20(1) bits (3 componentes de color, 256 agrupamientos) .
Con respecto al formato de memoria, las estadísticas para ventanas AWB'/AE, ventanas AF, histograma a color 2D, e histogramas de componentes pueden ser mapeados a registros para permitir el acceso anticipado por la microprogramación cableada. En una modalidad, dos señalizadores de memoria pueden ser utilizados para escribir las estadísticas en la memoria, uno para estadísticas de mosaico 863, y uno para sumas de fila de luminancia 859, seguido por todas las otras estadísticas recopiladas. Todas las estadísticas son escritas en memoria externa, las cuales pueden ser memoria DMA. Los registros de dirección de memoria pueden ser doblemente almacenados en memoria intermedia de manera que una nueva ubicación en memoria puede ser especificada en cada cuadro.
Antes de proceder con un análisis detallado de la lógica de conducto ISP 82 corriente abajo de la lógica de etapa inicial ISP 80, se debiera entender que el arreglo de los diversos bloques lógicos funcionales en las unidades de procesamiento de estadísticas 142 y 144 (por ejemplo, bloques lógicos 738, 739, 740, 741 y 742) y la unidad de procesamiento de píxel de etapa inicial ISP 150 (por ejemplo, bloques lógicos 650 y 652) están destinados a ilustrar solamente una modalidad de la presente técnica. De hecho, en otras modalidades, los bloques lógicos ilustrados aquí pueden ser acomodados en diferente orden, o pueden incluir bloques lógicos adicionales que pueden ejecutar funciones de procesamiento de imagen adicionales no específicamente aquí descritos. Además, se debiera entender que las operaciones de procesamiento de imagen ejecutadas en las unidades de procesamiento de estadísticas (por ejemplo, 142 y 144) tal como la corrección de sombreado de lente, detección/corrección de píxeles defectuosos, y compensación de nivel de negro, son ejecutadas dentro de las unidades de procesamiento de estadísticas para los propósitos de recopilar datos estadísticos. Por lo tanto, operaciones de procesamiento ejecutadas sobre los datos de imagen recibidos por las unidades de procesamiento de estadísticas en realidad no se ven reflejadas en la señal de la imagen 109 (FEProcOut) que es emitida desde la lógica de procesamiento de píxel de etapa inicial ISP 150 y reenviada a la lógica de procesamiento de secuencia ISP 82.
Antes de continuar, también se debiera observar que, dado el tiempo de procesamiento suficiente y la similitud entre muchos de los requerimientos de procesamiento de las diversas operaciones aquí descritas, es posible reconfigurar los bloques funcionales mostrados aquí para ejecutar procesamiento de imagen en una manera secuencial, en lugar de una naturaleza canalizada. Tal como se entenderá, esto puede reducir adicionalmente los costos de implementación del hardware en general, pero también puede incrementar el ancho de banda a la memoria externa (por ejemplo, para poner en memoria caché/almacenar resultados/datos intermedios) .
La Lógica de Procesamiento de Canal ("Secuencia") ISP Habiendo descrito la lógica de etapa inicial ISP 80 anteriormente a detalle, el presente análisis ahora se enfoca en la lógica de procesamiento de secuencia ISP 82. Generalmente, la función de la lógica de conducto ISP 82 es recibir datos de imagen en bruto, los cuales pueden ser proporcionados desde la lógica de etapa inicial ISP 80 o recuperados de la memoria 108, y para ejecutar operaciones de procesamiento de imagen adicionales, es decir, antes de emitir los datos de imagen al dispositivo de despliegue 28.
En la figura 98 se muestra un diagrama en bloques que muestra una modalidad de la lógica de conducto ISP 82. Tal como se ilustra, la lógica de conducto ISP 82 puede incluir lógica de procesamiento en bruto 900, lógica de procesamiento RGB 902, y lógica de procesamiento YVbCr 904. La lógica de procesamiento en bruto 900 puede ejecutar varias operaciones de procesamiento de imagen, tal como la detección y corrección de pixeles defectuosos, corrección de sombreado de lente, la interpolación cromática, así como la aplicación de ganancias para el balance automático de blancos y/o la configuración de un nivel de negro, tal como se analizará con mayor detalle a continuación. Tal como se muestra en la presente modalidad, la señal de entrada 908 a la lógica de procesamiento en bruto 900 puede ser la salida del píxel en bruto 109 (señal FEProcOut) desde la lógica de etapa inicial ISP 80 o los datos de píxel en bruto 112 desde la memoria 108, dependiendo de la presente configuración de la lógica de selección 906.
Como un resultado de las operaciones de interpolación cromática ejecutadas dentro de la lógica de procesamiento en bruto 900, la salida de la señal de imagen 910 puede estar en el dominio RGB, y posteriormente puede ser reenviada a la lógica de procesamiento RGB 902. Por ejemplo, tal como se muestra en la figura 98, la lógica de procesamiento RGB 902 recibe la señal 916, la cual puede ser la señal de salida 910 o una señal de imagen RGB 912 de la memoria 108, dependiendo de la presente configuración de la lógica de selección 914. La lógica de procesamiento RGB 902 puede permitir varias operaciones de ajuste de color RGB, incluyendo corrección de color (por ejemplo, utilizando una matriz de corrección de color) , la aplicación de ganancias de color para balance automático de blancos, así como mapeo de tonos globales, tal como se analizará con mayor detalle a continuación. La lógica de procesamiento RGB 904 también puede permitir la conversión del espacio de color de datos de imagen RGB al espacio de color YCbCr ( luminancia/crominancia) . Por lo tanto, la salida de señal de imagen 918 puede ser en el dominio YCbCr, y posteriormente puede ser reenviada a la lógica de procesamiento YCbCr 904.
Por ejemplo, tal como se muestra en la figura 98, la lógica de procesamiento YCbCr 904 recibe la señal 924, la cual puede ser la señal de salida 918 de la lógica de procesamiento RGB 902 o una señal YCbCr 920 de la memoria 108, dependiendo de la presente configuración de la lógica de selección 922. Tal como se analizará con mayor detalle a continuación, la lógica de procesamiento YCbCr 904 puede permitir operaciones de procesamiento de imagen en el espacio de color YCbCr, incluyendo la escala, supresión de crominancia, afinado de luminancia, ajustes de brillantez, contraste y color (BCC) , mapeo gama YCbCr, decimación de crominancia, y así sucesivamente. La salida de la señal de imagen 926 de la lógica de procesamiento YCbCr 904 puede ser enviada a la memoria 108, o puede ser emitida desde la lógica de procesamiento de secuencia ISP 82 como la señal de imagen 114 (figura 7) . A continuación, de acuerdo con la modalidad de la circuitería de procesamiento de imagen 32 mostrada en la figura 7, la señal de imagen 114 puede ser enviada al dispositivo de despliegue 28 (ya sea directamente o a través de la memoria 108) para visualización por parte del usuario, o puede ser procesada adicionalmente utilizando un motor de compresión (por ejemplo, codificador 118) , un CPU/GPU, un motor de gráficos, o similar. Adicionalmente, en una modalidad donde una unidad de etapa final ISP 120 está incluida en la circuitería de procesamiento de imagen 32 (por ejemplo, figura 8), la señal de imagen 114 puede ser enviada a la lógica de procesamiento de etapa final ISP 120 para post-procesamiento corriente abajo adicional.
De acuerdo con modalidades de las presentes técnicas, la lógica de conducto ISP 82 puede soportar el procesamiento de datos de píxel en bruto en los formatos de 8 bits, 10 bits, 12 bits o 14 bits. Por ejemplo, en una modalidad, los datos de entrada de 8 bits, 10 bits o 12 bits pueden ser convertidos a 14 bits en la entrada de la lógica de procesamiento en bruto 900, y operaciones de procesamiento en bruto y procesamiento RGB pueden ser ejecutadas con precisión de 14 bits. En esta última modalidad, los datos de imagen de 14 bits pueden ser muestreados hacia abajo a 10 bits antes de la conversión de los datos RGB al espacio de color YCbCr, y el procesamiento YCbCr (lógica 904) puede ser ejecutado con precisión de 10 bits.
A fin de proporcionar una descripción comprensiva de las diversas funciones proporcionadas por la lógica de procesamiento de secuencia ISP 82, cada una de la lógica de procesamiento en bruto 900, lógica de procesamiento RGB 902, y lógica de procesamiento YCbCr 904, así como lógica interna para ejecutar diversas operaciones de procesamiento de imagen que pueden ser implementadas en cada unidad respectiva de la lógica 900, 902 y 904, se analizarán a continuación secuencialmente , comenzando con la lógica de procesamiento en bruto 900. Por ejemplo, haciendo referencia ahora a la figura 99, se ilustra un diagrama en bloques que muestra una vista más detallada de una modalidad de la lógica de procesamiento en bruto 900, de acuerdo con una modalidad de la presente técnica. Tal como se muestra, la lógica de procesamiento en bruto 900 incluye la lógica de ganancia, desplazamiento y fijación (GOC) 930, la lógica de detección/corrección de píxeles defectuosos (DPDC) 932, la lógica de reducción de ruido 934, la lógica de corrección de sombreado de lente 936, la lógica GOC 938 y la lógica de interpolación cromática 940. Además, aunque los ejemplos que se analizan a continuación asumen el uso de un arreglo de filtro de color Bayer con los sensores de imagen 90, se debiera entender que otras modalidades de la presente técnica pueden utilizar diferentes tipos de filtros de color también.
La señal de entrada 908, la cual puede ser una señal de imagen en bruto, primero es recibida por la lógica de ganancia, desplazamiento y sujeción (GOC) 930. La lógica GOC 930 puede proporcionar funciones similares y puede ser implementada en una manera similar con respecto a la lógica BLC 739 de la unidad de procesamiento de estadísticas 142 de la lógica de etapa inicial ISP 80, tal como se analizó anteriormente en la figura 68. Por ejemplo, la lógica GOC 930 puede proporcionar ganancia digital, desplazamientos y fijación (recorte) independientemente para cada componente de color R, B, Gr y Gb de un sensor de imagen Bayer. Particularmente, la lógica GOC 930 puede ejecutar balance automático de blancos o establecer el nivel de negro de los datos de imagen en bruto. Además, en algunas modalidades, la lógica GOC 930 también puede ser utilizada para corregir o compensar un desplazamiento entre los componentes de color Gr y Gb.
En operación, el valor de entrada para el píxel actual primero es desplazado por un valor con signo y multiplicado por una ganancia. Esta operación puede ser ejecutada utilizando la fórmula mostrada en la Ecuación 11 anterior, en donde X representa el valor de píxel de entrada para un componente de color determinado R, B, Gr o Gb, 0[c] representa un desplazamiento de 16 bits con signo para el componente de color actual c, y G[c] representa un valor de ganancia para el componente de color c. Los valores para G[c] pueden ser previamente determinados durante el procesamiento de estadísticas (por ejemplo, en el bloque de etapa inicial ISP 80) . En una modalidad, la ganancia G[c] puede ser un número sin signo de 16 bits con 2 bits enteros y 14 bits de fracción (por ejemplo, representación de punto de flotación 2.14) y la ganancia G[c] puede ser aplicada con redondeo. A manera de ejemplo solamente, la ganancia G[c] puede tener un rango de entre 0 a 4X.
El valor de píxel calculado Y (el cual incluye la ganancia G[c] y desplazamiento 0[c]) de la Ecuación 11 entonces se puede recortar a un rango mínimo y máximo de acuerdo con la Ecuación 12. Tal como se analizó anteriormente, las variables min[c] y max[c] pueden representar "valores de recorte" de 16 bits con signo para los valores de salida mínimo y máximo, respectivamente. En una modalidad, la lógica GOC 930 también se puede configurar para mantener un conteo del número de píxeles que fueron recortados por arriba y por debajo de los rangos máximo y mínimo, respectivamente, para cada componente de color.
Posteriormente, la salida de la lógica GOC 930 es reenviada a la lógica de detección y corrección de píxeles defectuosos 932. Tal como se analizó anteriormente con referencia a la figura 68 (lógica DPDC 738) , píxeles defectuosos se pueden atribuir a un número de factores, y pueden incluir píxeles "calientes" (o de fuga) , píxeles "atascados" , y píxeles "muertos" , en donde los píxeles calientes exhiben una fuga de carga más alta de lo normal con relación a los píxeles no defectuosos, y por lo tanto pueden parecer más brillantes que los pixeles no defectuosos, y en donde un pixel atascado parece siempre estar encendido (por ejemplo, completamente cargado) y por lo tanto parece más brillante, mientras que un pixel muerto parece siempre estar apagado. Debido a esto, puede ser deseable tener un esquema de detección de pixel que sea lo suficientemente robusto para identificar y corregir diferentes tipos de escenarios de falla. Particularmente, cuando se compara con la lógica DPDC de etapa inicial 738, la cual puede proporcionar solamente detección/corrección de defecto dinámico, la lógica DPDC de secuencia 932 puede permitir la detección/corrección de defectos fijos o estáticos, la detección/corrección de defectos dinámicos, así como la remoción de granularidad óptica .
De acuerdo con modalidades de las técnicas aquí divulgadas, la detección/corrección de pixeles defectuosos ejecutada por la lógica DPDC 932 puede ocurrir independientemente para cada componente de color (por ejemplo, R, B, Gr y Gb) , y puede incluir varias operaciones para detectar pixeles defectuosos, así como para corregir los pixeles defectuosos detectados. Por ejemplo, en una modalidad, las operaciones de detección de pixeles defectuosos pueden permitir la detección de defectos estáticos, defectos dinámicos así como la detección de granularidad óptica, la cual se puede referir a las interferencias eléctricas o ruido (por ejemplo, ruido de fotones) que puede estar presente en el sensor de generación de imagen. Por analogía, la granularidad óptica puede aparecer en una imagen como artefactos de ruido aleatorio, similares a la manera en la cual puede aparece la estática en una pantalla, tal como una pantalla de televisión. Además, tal como se observó anteriormente, la corrección de defectos dinámicos es vista como dinámica en el sentido de que la caracterización de un píxel como defectuoso en un momento determinado puede depender de los datos de la imagen en los píxeles vecinos. Por ejemplo, un píxel atascado que siempre está en su máxima brillantez puede no ser visto como un píxel defectuoso si la ubicación del píxel atascado es en un área de la imagen actual que esté dominada por colores blancos brillantes. Por el contrario, si el píxel atascado está en una región de la imagen actual que es dominada por colores más oscuros o negro, entonces el píxel atascado puede ser identificado como un píxel defectuoso durante el procesamiento por la lógica DPDC 932 y puede ser corregido por consiguiente.
Con respecto a la detección de defectos estáticos, la ubicación de cada píxel se compara con una tabla de defectos estáticos, la cual puede almacenar datos correspondientes a la ubicación de píxeles que son conocidos como defectuosos. Por ejemplo, en una modalidad, la lógica DPDC 932 puede monitorear la detección de píxeles defectuosos (por ejemplo, utilizando un mecanismo contador o registro) y, si un píxel particular es observado como fallando repetidamente, la ubicación del píxel es almacenada en una tabla de defectos estáticos. Por lo tanto, durante la detección de defectos estáticos, si se determina que la ubicación del píxel actual está en la tabla de defectos estáticos, entonces el píxel actual es identificado como siendo un píxel defectuoso, y un valor de reemplazo es determinado y almacenado temporalmente. En una modalidad, el valor de reemplazo puede ser el valor del píxel previo (con base en el orden de escaneo) del mismo componente de color. El valor de reemplazo puede ser utilizado para corregir el defecto estático durante la detección y corrección del defecto dinámico/granularidad óptica, tal como se analizará a continuación. De manera adicional, si el píxel previo está fuera del cuadro en bruto 310 (figura 23) , entonces su valor no es utilizado, y el defecto estático puede ser corregido durante el proceso de corrección de defecto dinámico. Además, debido a las consideraciones de memoria, la tabla de defectos estáticos puede almacenar un número finito de entradas de ubicación. Por ejemplo, en una modalidad, la tabla de defectos estáticos puede ser implementada como una fila FIFO configurada para almacenar un total de 16 ubicaciones para cada dos líneas de datos de imagen. Las ubicaciones definidas en la tabla de defectos estáticos, no obstante, serán corregidas utilizando un valor de reemplazo de píxel previo (en lugar de hacerlo a través del proceso de detección de defectos dinámicos que se analiza a continuación) . Tal como se mencionó anteriormente, modalidades de la presente técnica también pueden permitir la actualización de la tabla de defectos estáticos de manera intermitente con el paso del tiempo .
Modalidades pueden permitir que la tabla de defectos estáticos sea implementada en memoria en-chip o memoria fuera-de-chip . Tal como se apreciará, el uso de una implementación en-chip puede incrementar el área/tamaño de chip general, mientras que el uso de una implementación fuera-de-chip puede reducir el área/tamaño de chip, pero puede incrementar los requerimientos del ancho de banda de memoria. Por lo tanto, se debiera entender que la tabla de defectos estáticos puede ser implementada ya sea en-chip o fuera-de-chip dependiendo de los requerimientos específicos de la implementación, es decir, el número total de píxeles que van a ser almacenados dentro de la tabla de defectos estáticos .
Los procesos de detección de defectos dinámicos y granularidad óptica pueden ser cambiados en tiempo con respecto al proceso de detección de defectos estáticos antes analizado. Por ejemplo, en una modalidad, el proceso de detección de defectos dinámicos y granularidad óptica puede comenzar después que el proceso de detección de defectos estáticos ha analizado dos líneas de escaneo (por ejemplo, filas) de píxeles. Tal como se puede apreciar, esto permite la identificación de defectos estáticos y que sus valores de reemplazo sean determinados antes que ocurra la detección dinámica/granularidad óptica. Por ejemplo, durante el proceso de detección dinámica/granularidad óptica, si el píxel actual fue previamente marcado como siendo un defecto estático, en lugar de aplicar operaciones de detección dinámica/granularidad óptica, el defecto estático simplemente es corregido utilizando el valor de reemplazo previamente valorado.
Con respecto a la detección de defectos dinámicos y granularidad óptica, estos procesos pueden ocurrir en secuencia o en paralelo. La detección y corrección de defectos dinámicos y granularidad óptica que es realizada por la lógica DPDC 932 se puede basar en la detección de borde adaptable utilizando gradientes de dirección píxel -a-píxel . En una modalidad, la lógica DPDC 932 puede seleccionar los ocho vecinos inmediatos del píxel actual teniendo el mismo componente de color que están dentro del cuadro en bruto 310 (figura 23) . En otras palabras, los pixeles actuales y sus ocho vecinos inmediatos P0, Pl, P2 , P3 , P4, P5, P6 y P7 pueden formar un área 3x3, tal como se muestra a continuación en la figura 100.
Sin embargo, se debiera observar que dependiendo de la ubicación del píxel actual P, los pixeles fuera del cuadro en bruto 2310 no son considerados cuando se calculan los gradientes píxel-a-píxel . Por ejemplo, con respecto al caso "superior- izquierda" 942 mostrado en la figura 100, el píxel actual P está en la esquina izquierda superior del cuadro en bruto 310 y, por lo tanto, los pixeles vecinos P0, Pl, P2 , P3 y P5 fuera del cuadro en bruto 310 no son considerados, dejando solamente los pixeles P4 , P6 y P7 (N=3) . En el caso "superior" 944, el píxel actual P está en el borde más superior del cuadro en bruto 310 y, por lo tanto, los pixeles vecinos P0, Pl y P2 fuera del cuadro en bruto 310 no son considerados, dejando solamente los pixeles P3 , P4 , P5, P6 y P7 (N=5) . A continuación, en el caso "superior-derecha" 946, el píxel actual P está en la esquina derecha superior del cuadro en bruto 310 y, por lo tanto, los pixeles vecinos P0, Pl, P2 , P4 y P7 fuera del cuadro en bruto 310 no son considerados, dejando solamente los pixeles P3 , P5 y P6 (N=3) . En el caso "izquierdo" 948, el pixel actual P está en el borde más a la izquierda del cuadro en bruto 310 y, por lo tanto, los píxeles vecinos P0, P3 y P5 fuera del cuadro en bruto 310 no son considerados, dejando solamente los píxeles Pl, P2, P4, P6 y P7 (N=5) .
En el caso "central" 950, todos los píxeles P0-P7 yacen dentro cuadro en bruto 310 y, por lo tanto, son utilizados para determinar los gradientes píxel-a-píxel (N=8) . En el caso de "derecha" 952, el pixel actual P está en el borde más a la derecha del cuadro en bruto 310 y, por lo tanto, los píxeles vecinos P2 , P4 y P7 fuera del cuadro en bruto 310 no son considerados, dejando solamente los píxeles P0, Pl, P3, P5 y P6 (N=5). Adicionalmente , en el caso "inferior-izquierda" 954, el pixel actual P está en la esquina izquierda inferior del cuadro en bruto 310 y, por lo tanto, los píxeles vecinos P0, P3 , P5, P6 y P7 fuera del cuadro en bruto 310 no son considerados, dejando solamente los píxeles Pl, P2 y P4 (N=3) . En el caso "inferior" 956, el pixel actual P está en el borde más inferior del cuadro en bruto 310 y, por lo tanto, los píxeles vecinos P5 , P6 y P7 fuera del cuadro en bruto 310 no son considerados, dejando solamente los píxeles P0, Pl, P2 , P3 y P4 (N=5) . Finalmente, en el caso "inferior-derecha" 958, el pixel actual P está en la esquina derecha inferior del cuadro en bruto 310 y, por lo tanto, los pixeles vecinos P2 , P4 , P5, P6 y P7 fuera del cuadro en bruto 310 no son considerados, dejando solamente los pixeles P0 , Pl y P3 (N=3) .
Por lo tanto, dependiendo de la posición del píxel actual P, el número de pixeles utilizados para determinar los gradientes píxel—a-píxel puede ser 3, 5 u 8. En la modalidad ilustrada, para cada píxel vecino (k = 0 a 7) dentro del límite de la imagen (por ejemplo, cuadro en bruto 310) , los gradientes píxel -a-píxel se pueden calcular de la siguiente forma: Gk=abs (P-Pk) , para 0<k<l (solamente para k dentro del cuadro en bruto) (51) Adicionalmente , un gradiente promedio, Gav, se puede calcular como la diferencia entre el píxel actual y el promedio, PaV/ de sus pixeles circundantes, tal como lo muestran las siguientes ecuaciones: en donde N=3, 5 u 8 (dependiendo de la posición del píxel) (52a) Gav=abs(P-Pav) (52b) Los valores de gradiente píxel-a-píxel (Ecuación 51) pueden ser utilizados para determinar un caso de defecto dinámico, y el promedio de los pixeles vecinos (Ecuaciones 52a y 52b) puede ser utilizado en la identificación de casos de granularidad óptica, tal como se analiza adicionalmente a continuación .
En una modalidad, la detección de defectos dinámicos puede ser realizada por la lógica DPDC 932 de la siguiente forma. Primero, se asume que un píxel es defectuoso si un cierto número de los gradientes G¾ está en o por debajo de un umbral particular, denotado por la variable dynTh (umbral de defecto dinámico). Por lo tanto, para cada píxel, se acumula un conteo (C) del número de gradientes para píxeles vecinos dentro de los límites de la imagen que están en o por debajo del umbral dynTh. El umbral dynTh puede ser una combinación de un componente de umbral fijo y un componente de umbral dinámico que puede depender de la "actividad" presente de los píxeles circundantes. Por ejemplo, en una modalidad, el componente de umbral dinámico para dynTh puede ser determinado calculando un valor de componente de alta frecuencia Phf con base en la suma de la diferencia absoluta entre los valores de píxel promedio Pav (Ecuación 52a) y cada píxel vecino, tal como se ilustra a continuación: en donde N = 3, 5 u 8 (52c) En casos donde el píxel está ubicado en una esquina de la imagen (N=3) o en un borde de la imagen (N=5) , el Phf puede ser multiplicado por el 8/3 u 8/5, respectivamente. Tal como se puede apreciar, esto asegura que el componente de alta frecuencia Phf esté normalizado con base en ocho píxeles vecinos (N=8) .
Una vez que se determina Phf, el umbral de detección de defecto dinámico dynTh puede ser calculado de la siguiente forma : dynTh=dynThi+ (dynTh2xPhf) , (53) en donde dynTh]. representa el componente de umbral fijo, y en donde dynTh2 representa el componente de umbral dinámico, y es un multiplicador para Phf en la Ecuación 53. Se puede proporcionar un componente de umbral fijo diferente dynThi para cada componente de color, pero para cada píxel del mismo color, dynThi es el mismo. A manera de ejemplo solamente, dynThi puede ser establecido de manera que esté al menos por arriba de la variante de ruido en la imagen.
El componente de umbral dinámico dynTh2 se puede determinar con base en algunas características de la imagen. Por ejemplo, en una modalidad, dynTh2 se puede determinar utilizando datos empíricos almacenados referentes al tiempo de integración del sensor y/ exposición. Los datos empíricos pueden ser determinados durante la calibración del sensor de imagen (por ejemplo, 90) , y pueden asociar valores del componente de umbral dinámico que pueden ser seleccionados para dynTh2 con cada uno de un número de puntos de datos . Por lo tanto, con base en el valor de tiempo de integración del sensor y/o exposición actual, el cual puede ser determinado durante el procesamiento de estadísticas en la lógica de etapa inicial ISP 80, dynTh2 puede ser determinado seleccionando el valor de componente de umbral dinámico a partir de los datos empíricos almacenados que corresponden al valor de tiempo de integración del sensor y/o exposición actual. Adicionalmente , si el valor de tiempo de integración del sensor y/o exposición actual no corresponde directamente a uno de los puntos de datos empíricos, entonces dynTh2 puede ser determinado interpolando los valores del componente de umbral dinámico asociados con los puntos de datos entre los cuales cae el valor de tiempo de integración del sensor y/o exposición actual. Además, al igual que el componente de umbral fijo dynThi, el componente de umbral dinámico dynTh2 puede tener diferentes valores para cada componente de color. Por lo tanto, el valor de umbral compuesto dynTh puede variar para cada componente de color (por ejemplo, R, B, Gr, Gb) .
Tal como se mencionó anteriormente, para cada píxel, se determina un conteo C del número de gradientes para píxeles vecinos dentro de los límites de la imagen que están en o por debajo del umbral dynTh. Por ejemplo, para cada píxel vecino dentro del cuadro en bruto 310, el conteo acumulado C de los gradientes que están en o por debajo del umbral dynTh se puede calcular de la siguiente forma: para 0 < k < 7 (solamente para k dentro del cuadro en bruto) A continuación, si el conteo acumulado C es determinado como menor que o igual a un conteo máximo, denotado por la variable dynMaxC, entonces el píxel puede ser considerado como un defecto dinámico. En una modalidad, diferentes valores para dynMaxC pueden ser proporcionados para las condiciones N=3 (esquina), N=5 (borde), y N=8. Esta lógica se expresa a continuación: si ( C=dynMaxC) , entonces el píxel actual P es defectuoso (55) Tal como se mencionó anteriormente, la ubicación de los píxeles defectuosos puede ser almacenada en la tabla de defectos estáticos. En algunas modalidades, el valor de gradiente mínimo (min(Gk)) calculado durante la detección de defectos dinámicos para el píxel actual se puede almacenar y puede ser utilizado para clasificar los píxeles defectuosos, de manera que un valor de gradiente mínimo mayor indica una mayor "severidad" de un defecto y debiera ser corregido durante la corrección del píxel antes que sean corregidos los defectos de menos severidad. En una modalidad, un píxel puede requerir ser procesado sobre múltiples cuadros de generación de imagen antes de ser almacenado en la tabla de defectos estáticos, tal como mediante la filtración de las ubicaciones de los píxeles defectuosos con el paso del tiempo. En la modalidad posterior, la ubicación del píxel defectuoso se puede almacenar en la tabla de defectos estáticos solamente si el defecto aparece en un número particular de imágenes consecutivas en la misma ubicación. Además, en algunas modalidades, la tabla de defectos estáticos se puede configurar para clasificar las ubicaciones almacenadas de los píxeles defectuosos con base en los valores de gradiente mínimo. Por ejemplo, el valor de gradiente mínimo más elevado puede indicar un defecto de mayor "severidad" . Al ordenar las ubicaciones de esta manera, se puede establecer la prioridad de la corrección de defectos estáticos, de manera que primero se corrigen los defectos más severos o importantes. Adicionalmente, la tabla de defectos estáticos puede ser actualizada con el paso del tiempo para incluir defectos estáticos recientemente detectados, y ordenarlos por consiguiente con base en sus valores respectivos de gradiente mínimo .
La detección de granularidad óptica, la cual puede ocurrir en paralelo con el proceso de detección de defectos dinámicos que se describió anteriormente, se puede ejecutar determinando si el valor Gav (Ecuación 52b) está por arriba de un umbral de detección de granularidad óptica spkTh. Al igual que el umbral de defecto dinámico dynTh, el umbral de granularidad óptica spkTh también puede incluir componentes fijos y dinámicos, referidos por spkThi y spkTh2, respectivamente. En general, los componentes fijos y dinámicos spkThi y spkTh2 pueden ser establecidos más "agresivamente" en comparación con los valores dynThx y dynTh2, a fin de evitar la detección falsa de granularidad óptica en áreas de la imagen que pueden tener una textura más pesada y otras, tales como texto, follaje, ciertos patrones de tela, etcétera. Por consiguiente, en una modalidad, el componente de umbral de granularidad óptica dinámico spkTh2 se puede incrementar para áreas de alta textura de la imagen, y se puede disminuir para áreas "más planas" o más uniformes. El umbral de detección de granularidad óptica spkTh se puede calcular tal como se muestra a continuación: spkTh=spkThi+ (spkTh2 x Phf) , (56) en donde spkThx representa el componente de umbral fijo, y en donde spkTh2 representa el componente de umbral dinámico. La detección de la granularidad óptica entonces se puede determinar de acuerdo con la siguiente expresión: si (Gav>spkTh) , entonces el píxel actual P es de granularidad óptica (57) Una vez que se han identificado los píxeles defectuosos, la lógica DPDC 932 puede aplicar operaciones de corrección de píxel dependiendo del tipo de defecto detectado. Por ejemplo, si el píxel defectuoso fue identificado como un defecto estático, el píxel es reemplazado con el valor de reemplazo almacenado, tal como se indicó anteriormente (por ejemplo, el valor del píxel previo del mismo componente de color) . Si el píxel fue identificado ya sea como un defecto dinámico o como granularidad óptica, entonces la corrección del píxel se puede ejecutar de la siguiente forma. Primero, los gradientes son calculados como la suma de la diferencia absoluta entre el píxel central y un primer y segundo píxeles vecinos (por ejemplo, cálculo de de la Ecuación 51) para cuatro direcciones, una dirección horizontal (h) , una dirección vertical (v) , una dirección diagonal-positiva (dp) , y una dirección diagonal-negativa (dn) , tal como se muestra a continuación: Gh = G3+G4 (58) Gv = G+G6 (59) GdP = G2+G5 (60) Gdn = G0+G7 (61) A continuación, el valor de píxel correctivo Pc se puede determinar a través de interpolación lineal de los dos pixeles vecinos asociados con el gradiente de dirección Gh, Gv, GdP y Gdn que tiene el valor más pequeño. Por ejemplo, en una modalidad, la lógica establecida a continuación puede expresar el cálculo de Pc: Además si (min==Gv) Además si (min==GdP) pr =-—5- Además si { in==Gdn) Las técnicas de corrección de pixel implementadas por la lógica DPDC 932 también pueden permitir excepciones en las condiciones de límite. Por ejemplo, si uno de los dos pixeles vecinos asociados con la dirección de interpolación seleccionada está fuera del cuadro en bruto, entonces el valor de pixel vecino que está dentro del cuadro en bruto es sustituido en su caso. Por lo tanto, al utilizar esta técnica, el valor de pixel correctivo será equivalente al valor del pixel vecino dentro del cuadro en bruto.
Se debiera observar que las técnicas de detección/corrección de píxeles defectuosos aplicadas por la lógica DPDC 932 durante el procesamiento de secuencia ISP son más robustas en comparación con la lógica DPDC 738 en la lógica de etapa inicial ISP 80. Tal como se analizó en la modalidad anterior, la lógica DPDC 738 ejecuta solamente detección y corrección de defectos dinámicos utilizando píxeles vecinos únicamente en la dirección horizontal, mientras que la lógica DPDC 932 permite la detección y corrección de defectos estáticos, defectos dinámicos, así como granularidad óptica, utilizando píxeles vecinos en las direcciones horizontal y vertical.
Tal como se apreciará, el almacenamiento de la ubicación de los píxeles defectuosos utilizando una tabla de defectos estáticos puede permitir la filtración temporal de píxeles defectuosos con menores requerimientos de memoria. Por ejemplo, en comparación con muchas técnicas convencionales las cuales almacenan imágenes completas y aplican filtración temporal para identificar defectos estáticos con el paso del tiempo, modalidades de la presente técnica solamente almacenan las ubicaciones de los píxeles defectuosos, lo cual típicamente se puede realizar utilizando solo una fracción de la memoria requerida para almacenar todo un cuadro de imagen. Además, tal como se analizó anteriormente, el almacenamiento de un valor de gradiente mínimo (min(Gk)), permite un uso eficiente de la tabla de defectos estáticos priorizando el orden de las ubicaciones en las cuales se corrigen los pixeles defectuosos (por ejemplo, comenzando con aquellos que serán más visibles) .
Adicionalmente , el uso de umbrales que incluyen un componente dinámico (por ejemplo, dynTh2 y spkTh2) puede ayudar a reducir las detecciones de defectos falsos, un problema con frecuencia encontrado en sistemas de procesamiento de imagen convencionales cuando se procesan áreas de alta textura de una imagen (por ejemplo, texto, follaje, ciertos patrones de tela, etcétera) . Además, el uso de gradientes direccionales (por ejemplo, h, v, dp, dn) para corrección de píxel puede reducir la apariencia de artefactos visuales en caso que ocurra una detección de defecto falso. Por ejemplo, la filtración en la dirección de gradiente mínimo puede tener como resultado una corrección que siga produciendo resultados aceptables bajo la mayoría de los casos, incluso en casos de falsa detección. Adicionalmente, la inclusión del píxel actual P en el cálculo de gradiente puede mejorar la precisión de la detección del gradiente, particularmente en el caso de los pixeles calientes.
Las técnicas de detección y corrección de pixeles defectuosos antes analizadas, implementadas por la lógica DPDC 932, se pueden resumir a través de una serie de gráficos de flujo proporcionados en las figuras 101-103. Por ejemplo, haciendo referencia primero a la figura 101, se ilustra un proceso 960 para detectar defectos estáticos. Comenzando inicialmente en el paso 962, un píxel de entrada P es recibido en un primer tiempo, T0. A continuación, en el paso 964, la ubicación del píxel P es comparada con los valores almacenados en una tabla de defectos estáticos. La lógica de decisión 966 determina si la ubicación del píxel P se encuentra en la tabla de defectos estáticos. Si la ubicación de P está en la tabla de defectos estáticos, entonces el proceso 960 continúa al paso 968, en donde el píxel P es marcado como un defecto estático y se determina un valor de reemplazo. Tal como se analizó anteriormente, el valor de reemplazo puede ser determinado con base en el valor del píxel previo (en orden de escaneo) del mismo componente de color. El proceso 960 entonces continúa al paso 970, en donde el proceso 960 avanza al proceso de detección dinámica y de granularidad óptica 980, que se ilustra en la figura 102. Adicionalmente , si en la lógica de decisión 966, se determina que la ubicación del píxel P no está en la tabla de defectos estáticos, entonces el proceso 960 avanza al paso 970 sin ejecutar el paso 968.
Continuando con la figura 102, el píxel de entrada P es recibido en el tiempo TI, tal como se muestra en el paso 982, para procesamiento a fin de determinar si está presente un defecto dinámico o granularidad óptica. El tiempo TI puede representar un cambio en tiempo con respecto al proceso de detección de defectos estáticos 960 de la figura 101. Tal como se analizó anteriormente, el proceso de detección de defecto dinámico y granularidad óptica puede comenzar después que el proceso de detección del defecto estático ha analizado dos líneas de escaneo (por ejemplo, filas) de píxeles, permitiendo así tiempo para la identificación de los defectos estáticos y que sus valores de reemplazo respectivos sean determinados antes que ocurra la detección dinámica/granularidad óptica.
La lógica de decisión 984 determina si el píxel de entrada P fue previamente marcado como un defecto estático (por ejemplo, por el paso 968 del proceso 960) . Si P es marcado como un defecto estático, entonces el proceso 980 puede seguir al proceso de corrección de píxel mostrado en la figura 103 y puede derivar el resto de los pasos mostrados en la figura 102. Si la lógica de decisión 984 determina que el píxel de entrada P no es un defecto estático, entonces el proceso continúa al paso 986, y se identifican píxeles vecinos que pueden ser utilizados en el proceso de defecto dinámico y granularidad óptica. Por ejemplo, de acuerdo con la modalidad antes analizada y que se ilustra en la figura 100, los píxeles vecinos pueden incluir los 8 vecinos inmediatos del píxel P (por ejemplo, P0-P7) , formando así un área de píxel 3x3. A continuación, en el paso 9888, los gradientes píxel -a-píxel son calculados con respecto a cada píxel vecino dentro del cuadro en bruto 310, tal como se describe en la Ecuación 51 anterior. Adicionalmente, se puede calcular un gradiente promedio (Gav) como la diferencia entre el píxel actual y el promedio de sus píxeles circundantes, tal como se muestra en las Ecuaciones 52a y 52b.
El proceso 980 entonces se ramifica al paso 990 para detección de defecto dinámico y a la lógica de decisión 998 para detección de granularidad óptica. Tal como se observó anteriormente, la detección de defecto dinámico y detección de granularidad óptica pueden, en algunas modalidades, ocurrir en paralelo. En el paso 990, se determina un conteo C del número de gradientes que son menores que o iguales al umbral dynTh. Tal como se describió anteriormente, el umbral dynTh puede incluir componentes fijos y dinámicos y, en una modalidad, puede ser determinado de acuerdo con la Ecuación 53 anterior. Si C es menor que o igual a un conteo máximo, dynMaxC, entonces el proceso 980 continúa al paso 996, y el píxel actual es marcado como siendo un defecto dinámico. Posteriormente, el proceso 980 puede continuar al proceso de corrección de pixel mostrado en la figura 103, el cual se analizará a continuación.
Volviendo a la ramificación después del paso 988, para detección de granularidad óptica, la lógica de decisión 998 determina si el gradiente promedio Gav es mayor que un umbral de detección de granularidad óptica spkTh, el cual también puede incluir un componente fijo y dinámico, si Gav es mayor que el umbral spkTh, entonces el pixel P es marcado como conteniendo la granularidad óptica en el paso 1000 y, posteriormente, el proceso 980 continúa a la figura 103 para la corrección del pixel con granularidad óptica. Además, si la salida de ambos bloques lógicos de decisión 992 y 998 es "NO" , entonces esto indica que el pixel P no contiene defectos dinámicos, granularidad óptica o incluso defectos estáticos (lógica de decisión 984) . Por lo tanto, cuando las salidas de la lógica de decisión 992 y 998 son ambas "NO" , el proceso 980 puede concluir en el paso 994, con lo cual el pixel P se pasa sin cambios, ya que no se detectaron defectos (por ejemplo, estáticos, dinámicos o granularidad óptica) .
Continuando con la figura 103, se proporciona un proceso de corrección de pixel 1010 de acuerdo con las técnicas antes descritas. En el paso 1012, el pixel de entrada P es recibido desde el proceso 980 de la figura 102. Se debiera observar que el pixel P puede ser recibido por el proceso 1010 desde el paso 984 (defecto estático) o desde los pasos 996 (defecto dinámico) y 1000 (defecto de granularidad óptica) . La lógica de decisión 1014 entonces determina si el píxel P es marcado como un defecto estático. Si el píxel P es un defecto estático, entonces el proceso 1010 continúa y finaliza en el paso 1016, con lo cual el defecto estático es corregido utilizando el valor de reemplazo determinado en el paso 968 (figura 101) .
Si el píxel P no es identificado como un defecto estático, entonces el proceso 1010 continúa de la lógica de decisión 1014 al paso 1018, y se calculan los gradientes direccionales . Por ejemplo, tal como se analizó anteriormente con referencia a las Ecuaciones 58-61, los gradientes pueden ser calculados como la suma de la diferencia absoluta entre el píxel central y el primer y segundo píxeles vecinos para cuatro direcciones (h, v, dp y dn) . A continuación, en el paso 1020, el gradiente direccional que tiene el valor más pequeño es identificado y, posteriormente, la lógica de decisión 1022 valora si uno de los dos píxeles vecinos asociados con el gradiente mínimo está ubicado fuera del cuadro de imagen (por ejemplo, cuadro en bruto 310) . Si ambos píxeles vecinos están dentro del cuadro de imagen, entonces el proceso 1010 continúa al paso 1024, y un valor de corrección de píxel (Pc) es determinado aplicando interpolación lineal a los valores de los dos píxeles vecinos, tal como lo ilustra la Ecuación 62. Posteriormente, el píxel de entrada P puede ser corregido utilizando el valor de corrección de píxel interpolado Pc, como se muestra en le paso 1030.
Volviendo a la lógica de decisión 1022, si se determina que uno de los dos píxeles vecinos está ubicado fuera del cuadro de imagen (por ejemplo, cuadro en bruto 165) , entonces en lugar de utilizar el valor del píxel externo (Pout) , la lógica DPDC 592 puede sustituir el valor de Pout con el valor del otro píxel vecino que está dentro del cuadro de imagen (Pin) , tal como se muestra en el paso 1026. Posteriormente, en el paso 1028, el valor de corrección de píxel Pc es determinado interpolando los valores de Pin y el valor sustituido de Pout. En otras palabras, en este caso, Pc puede ser equivalente al valor de Pin. Concluyendo en el paso 1030, el píxel P es corregido utilizando el valor Pc. Antes de continuar, se debiera entender que los procesos de detección y corrección de píxeles defectuosos particulares aquí analizados con referencia a la lógica DPDC 932 están destinados a reflejar solamente una posible modalidad de la presente técnica. De hecho, dependiendo de las restricciones de diseño y/o costo, es posible un número de variaciones, y se pueden agregar o retirar características de manera que la complejidad y robustez general de la lógica de detección/corrección de defectos se ubica entre la lógica de detección/corrección más simple 738 implementada en el bloque de etapa inicial ISP 80 y la lógica de detección/corrección de defectos analizada aquí con referencia a la lógica DPDC 932.
Haciendo referencia nuevamente a la figura 99, los datos de píxel corregidos son emitidos desde la lógica DPDC 932 y después recibidos por la lógica de reducción de ruido 934 para procesamiento adicional. En una modalidad, la lógica de reducción de ruido 934 se puede configurar para implementar filtración de paso bajo de borde adaptable bidimensional para reducir el ruido en los datos de la imagen al mismo tiempo que se mantienen los detalles y texturas. Los umbrales de borde adaptable pueden ser establecidos (por ejemplo, a través de la lógica de control 84) con base en los niveles de iluminación presentes, de manera que la filtración puede ser fortalecida bajo condiciones de baja luz. Además, tal como se mencionó brevemente antes con respecto a la determinación de los valores dynTh y spkTh, la varianza del ruido se puede determinar por anticipado para un sensor determinado de manera que los umbrales de reducción de ruido se pueden establecer justo por encima de la varianza de ruido, de manera que durante el procesamiento de reducción de ruido, el ruido es reducido sin afectar significativamente las texturas y detalles de la escena (por ejemplo, evitar/reducir falsas detecciones) . Asumiendo una implementación de filtro de color Bayer, la lógica de reducción de ruido 934 puede procesar cada componente de color Gr, R, B y Gb independientemente utilizando un filtro horizontal de 7-derivaciones y un filtro vertical de 5-derivaciones separables. En una modalidad, el proceso de reducción de ruido se puede llevar a cabo corrigiendo la no uniformidad en los componentes de color verde (Gb y Gr) , y después ejecutando filtración horizontal y filtración vertical .
La no uniformidad verde (GNU) generalmente se caracteriza por una diferencia de brillantez ligera entre los píxeles Gr y Gb dada una superficie plana uniformemente iluminada. Sin corregir o compensar esta no uniformidad, algunos artefactos, tales como un artefacto de "laberinto", pueden aparecer en una imagen a pleno color después de la interpolación cromática. Durante el proceso de no uniformidad del verde se puede incluir: determinar, para cada píxel verde en los datos de imagen Bayer en bruto, si la diferencia absoluta entre un píxel verde actual (Gl) y el píxel verde a la derecha y abajo (G2) del píxel actual es menor que un umbral de corrección GNU (gnuTh) . La figura 104 ilustra la ubicación de los píxeles Gl y G2 en un área 2x2 del patrón Bayer. Tal como se muestra, el color de los píxeles que colindan con Gl puede depender de si el píxel verde actual es un píxel Gb o Gr. Por ejemplo, si Gl es Gr, entonces G2 es Gb, el píxel a la derecha de Gl es R (rojo) y el píxel abajo de Gl es B (azul) . Alternativamente, si Gl es Gb, entonces G2 es Gr, y el píxel a la derecha de Gl es B, mientras que el píxel debajo de Gl es R. Si la diferencia absoluta entre Gl y G2 es menor que el valor de umbral de corrección GNU, entonces el píxel verde actual Gl es reemplazado por el promedio de Gl y G2 , tal como lo muestra la siguiente lógica: (abs(Gl-G2) < gnuTh) ; G1 = G1 + G2 (g3) Tal como se puede apreciar, la aplicación de la corrección de no uniformidad de verde de esta manera puede ayudar a evitar que los píxeles Gl y G2 sean promediados a través de los bordes, mejorando y/o preservando así la afinidad.
La filtración horizontal se aplica después de la corrección de no uniformidad de verde y puede, en una modalidad, proporcionar un filtro horizontal de 7-derivaciones . Se calculan los gradientes a través del borde de cada derivación de filtro, y si están por arriba de un umbral de borde horizontal (horzTh) , la derivación de filtro es doblada al píxel central, tal como se ilustra a continuación. En algunas modalidades, la filtración de ruido se puede adaptar al borde. Por ejemplo, el filtro horizontal puede ser un filtro de respuesta de impulso finito (FIR) donde las derivaciones del filtro son utilizadas solamente si la diferencia entre el píxel central y el píxel en la derivación es más pequeña que un umbral que depende de la varianza de ruido. El filtro horizontal puede procesar los datos de imagen independientemente para cada componente de color (R, B, Gr, Gb) y puede utilizar los valores no filtrados como valores de entrada.
A manera de ejemplo, la figura 105 muestra una imagen gráfica de un conjunto de píxeles horizontales P0 a P6 , con una derivación central colocada en P3. Con base en los píxeles mostrados en la figura 105, los gradientes de borde para cada derivación de filtro se pueden calcular de la siguiente forma: EhO = abs(PO-Pl) (64) Ehl = abs(Pl-P2) (65) Eh2 = abs(P2-P3) (66) Eh3 = abs(P3-P4) (67) Eh4 = abs(P4-P5) (68) Eh5 = abs(P5-P6) (69) Los gradientes de borde Eh0-Eh5 entonces pueden ser utilizados por el componente de filtro horizontal para determinar una salida de filtración horizontal, Phorz , utilizando la fórmula mostrada en la Ecuación 70 a continuación: Phorz = C0x[(Eh2 > horzTh [c]) ? P3 : (Ehl > horzTh [c]) ? P2 : (EhO > horzTh [c] ) ? Pl : P0] + Clx[(Eh2 > horzTh [c]) ? P3 : (Ehl > horzTh[c]) ? P2 : Pl] + C2X[(Eh2 > horzTh[c]) ? P3 : P2] + C3XP3 + (70) C4X[(Eh3 > horzTh[c]) ? P3 : P4] + C5X [ (Eh3 > horzTh [c] ) ? P3 : (Eh4 > horzTh [c] ) ? P4 : P5] + C6x[(Eh3 > horzTh[c] ) ? P3 : (Eh4 > horzTh [c] ) ? P4 : (Eh5 > horzTh [c] ) ? P5 : P6] , en donde horzTh [c] es el umbral de borde horizontal para cada componente de color c (por ejemplo, R, B, Gr y Gb) , y en donde C0-C6 son los coeficiente de derivación de filtro correspondientes a los píxeles P0-P6, respectivamente. La salida de filtro horizontal Phorz se puede aplicar en la ubicación del píxel central P3. En una modalidad, los coeficientes de derivación de filtro C0-C6 pueden ser valores de dos -complementos de 16 bits, con 3 bits enteros y 13 bits fracciónales (3.13 en punto de flotación). Además, se debiera observar que los coeficientes de derivación de filtro C0-C6 no necesariamente necesitan ser simétricos con respecto al píxel central P3.
La filtración vertical también es aplicada por la lógica de reducción de ruido 934 después de los procesos de filtración horizontal y corrección de no uniformidad de verde. En una modalidad, la operación de filtro vertical puede proporcionar un filtro de 5 -derivaciones , tal como se muestra en la figura 106, con la derivación central del filtro vertical ubicada en P2. El proceso de filtración vertical puede ocurrir en una manera similar al proceso de filtración horizontal antes descrito. Por ejemplo, se calculan los gradientes a través del borde de cada derivación de filtro, y si están por arriba de un umbral de borde vertical (verTh) , la derivación de filtro es doblada al píxel central P2. El filtro vertical puede procesar los datos de imagen independientemente para cada componente de color (R, B, Gr, Gb) y puede utilizar valores no filtrados como valores de entrada.
Con base en los píxeles mostrados en la figura 106, los gradientes de borde vertical para cada derivación de filtro se pueden calcular de la siguiente forma: EvO = abs(PO-Pl) (71) Evl = abs(Pl-P2) (72) Ev2 = abs(P2-P3) (73) Ev3 = abs(P3-P4) (74) Los gradientes de borde Ev0-Ev5 entonces pueden ser utilizados por el filtro vertical para determinar una salida de filtración vertical, Pvert utilizando la fórmula mostrada en la Ecuación 75 a continuación: Pvert = COX [(Evl > vertTh[c]) ? P2 : (EvO > vertTh[c]) ? Pl : PO] + ClX[(Evl > vertTh[c]) ? P2 : Pl] + C2XP2 + (75) C3X[(Ev2 > vertTh[c]) ? P2 : P3] + C4X[(Ev2 > vertTh[c]) ? P2 : (Eh3 > vertTh[c]) ? P3 : P4] , en donde vertTh[c] es el umbral de borde vertical para cada componente de color c (por ejemplo, R, B, Gr y Gb) , y en donde C0-C4 son los coeficientes de derivación de filtro correspondientes a los píxeles P0-P4 de la figura 106, respectivamente. La salida de filtro vertical Pvert se puede aplicar en la ubicación del píxel central P2. En una modalidad, los coeficientes de derivación de filtro C0-C4 pueden ser valores de dos-complementos de 16 bit, con 3 bits enteros y 13 bits fracciónales (3.13 en punto de flotación) .
Además, se debiera observar que los coeficientes de derivación de filtro C0-C4 no necesariamente necesitan ser simétricos con respecto al píxel central P2.
Adicionalmente, con respecto a las condiciones del límite, cuando los píxeles vecinos están fuera del cuadro en bruto 310 (figura 23) , los valores de los píxeles fuera-delímite son replicados con el valor del mismo píxel de color en el borde del cuadro en bruto. Esta convención puede ser implementada para operaciones de filtración horizontal y vertical. A manera de ejemplo, haciendo referencia nuevamente a la figura 105, en el caso de la filtración horizontal, si el píxel P2 es un píxel de borde en el borde más a la izquierda del cuadro en bruto, y los píxeles P0 y Pl están fuera del cuadro en bruto, entonces los valores de los píxeles P0 y Pl son sustituidos con el valor del píxel P2 para filtración horizontal.
Haciendo referencia nuevamente al diagrama en bloques de la lógica de procesamiento en bruto 900 mostrada en la figura 99, la salida de la lógica de reducción de ruido 934 posteriormente es enviada a la lógica de corrección de sombreado de lente (LSC) 936 para procesamiento. Tal como se analizó anteriormente, las técnicas de corrección de sombreado de lente pueden incluir la aplicación de una ganancia apropiada sobre una base por píxel para compensar las caídas en la intensidad de la luz, lo cual puede ser el resultado de la óptica geométrica de la lente, imperfecciones en la fabricación, mala alineación del arreglo de las microlentes y el filtro de arreglo de color, y así sucesivamente. Además, el filtro infrarrojo (IR) en algunas lentes puede ocasionar que la caída dependa de la iluminante y, por lo tanto, las ganancias de sombreado de lente se pueden adaptar dependiendo de la fuente de luz detectada.
En la modalidad mostrada, la lógica LSC 936 de la secuencia ISP 82 se puede implementar en una manera similar, y por lo tanto proporcionar generalmente las mismas funciones que la lógica LSC 740 del bloque de etapa inicial ISP 80, tal como se analizó anteriormente con referencia a las figuras 71-79. Por consiguiente, a fin de evitar la redundancia, se debiera entender que la lógica LSC 936 de la modalidad aquí ilustrada está configurada para operar generalmente en la misma manera que la lógica LSC 740 y, debido a esto, la descripción de las técnicas de corrección de sombreado de lente antes proporcionada no se repetirá aquí. No obstante, para resumir generalmente, se debiera entender que la lógica LSC 936 puede procesar cada componente de color de la corriente de datos de píxel en bruto independientemente para determinar una ganancia a aplicar al píxel actual. De acuerdo con las modalidades antes analizadas, la ganancia de corrección de sombreado de_ lente puede ser determinada con base en un conjunto definido de puntos de rejilla de ganancia distribuidos a través del cuadro de generación de imagen, en donde el intervalo entre cada punto de rejilla es definido por un número de píxeles (por ejemplo, 8 píxeles, 16 píxeles, etcétera) . Si la ubicación del píxel actual corresponde a un punto de rejilla, entonces el valor de ganancia asociado con ese punto de rejilla se aplica al píxel actual. Sin embargo, si la ubicación del píxel actual está entre puntos de rejilla (por ejemplo, G0, Gl, G2 y G3 de la figura 74), entonces el valor de ganancia LSC se puede calcular mediante la interpolación de los puntos de rejilla entre los cuales está ubicado el píxel actual (Ecuaciones 13a y 13b) . Este proceso se muestra a través del proceso 772 de la figura 75. Además, tal como se mencionó anteriormente con respecto a la figura 73, en algunas modalidades, los puntos de rejilla pueden estar distribuidos de manera uniforme (por ejemplo, logarítmicamente), de manera que los puntos de rejilla están menos concentrados en el centro de la región LSC 760, pero más concentrados hacia las esquinas de la región LSC 760, típicamente en donde la distorsión del sombreado de lente es más notable.
Adicionalmente , tal como se mencionó antes con referencia a las figuras 78 y 79, la lógica LSC 936 también puede aplicar un componente de ganancia radial con los valores de ganancia de rejilla. El componente de ganancia radial puede ser determinado con base en la distancia del píxel actual desde el centro de la imagen (Ecuaciones 14-16) . Tal como se mencionó, el uso de una ganancia radial permite el uso de una sola rejilla de ganancia común para todos los componentes de color, lo cual puede reducir en gran medida el espacio de almacenamiento total requerido para almacenar rejillas de ganancias separadas para cada componente de color. Esta reducción en los datos de ganancia de rejilla puede disminuir los costos de implementación, ya que las tablas de datos de ganancia de rejilla se pueden considerar para una porción significativa de la memoria o área de chip en el hardware de procesamiento de imágenes.
A continuación, haciendo referencia nuevamente al diagrama en bloques de lógica de procesamiento en bruto 900 de la figura 99, la salida de la lógica LSC 936 entonces es pasada a un segundo bloque de ganancia, desplazamiento y recorte (GOC) 938. La lógica GOC 938 puede ser aplicada antes de la interpolación cromática (por el bloque lógico 940) y se puede utilizar para ejecutar balance automático de blancos en la salida de la lógica LSC 936. En la modalidad mostrada, la lógica GOC 938 puede ser implementada en la misma manera que la lógica GOC 930 (y la lógica BLC 739) . Por lo tanto, de acuerdo con la Ecuación 11 anterior, la entrada recibida por la lógica GOC 938 primero es desplazada por un valor con signo y después multiplicada por una ganancia. El valor resultante entonces es recortado a un rango mínimo y máximo de acuerdo con la Ecuación 12.
Posteriormente, la salida de la lógica GOC 938 es reenviada a la lógica de interpolación cromática 940 para procesamiento a fin de producir una imagen a pleno color (RGB) con base en los datos de entrada Bayer en bruto. Tal como se apreciará, la salida en bruto de un sensor de imagen utilizando un arreglo de filtro de color, tal como un filtro Bayer es "incompleta" en el sentido de que cada píxel es filtrado para adquirir solamente un componente de un solo color. Por lo tanto, los datos recopilados para un píxel individual son insuficientes para determinar el color. Por consiguiente, se pueden utilizar las técnicas de interpolación cromática a fin de generar una imagen a pleno color a partir de los datos Bayer en bruto mediante la interpolación de los datos de color faltantes para cada píxel.
Haciendo referencia ahora a la figura 107, se ilustra un flujo de proceso gráfico 692 que proporciona una perspectiva general respecto a cómo la acción de interpolación cromática se puede aplicar a un patrón de imagen Bayer en bruto 1034 para producir una imagen a pleno color RGB. Tal como se muestra, una porción 4x4 1036 de la imagen Bayer en bruto 1034 puede incluir canales separados para cada componente de color, incluyendo un canal verde 1038, un canal rojo 1040 y un canal azul 1042. Debido a que cada píxel de generación de imagen en el sensor Bayer solamente adquiere datos de un color, los datos del color para cada canal de color 1038, 1040 y 1042 pueden estar incompletos, tal como lo indican los símbolos "?" . Al aplicar la técnica de interpolación cromática 1044, se pueden interpolar las muestras de color faltantes de cada canal . Por ejemplo, tal como se muestra mediante el número de referencia 1046, los datos interpolados G' pueden ser utilizados para llenar las muestras faltantes en el canal de color verde. De manera similar, los datos interpolados R' se pueden utilizar (en combinación con los datos interpolados G' 1046) para llenar las muestras faltantes en el canal de color rojo 1048, y los datos interpolados B' se pueden utilizar (en combinación con los datos interpolados G' 1046) para llenar las muestras faltantes en el canal de color azul 1050. Por lo tanto, como un resultado del proceso de interpolación cromática, cada canal de color (R, G, B) tendrá un conjunto completo de datos de color, el cual entonces puede ser utilizado para reconstruir una imagen RGB a pleno color 1052.
De acuerdo con una modalidad, ahora se describirá una técnica de interpolación cromática que puede ser implementada por la lógica de interpolación cromática 940. En el canal de color verde, las muestras de color faltantes pueden ser interpoladas utilizando un filtro direccional de paso bajo en muestras verdes conocidas y un filtro de paso alto (o gradiente) en los canales de color adyacentes (por ejemplo, rojo y azul) . Para los canales de color rojo y azul, las muestras de color faltantes pueden ser interpoladas en una manera similar, pero utilizando filtración de paso bajo en los valores rojo o azul conocidos y filtración de paso alto en los valores verdes interpolados colocados. Además, en una modalidad, la interpolación cromática en el canal de color verde puede utilizar un filtro de borde adaptable de bloque de píxel 5x5 con base en los datos de color Bayer originales. Tal como se analizará con mayor detalle a continuación, el uso de un filtro de borde adaptable puede permitir la ponderación continua con base en los gradientes de los valores filtrados horizontales y verticales, lo cual reduce la apariencia de algunos artefactos, tales como los artefactos de dentado, "tablero", o "arco iris", comúnmente vistos en técnicas convencionales de interpolación cromática.
Durante la interpolación cromática en el canal verde, se utilizan los valores originales para los píxeles verdes (pixeles Gr y Gb) del patrón de imagen Bayer. Sin embargo, a fin de obtener un conjunto completo de datos para el canal verde, valores de pixel verde pueden ser interpolados en los pixeles rojos y azules del patrón de imagen Bayer. De acuerdo con la presente técnica, componentes de energía horizontales y verticales, respectivamente referidos como Eh y Ev, primero son calculados en los pixeles rojos y azules con base en el bloque de pixeles 5x5 antes mencionado. Los valores de Eh y Ev pueden ser utilizados para obtener un valor filtrado de orden ponderado a partir de los pasos de filtración horizontal y vertical, tal como se analiza adicionalmente a continuación.
A manera de ejemplo, la figura 108 ilustra el cálculo de los valores Eh y Ev para un pixel rojo centrado en el bloque de pixel 5x5 en la ubicación (j,i), en donde j corresponde a una fila e i corresponde a una columna. Tal como se muestra, el cálculo de Eh considera las tres filas medias (j-1, j, j+D del bloque de pixel 5x5, y el cálculo de Ev considera las tres columnas medias (i-1, i, i+1) del bloque de pixel 5x5. Para calcular Eh, el valor absoluto de la suma de cada uno de los pixeles en las columnas rojas (i-2, i, i+2) multiplicada por un coeficiente correspondiente (por ejemplo, -1 para las columnas i -2 e i+2; 2 para la columna i) es sumado con el valor absoluto de la suma de cada de los píxeles en las columnas azules (i-1, i+1) multiplicado por un coeficiente correspondiente (por ejemplo, 1 para la columna i-1; -1 para la columna i+1) . Para calcular Ev, el valor absoluto de la suma de cada uno de los píxeles en las filas rojas (j-2, j, j+2) multiplicado por un coeficiente correspondiente (por ejemplo, -1 para las filas j-2 y j+2; 2 para la fila j) es sumado con el valor absoluto de la suma de cada uno de los píxeles en las filas azules (j-1/ j +1) multiplicado por un coeficiente correspondiente (por ejemplo, 1 para la fila j-1; -1 para la fila j+1) . Estos cálculos se ilustran en las ecuaciones 76 y 77 a continuación: Eh = abs[2((P(j-l, i) + P(j, i) + P(j+1, i)) - (76) (P(j-1, i-2) + P(j, i-2) + P(j+1, i-2)) - (P(j-1, i+2) + P(j, i+2) + P(j+1, i+2)] + abs[(P(j-l, i-1) + P(j, i-1) + P(j+1, i-1)) - (P(j-1, i+1) + P(j, i+1) + P(j+1, i+1)] Ev = abs[2(P(j, i-1) + P(j, i) + P(j, i+1)) - (77) (P(j-2, i-1) + P(j-2, i) + P(j-2, i+1)) - (P(j+2, i-1) + P(j+2, i) + P(j+2, i+1] + abs[(P(j-l, i-1) + P(j-1, i) + P(j-1, i+D) - (P(j+1, i-1) + P(j+1, i) + P(j+1, i+1)] Por lo tanto, la suma de energía total se puede expresar como: Eh+Ev. Además, aunque el ejemplo mostrado en la figura 108 ilustra el cálculo de Eh y Ev para un píxel central rojo en (j,i), se debiera entender que los valores Eh y Ev pueden ser determinados en una manera similar para pixeles centrales azules .
A continuación, se puede aplicar filtración horizontal y vertical al patrón Bayer para obtener los valores filtrados verticales y horizontales Gh y Gv, los cuales pueden representar valores verdes interpolados en las direcciones horizontal y vertical, respectivamente. Los valores filtrados Gh y Gv pueden ser determinados utilizando un filtro de paso bajo en muestras verdes vecinas conocidas además de utilizar gradientes direccionales del color adyacente (R o B) para obtener una señal de alta frecuencia en las ubicaciones de las muestras verdes faltantes. Por ejemplo, con referencia a la figura 109, ahora se ilustrará un ejemplo de la interpolación horizontal para determinar Gh.
Tal como se muestra en la figura 109, cinco pixeles horizontales (R0, Gl, R2, G3 y R4) de una línea roja 1060 de la imagen Bayer, en donde se asume que R2 es el píxel central en (j, i), pueden ser considerados al determinar Gh. Los coeficientes de filtración asociados con cada uno de estos cinco pixeles son indicados por el número de referencia 1062.
Por consiguiente, la interpolación de un valor verde, referido como G2', para el píxel central R2 , se puede determinar de la siguiente forma: Entonces se pueden utilizar diversas operaciones matemáticas para producir la expresión para G2 ' mostradas en las ecuaciones 79 y 80 a continuación: n 2G1+ 2G3 4R2-R0-R2-R2-R4 2CA + 2G3 + 2R2-RQ-R4 G2' = (80) De esta manera, con referencia a la figura 109 y las Ecuaciones 78-80 anteriores, la expresión general para la interpolación horizontal para el valor verde en (j,i) se puede derivar como: Gh = (2P{j,i-\) + 2P(j,i+\) + 2P{j,i)-P(j,i-2)-P{j,i + 2)) El componente de filtración vertical Gv se puede determinar en una manera similar que Gh. Por ejemplo, haciendo referencia a la figura 110, al determinar Gv se pueden considerar cinco píxeles verticales (R0, Gl, R2 , G3 y R4) de una columna de rojo 1064 de la imagen Bayer y sus respectivos coeficientes de filtración 1068, en donde se asume que R2 es el píxel central en (j,i) . Al utilizar la filtración de paso bajo en las muestras de verde conocidas y la filtración de paso alto en el canal de rojo en la dirección vertical, se deriva la siguiente expresión para Gv: (2P(j - 1, Q + 2P(j + 1,Q + 2P(j,i) -P(j- 2, i) -P(j + 2, i)) Gv = (82) 4 Aunque los ejemplos aquí analizados han mostrado la interpolación de valores de verde en un píxel rojo, se debiera entender que las expresiones establecidas en las Ecuaciones 81 y 82 también se pueden utilizar en la interpolación horizontal y vertical de los valores de verde para los píxeles azules.
El valor de verde interpolado final G' para píxel central (j,i) se puede determinar ponderando las salidas de filtro horizontales y verticales (Gh y Gv) mediante los componentes de energía (Eh y Ev) analizados anteriormente para producir la siguiente ecuación: Tal como se analizó anteriormente, los componentes de energía Eh y Ev pueden permitir la ponderación de borde adaptable de las salidas de filtro horizontales y verticales Gh y Gv, lo cual puede ayudar a reducir los artefactos de imagen, tales como los artefactos de arco iris, dentado, o tablero, en la imagen RGB reconstruida. Adicionalmente , la lógica de interpolación cromática 940 puede proporcionar una opción para desviar la característica de ponderación de borde adaptable estableciendo los valores Eh y Ev a 1 , de manera que Gh y Gv son ponderados de igual manera .
En una modalidad, los coeficientes de ponderación horizontales y verticales, mostrados en la Ecuación 51 anterior, pueden ser cuantificados para reducir la precisión de los coeficientes de ponderación a un conjunto de valores "ásperos" . Por ejemplo, en una modalidad, los coeficientes de ponderación pueden ser cuantificados a ocho posibles relaciones de peso: 1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8 y 8/8. Otras modalidades pueden cuantificar los coeficientes de ponderación en 16 valores (por ejemplo, 1/16 a 16/16) , 32 valores (1/32 a 32/32), y así sucesivamente. Tal como se puede apreciar, cuando se compara con valores de precisión plena (por ejemplo, valores de punto de flotación de 32 bits) , la cuantificación de los coeficientes de peso puede reducir la complejidad de la implementación cuando se determinan y aplican los coeficientes de ponderación a las salidas de filtro horizontales y verticales.
En modalidades adicionales, las técnicas aquí divulgadas, además de determinar y utilizar componentes de energía horizontales y verticales para aplicar coeficientes de ponderación a los valores filtrados horizontales (Gh) y verticales (Gv) , también pueden determinar y utilizar componentes de energía en las direcciones positiva diagonal y negativa diagonal. Por ejemplo, en dichas modalidades, la filtración también se puede aplicar en las direcciones positiva diagonal y negativa diagonal. La ponderación de las salidas de filtro puede incluir seleccionar los dos componentes de energía más elevados, y utilizar los componentes de energía seleccionados para ponderar sus salidas de filtro respectivas. Por ejemplo, asumiendo que los dos componentes de energía más elevados corresponden a las direcciones diagonal -positiva y vertical, los componentes de energía diagonal-positiva y vertical son utilizados para ponderar las salidas de filtro diagonal-positiva y vertical para determinar el valor de verde interpolado (por ejemplo, en una ubicación de píxel rojo o azul en el patrón Bayer) .
A continuación, la interpolación cromática en los canales de color rojo y azul se puede ejecutar interpolando valores de rojo y azul en los píxeles verdes del patrón de imagen Bayer, interpolando valores de rojo en los píxeles azules del patrón de imagen Bayer, e interpolando valores de azul en los píxeles rojos del patrón de imagen Bayer. De acuerdo con las presentes técnicas analizadas, los valores de píxel rojo y azul faltantes pueden ser interpolados utilizando filtración de paso bajo con base en los píxeles rojos y azules vecinos conocidos y filtrando en paso alto con base en los valores de píxel verde colocados, los cuales pueden ser valores originales o interpolados (a partir del proceso de interpolación cromática del canal verde antes analizado) dependiendo de la ubicación del píxel actual. Por lo tanto, con respecto a dichas modalidades, se debiera entender que la interpolación de valores de verde faltantes puede ser ejecutada primero, de manera que un conjunto completo de valores de verde (tanto valores originales como interpolados) queda disponible cuando se interpolan las muestras faltantes de rojo y azul.
La interpolación de los valores de píxel rojo y azul se puede describir con referencia a la figura 111, la cual ilustra diversos bloques 3x3 del patrón de imagen Bayer al cual se puede aplicar la interpolación cromática rojo y azul, así como los valores de verde interpolados (designados por G' ) que pudieran haber sido obtenidos durante la interpolación cromática en el canal de verde. Haciendo referencia primero al bloque 1070, el valor de rojo interpolado, R'ii# para el píxel Gr (GX1) se puede determinar de la siguiente forma: donde G'10 y G'i2 representan valores de verde interpolados, tal como se muestra mediante el número de referencia 1078. De manera similar, el valor de azul interpolado, B'n para el píxel Gr (Gn) se puede determinar de la siguiente forma: en donde G'0i y G'2i representan valores de verde interpolados (1078) .
A continuación, haciendo referencia al bloque de píxel 1072, en el cual el píxel central es un píxel GB (Gn) , el valor de rojo interpolado, R'n, y el valor de azul B'n, se pueden determinar como se muestra en las ecuaciones 86 y 87 a continuación: R< _{Ro\+R2\) , i2Gu ~G'oi~G'2i) ( 86) ^g7^ Además, haciendo referencia al bloque de píxel 1074, la interpolación de un valor de rojo en un píxel azul, B1X, se puede determinar de la siguiente forma: en donde G'0o; G'02» G'n, G'2o y G' 22 representan valores de verde interpolados, tal como se muestra mediante el número de referencia 1080. Finalmente, la interpolación de un valor de azul en un píxel rojo, tal como lo muestra el bloque de píxel 1076, se puede calcular de la siguiente forma: Aunque la modalidad antes analizada se basó en las diferencias de color (por ejemplo, gradientes) para determinar los valores interpolados de rojo y azul, se puede proporcionar otra modalidad para valores de rojo y azul interpolados utilizando las relaciones de color. Por ejemplo, los valores de verde interpolados (bloques 1078 y 1080) se pueden utilizar para obtener una relación de color en las ubicaciones de píxel rojo y azul del patrón de imagen Bayer, y la interpolación lineal de las proporciones se puede utilizar para determinar una proporción de color interpolada para la muestra de color faltante. El valor de verde, el cual puede ser un valor interpolado o un valor original, se puede multiplicar por la proporción de color interpolada para obtener un valor de color interpolado final. Por ejemplo, la interpolación de los valores de píxel rojo y azul utilizando las proporciones de color se puede ejecutar de acuerdo con las siguientes fórmulas, en donde las ecuaciones 90 y 91 muestran la interpolación de los valores rojo y azul para un píxel Gr, las ecuaciones 92 y 93 muestran la interpolación de los valores rojo y azul para un píxel Gb, la ecuación 94 muestra la interpolación de un valor de rojo en un píxel azul, y la ecuación 95 muestra la interpolación de un valor de azul en un píxel rojo: interpolado cuando Gn es un píxel Gr) interpolado cuando Gn es un píxel Gr) (R'n interpolado cuando Gn es un píxel Gb) (93) (B' ii interpolado cuando Gn es un píxel Gb) (R'n interpolado en un píxel azul Bu) (?' ?? interpolado en un píxel rojo R ) Una vez que las muestras de color faltantes han sido interpoladas para cada píxel de imagen a partir del patrón de imagen Bayer, se puede combinar una muestra completa de valores de color para cada uno de los canales de color rojo, azul y verde (por ejemplo, 1046, 1048 y 1050 de la figura 107) para producir una imagen a pleno color RGB. Por ejemplo, haciendo referencia nuevamente a las figuras 98 y 99, la salida 910 de la lógica de procesamiento de píxel en bruto 900 puede ser una señal de imagen RGB en formatos de 8, 10, 12 o 14 bits.
Haciendo referencia ahora a las figuras 112-115, se ilustran diversos gráficos de flujo que muestran procesos para interpolación cromática de un patrón de imagen Bayer en bruto de acuerdo con modalidades divulgadas. Específicamente, el proceso 1082 de la figura 112 muestra la determinación de cuáles componentes de color van a ser interpolados para un píxel de entrada determinado P. Con base en la determinación mediante el proceso 1082, se puede ejecutar uno o más del proceso 1100 (figura 113) para interpolar un valor de verde, el proceso 1112 (figura 114) para interpolar un valor de rojo, o el proceso 1124 (figura 115) para interpolar un valor de azul (por ejemplo, mediante la lógica para interpolación cromática 940) .
Comenzando con la figura 112, el proceso 1082 comienza en el paso 1084 cuando se recibe un píxel de entrada P. La lógica de decisión 1086 determina el color del píxel de entrada. Por ejemplo, esto puede depender de la ubicación del píxel dentro del patrón de imagen Bayer. Por consiguiente, si P es identificado como siendo un píxel verde (por ejemplo, Gr o Gb) , el proceso 1082 procede al paso 1088 para obtener valores interpolados de rojo y azul para P. Esto puede incluir, por ejemplo, continuar con los procesos 1112 y 1124 de las figuras 114 y 115, respectivamente. Si P es identificado como siendo un píxel rojo, entonces el proceso 1082 avanza al paso 1090 para obtener valores interpolados de verde y azul para P. Esto puede incluir ejecutar adicionalmente los procesos 1100 y 1124 de las figuras 113 y 115, respectivamente. Adicionalmente, si P es identificado como siendo un píxel azul, entonces el proceso 1082 avanza al paso 1092 para obtener valores interpolados de verde y rojo para P. Esto puede incluir ejecutar adicionalmente los procesos 1100 y 1112 de las figuras 113 y 114, respectivamente. Cada uno de los procesos 1100, 1112 y 1124 se describen con mayor detalle a continuación.
El proceso 1100 para determinar un valor de verde interpolado para el píxel de entrada P se ilustra en la figura 113 e incluye los pasos 1102-1110. En el paso 1102, el píxel de entrada P es recibido (por ejemplo, desde el proceso 1082) . A continuación, en el paso 1104, se identifica un conjunto de píxeles vecinos que forman un bloque de píxel 5x5, con P siendo el centro del bloque 5x5. Posteriormente, el bloque de píxel es analizado para determinar los componentes de energía horizontales y verticales en el paso 1106. Por ejemplo, los componentes de energía horizontales y verticales pueden ser determinados de acuerdo con las ecuaciones 76 y 77 para calcular Eh y Ev, respectivamente. Tal como se analizó, los componentes de energía Eh y Ev pueden ser utilizados como coeficientes de ponderación para proporcionar filtración de borde adaptable y, por lo tanto, reducir la apariencia de algunos artefactos de interpolación cromática en la imagen final. En el paso 1108, la filtración de paso bajo y filtración de paso alto, tal como es aplicada en las direcciones horizontales y verticales para determinar las salidas de filtración horizontales y verticales. Por ejemplo, las salidas de filtración horizontales y verticales, Gh y Gv, pueden ser calculadas de acuerdo con las ecuaciones 81 y 82. A continuación, el proceso 1082 continúa al paso 1110, en el cual el valor de verde interpolado G' es interpolado con base en los valores de Gh y Gv ponderados con los componentes de energía Eh y Ev, tal como se muestra en la Ecuación 83.
A continuación, con respecto al proceso 1112 de la figura 114, la interpolación de los valores de rojo puede comenzar en el paso 1114, en el cual se recibe el píxel de entrada P (por ejemplo, desde el proceso 1082) . En el paso 1116, se identifica un conjunto de pixeles vecinos que forman un bloque de píxel 3x3, con P siendo el centro del bloque 3x3. Posteriormente, se aplica filtración de paso bajo en los pixeles rojos vecinos dentro del bloque 3x3 en el paso 1118, y se aplica filtración de paso alto (paso 1120) en los valores vecinos verdes colocados, los cuales pueden ser valores de verde originales capturados por el sensor de imagen Bayer, o valores interpolados (por ejemplo, determinados a través del proceso 1100 de la figura 113) . El valor de rojo interpolado R' para P se puede determinar con base en las salidas de filtración de paso bajo y paso alto, tal como se muestra en el paso 1122. Dependiendo del color de P, R' puede ser determinado de acuerdo con una de las ecuaciones 84, 86 u 88.
Con respecto a la interpolación de los valores de azul, se puede aplicar el proceso 1124 de la figura 115. Los pasos 1126 y 1128 generalmente son idénticos a los pasos 1114 y 1116 del proceso 1112 (figura 114) . En el paso 1130, se aplica filtración de paso alto en los valores vecinos de verde colocados, los cuales pueden ser valores de verde originales capturados por el sensor de imagen Bayer, o valores interpolados (por ejemplo, determinados a través del proceso 1100 de la figura 113) . El valor de azul interpolado B' para P se puede determinar con base en las salidas de filtración de paso bajo y paso alto, tal como se muestra en el paso 1134. Dependiendo del color de P, B' se puede determinar de acuerdo con una de las Ecuaciones 85, 87 u 89. Además, tal como se mencionó anteriormente, la interpolación de los valores rojo y azul se puede determinar utilizando diferencias de color (Ecuaciones 84-89) o proporciones de color (Ecuaciones 90-95) . Una vez más, se debiera entender que primero se puede ejecutar la interpolación de valores de verde faltantes, de manera que un conjunto completo de valores de verde (tanto valores originales como interpolados) queda disponible cuando se interpolan las muestras de rojo y azul faltantes . Por ejemplo, el proceso 1100 de la figura 113 se puede aplicar para interpolar todas las muestras de color verde faltantes antes de ejecutar los procesos 1112 y 1124 de las figuras 114 y 115 respectivamente.
Haciendo referencia a las figuras 116-119, se proporcionan ejemplos de dibujos a color de imágenes procesadas mediante la lógica de procesamiento de píxel en bruto 900 en la secuencia ISP 82. La figura 116 muestra una escena de imagen original 1140, la cual puede ser capturada por el sensor de imagen 90 del dispositivo de generación de imagen 30. La figura 117 muestra una imagen Bayer en bruto 1142 que puede representar los datos de píxel en bruto capturados por el sensor de imagen 90. Tal como se mencionó anteriormente, técnicas convencionales de interpolación cromática pueden no permitir la filtración adaptable con base en la detección de bordes (por ejemplo, límites entre áreas de dos o más colores) en los datos de la imagen, lo cual puede producir, de manera indeseable, artefactos en la imagen RGB a pleno color reconstruida resultante. Por ejemplo, la figura 118 muestra una imagen RGB 1144 reconstruida utilizando técnicas convencionales de interpolación cromática, y puede incluir artefactos, tales como artefactos de "tablero" 1146 en el borde 1148. Sin embargo, comparando la imagen 1144 con la imagen RGB 1150 de la figura 119, la cual puede ser un ejemplo de una imagen reconstruida utilizando las técnicas de interpolación cromática antes descritas, se puede observar que los artefactos de tablero 1146 presentes en la figura 118 no están presentes, o al menos su apariencia es sustancialmente reducida en el borde 1148. Por lo tanto, las imágenes mostradas en las figuras 116-119 están destinadas a ilustrar al menos una ventaja que las técnicas de interpolación cromática aquí divulgadas tienen sobre los métodos convencionales.
De acuerdo con cierto aspecto de las técnicas de procesamiento de imagen aquí divulgadas, los diversos bloques lógicos de procesamiento del subsistema ISP 32 pueden ser implementados utilizando un conjunto de memorias intermedias de línea, las cuales se pueden configurar para pasar los datos de imagen a través de los diversos bloques, tal como se mostró antes. Por ejemplo, en una modalidad, la lógica de procesamiento de pixeles en bruto 900 antes analizada en la figura 99 se puede implementar utilizando una configuración de memorias intermedias de línea acomodadas tal como se muestra en las figuras 120-123. Particularmente, la figura 120 muestra todo el arreglo de memoria intermedia de línea que se puede utilizar para implementar la lógica de procesamiento de pixeles en bruto 900, mientras que la figura 121 muestra una vista más cercana de un primer subconjunto de las memorias intermedias de línea, tal como se muestra dentro de la región encerrada 1162 de la figura 120, la figura 122 muestra una vista más cercana de un filtro vertical que puede ser parte de la lógica de reducción de ruido 934, y la figura 123 muestra una vista más cercana de un segundo subconjunto de las memorias intermedias de línea, tal como se muestra dentro de la región encerrada 1164 de la figura 120.
Tal como se ilustra generalmente en la figura 120, la lógica de procesamiento de píxeles en bruto 900 puede incluir un conjunto de diez memorias intermedias de línea numeradas 0-9 y etiquetadas como los números de referencia 1160a-1160j, respectivamente, así como la fila de lógica 1160k, la cual incluye la entrada de datos de imagen 908 (la cual puede ser desde el sensor de imagen o desde la memoria) a la lógica de procesamiento en bruto 900. Por lo tanto, la lógica que se muestra en la figura 120 puede incluir 11 filas, de las cuales 10 de las filas incluyen memorias intermedias de línea (1160a-1160j ) . Tal como se analiza a continuación, las memorias intermedias de línea pueden ser utilizadas en una manera compartida por las unidades lógicas de la lógica de procesamiento de píxeles en bruto 900, incluyendo los bloques lógicos de ganancia, desplazamiento, recorte 930 y 938 (referidos como GOC1 y GOC2 , respectivamente, en la figura 120) , la lógica de detección y corrección de píxeles defectuosos (DPC) 932, la lógica de reducción de ruido 934 (que se muestra en la figura 120 como incluyendo la lógica de corrección de no uniformidad de verde (GNU) 934a, un filtro horizontal de 7 derivaciones 934b, y un filtro vertical de 5 derivaciones 934c) , la lógica de corrección de sombreado de lente (LSC) 936, y la lógica de interpolación cromática (DEM) 940. Por ejemplo, en la modalidad mostrada en la figura 120, el subconjunto inferior de memorias intermedias de línea representadas por las líneas intermedias de línea 6-9 (1160g-1160j ) puede ser compartido entre la lógica DPC 932 y porciones de la lógica de reducción de ruido 934 (incluyendo la lógica GNU 934a, el filtro horizontal 934b, y parte del filtro vertical 934c) . El subconjunto superior de las memorias intermedias de línea representadas por las memorias intermedias de línea 0-5 (1160a-1160f) puede ser compartido entre una porción de la lógica de filtración vertical 934c, la lógica de corrección de sombreado de lente 936, la lógica de ganancia, desplazamiento y recorte 938, y la lógica de interpolación cromática 940.
Para describir de manera general el movimiento de los datos de imagen a través de las memorias intermedias de línea, los datos de imagen en bruto 908, los cuales pueden representar la salida de la lógica de procesamiento de etapa inicial ISP 80, primero son recibidos y procesados por la lógica G0C1 930, donde se aplican parámetros apropiados de ganancias, desplazamiento y recorte. La salida de la lógica G0C1 930 entonces es proporcionada a la lógica DPC 932. Tal como se muestra, el procesamiento de detección y corrección de píxeles defectuosos puede ocurrir sobre memorias intermedias de línea 6-9. Una primera salida de la lógica DPC 932 es proporcionada a la lógica de corrección de no uniformidad de verde 934a (de la lógica de reducción de ruido 934) , lo cual ocurre en la memoria intermedia de línea 9 (1160j) . Por lo tanto, la memoria intermedia de línea 9 (1160j), en la presente modalidad, es compartida entre la lógica DPC 932 y la lógica de corrección GNU 934a.
A continuación, la salida de la memoria intermedia de línea 9 (1160j), referida en la figura 121 como 8 , es proporcionada a la entrada de la memoria intermedia de línea 8 (1160i) . Tal como se muestra, la memoria intermedia de línea 8 es compartida entre la lógica DPC 932, la cual proporciona procesamiento adicional de detección y corrección de píxeles defectuosos, y la lógica de filtración horizontal (934b) del bloque de reducción de ruido 934. Tal como se muestra en la presente modalidad, el filtro horizontal 934b puede ser un filtro de 7 derivaciones, tal como lo indican las derivaciones de filtro 1165a-1165g en la figura 121, y se puede configurar como un filtro de respuesta de impulso finito (FIR) . Tal como se analizó anteriormente, en algunas modalidades, la filtración de ruido puede ser adaptable al borde. Por ejemplo, el filtro horizontal puede ser un filtro FIR, pero en las situaciones donde las derivaciones de filtro son utilizadas únicamente si la diferencia entre el píxel central y el píxel en la derivación es más pequeña entonces un umbral que depende al menos parcialmente de la varianza del ruido.
La salida 1163 (figura 121) de la lógica de filtración horizontal 934b puede ser proporcionada a la lógica de filtración vertical 934c (que se ilustra con mayor detalle en la figura 122) y a la entrada de la memoria intermedia de línea 7 (1160h) . En la modalidad ilustrada, la memoria intermedia de línea 7 está configurada para permitir un retardo (w) antes de pasar su entrada W7 a la memoria intermedia de línea 6 (1160g) como la entrada W6. Tal como se muestra en la figura 121, la memoria intermedia de línea 6 es compartida entre la lógica DPC 932 y el filtro vertical de reducción de ruido 934c.
A continuación, haciendo referencia de manera concurrente a las figuras 120, 122 y 123, el subconjunto superior de las memorias intermedias de línea, concretamente las memorias intermedias de línea 0-5 (1160a-1160f) son compartidas entre el filtro vertical de reducción de ruido 934c (que se muestra en la figura 122), la lógica de corrección de sombreado de lente 946, la lógica G0C2 938, y la lógica de interpolación cromática 940. Por ejemplo, la salida de la memoria intermedia de línea 5 (1160f) , la cual proporciona un retardo (w) , es alimentada a la memoria intermedia de línea 4 (1160e) . La filtración vertical se realiza en la memoria intermedia de línea 4, y la salida 3 de la porción del filtro vertical 934c en la memoria intermedia de línea 4 es alimentada a la memoria intermedia de línea 3 (1160d) , así como corriente abajo a las porciones de la lógica de corrección de sombreado de lente 936, la lógica G0C2 938, y la lógica de interpolación cromática 940 compartidas por la memoria intermedia de línea 4. En la presente modalidad, la lógica de filtración vertical 934c puede incluir cinco derivaciones 1166a-1166e (figura 122) , pero se puede configurar para operar en modos parcialmente recursivos (respuesta de impulso infinito (IIR)) y no recursivo (FIR) . Por ejemplo, cuando se utilizan las cinco derivaciones de manera que la derivación 1166c es la derivación central, la lógica de filtración vertical 934c opera en un modo parcialmente recursivo IIR. La presente modalidad también puede elegir utilizar tres de las cinco derivaciones, concretamente las derivaciones 1166c- 1166e, con la derivación 1166d siendo una derivación central, para operar la lógica de filtración vertical 934c en un modo no recursivo (FIR) . El modo de filtración vertical, en una modalidad, puede ser especificado utilizando un registro de configuración asociado con la lógica de reducción de ruido 934.
A continuación, la memoria intermedia de línea 3 recibe la señal de entrada W3 y proporciona un retardo ( ) antes de emitir W2 a la memoria intermedia de línea 2 (1160c), así como corriente abajo a las porciones de la lógica de corrección de sombreado de lente 936, la lógica GOC2 938, y la lógica de interpolación cromática 940 compartidas por la memoria intermedia de línea 3. Tal como se muestra, la memoria intermedia de línea 2 también es compartida entre el filtro vertical 934c, la lógica de corrección de sombreado de lente 936, la lógica GOC2 938, y la lógica de interpolación cromática 940, y proporciona la salida Wl a la memoria intermedia de línea 1 (1160b) . De manera similar, la memoria intermedia de línea 1 también es compartida entre el filtro vertical 934c, la lógica de corrección de sombreado de lente 936, la lógica GOC2 938, y la lógica de interpolación cromática 940, y proporciona la salida Wl a la memoria intermedia de línea 0 (1160a) . La salida 910 de la lógica de interpolación cromática 940 puede ser proporcionada corriente abajo a la lógica de procesamiento RGB 902 para procesamiento adicional, tal como se analizará con mayor detalle a continuación.
Se debiera entender que la modalidad ilustrada que muestra el arreglo de las memorias intermedias de línea en una manera compartida, dichas unidades de procesamiento diferentes pueden utilizar las memorias intermedias de línea compartidas de manera concurrente y pueden reducir significativamente el número de memorias intermedias de línea necesarias para implementar la lógica de procesamiento en bruto 900. Tal como se puede apreciar, esto puede reducir el área del estado real del hardware requerida para implementar la circuitería de procesamiento de imagen 32, y por lo tanto puede reducir los costos de diseño y fabricación generales. A manera de ejemplo, la técnica aquí ilustrada para compartir memorias intermedias de línea entre diferentes componentes de procesamiento puede, en algunas modalidades, reducir el número de memorias intermedias de línea necesarias cuando se compara con una modalidad convencional que no comparte memorias intermedias de línea por tanto como un 40 a 50 por ciento o más. Además, aunque la modalidad aquí ilustrada de la lógica de procesamiento de píxeles en bruto 900 que se muestra en la figura 120 utiliza 10 memorias intermedias de línea, se debiera apreciar que se puede utilizar una cantidad menor o mayor de memorias intermedias de línea en otras modalidades. Es decir, la modalidad mostrada en la figura 120 simplemente pretende ilustrar el concepto a través del cual las memorias intermedias de línea son compartidas a través de múltiples unidades de procesamiento, y no debieran ser interpretadas como una limitación de la presente técnica a únicamente la lógica de procesamiento de píxeles en bruto 900. De hecho, los aspectos de la divulgación mostrados en la figura 120 pueden ser implementados en cualquiera de los bloques lógicos del subsistema ISP 32.
La figura 124 es un gráfico de flujo que muestra un método 1167 para procesar datos de píxeles en bruto de acuerdo con la configuración de memoria intermedia de línea que se muestra en las figuras 120-123. Comenzando en el paso 1168, las memorias intermedias de línea de la lógica de procesamiento de píxeles en bruto 900 pueden recibir datos de píxel en bruto (por ejemplo, desde la etapa inicial ISP 80, la memoria 108, o ambas) . En el paso 1169, se aplica un primer conjunto de parámetros de ganancia, desplazamiento y recorte (G0C1) a los datos de píxel en bruto. A continuación, en el paso 1170, se realiza la detección y corrección de píxeles defectuosos utilizando un primer subconjunto de memorias intermedias de línea (por ejemplo, memorias intermedias de línea 6-9 en la figura 120) . Posteriormente, en el paso 1171, se aplica una corrección de no uniformidad de verde (GNU) utilizando al menos una memoria intermedia de línea (por ejemplo, memoria intermedia de línea 9) a partir del primer subconjunto de memorias intermedias de línea. A continuación, tal como se muestra en el paso 1172, se aplica filtración horizontal para reducción de ruido, también utilizando al menos una memoria intermedia de línea del primer subconjunto. En la modalidad mostrada en la figura 120, las memorias intermedias de línea del primer subconjunto que son utilizadas para ejecutar la corrección GNU y la filtración horizontal pueden ser diferentes.
El método 1167 entonces continua con el paso 1173, en el cual se aplica filtración vertical para reducción de ruido utilizando al menos una memoria intermedia de línea a del primer subconjunto, así como al menos una porción de un segundo subconjunto de las memorias intermedias de línea (por ejemplo, memorias intermedias de línea 0-5) de la lógica de procesamiento de píxeles en bruto 900. Por ejemplo, tal como se analizó antes, dependiendo del modo de filtración vertical (por ejemplo, recursivo o no recursivo) , se puede utilizar ya sea una porción o todo el segundo subconjunto de memorias intermedias de línea. Además, en una modalidad, el segundo subconjunto puede incluir las memorias intermedias de línea restantes no incluidas en el primer subconjunto de memorias intermedias de línea del paso 1170. En el paso 1174, el segundo subconjunto de memorias intermedias de línea es utilizado para aplicar corrección de sombreado de lente a los datos de píxel en bruto. A continuación, en el paso 1175, el segundo subconjunto de memorias intermedias de línea es utilizado para aplicar un segundo conjunto de parámetros de ganancia, desplazamiento y recorte (G0C2) y, posteriormente, el segundo conjunto de memorias intermedias de línea también es utilizado para la interpolación cromática de los datos de imagen en bruto, tal como se muestra en el paso 1176. Los datos de color RGB interpolados cromáticamente entonces pueden ser enviados corriente abajo en el paso 1177 para procesamiento adicional por la lógica de procesamiento RGB 902, tal como se analiza con mayor detalle a continuación.
Haciendo referencia nuevamente a la figura 98, habiendo descrito completamente la operación de la lógica de procesamiento de píxeles en bruto 900, la cual puede emitir una señal de imagen RGB 910, el presente análisis ahora se enfocará en describir el procesamiento de la señal de imagen RGB 910 mediante la lógica de procesamiento RGB 902. Tal como se muestra, la señal de imagen RGB 910 puede ser enviada a la lógica de selección 914 y/o a la memoria 108. La lógica de procesamiento RGB 902 puede recibir la señal de entrada 916, la cual puede ser los datos de imagen RGB desde la señal 910 o desde la memoria 108, tal como lo muestra la señal 912, dependiendo de la configuración de la lógica de selección 914. Los datos de imagen RGB 916 pueden ser procesados por la lógica de procesamiento RGB 902 para ejecutar operaciones de ajuste de color, incluyendo corrección de color (por ejemplo, utilizando una matriz de corrección de color) , la aplicación de ganancias de color para balance automático de blancos, así como mapeo de tono global, y así sucesivamente.
En la figura 125 se ilustra un diagrama en bloques que muestra una vista más detallada de una modalidad de la lógica de procesamiento RGB 902. Tal como se muestra, la lógica de procesamiento RGB 902 incluye la lógica de ganancia, desplazamiento, y recorte (GOC) 1178, la lógica de corrección de color RGB 1179, la lógica GOC 1180, la lógica de ajuste gama RGB, y la lógica de conversión de espacio de color 1182. La señal de entrada 916 primero es recibida por la lógica de ganancia, desplazamiento y recorte (GOC) 1178. En la modalidad ilustrada, la lógica GOC 1178 puede aplicar ganancias para ejecutar el balance automático de blancos en uno o más de los canales de color R, G o B antes del procesamiento mediante la lógica de corrección de color 1179.
La lógica GOC 1178 puede ser similar a la lógica GOC 930 de la lógica de procesamiento de píxeles en bruto 900, excepto que los componentes de color del dominio RGB son procesados, en lugar de los componentes R, B, Gr y Gb de los datos de imagen Bayer. En operación, el valor de entrada para el píxel actual primero es desplazado por un valor con signo 0 [c] y multiplicado por una ganancia G[c], tal como se muestra en la Ecuación 11 anterior, en donde c representa el R, G y B. Tal como se analizó anteriormente, la ganancia G[c] puede ser un número sin signo de 16 bits con 2 bits enteros y 14 bits fracciónales (por ejemplo, representación de punto de flotación 2.14), y los valores para la ganancia G[c] pueden ser previamente determinados durante el procesamiento de estadísticas (por ejemplo, en el bloque de etapa inicial ISP 80) . El valor de píxel calculado Y (con base en la Ecuación 11) entonces es recortado a un rango mínimo y máximo de acuerdo con la Ecuación 12. Tal como se analizó anteriormente, las variables min[c] y maxtc] pueden representar "valores de recorte" de 16 bits con signo para los valores de salida mínimo y máximo, respectivamente. En una modalidad, la lógica GOC 1178 también se puede configurar para mantener un conteo del número de píxeles que fueron recortados por arriba y debajo del máximo y mínimo, respectivamente, para cada componente de color R, G y B.
La salida de la lógica GOC 1178 entonces es reenviada a la lógica de corrección de color 1179. De acuerdo con las técnicas aquí divulgadas, la lógica de corrección de color 1179 se puede configurar para aplicar corrección de color a los datos de imagen RGB utilizando una matriz de corrección de color (CCM) . En una modalidad, la CCM puede ser una matriz de transformada RGB 3x3, aunque también se pueden utilizar matrices de otras dimensionas en otras modalidades (por ejemplo, 4x3, etcétera) . Por consiguiente, el proceso para ejecutar la corrección de color en un píxel de entrada que tiene componentes R, G y B puede ser expresado de la siguiente forma: [R' G B'] = G B] , (96) en donde R, G y B representan los valores actuales de rojo, verde y azul para el píxel de entrada, CCMOO -CCM22 representan los coeficientes de la matriz de corrección de color, y R' , G' y B' representan los valores corregidos de rojo, verde y azul para el píxel de entrada. Por consiguiente, los valores de color corregidos pueden ser calculados de acuerdo con las Ecuaciones 97-99 a continuación: R'= (CCM 00 x R) + (CCM 01 x G) + (CCM 02 x B) (97) G'= (CC 10x R) + (CC l lx G) + (CC 12x £) (98) B' = (CCM 20 x R) + (CCM 21 x G) + (CCM 22 x B) (99) Los coeficientes (CCM00-CCM22 ) de la CCM pueden ser determinados durante el procesamiento de estadísticas en el bloque de etapa inicial ISP 80, tal como se analizó anteriormente. En una modalidad, los coeficientes para un canal de color determinado pueden ser seleccionados de manera que la suma de esos coeficientes (por ejemplo, CCM00, CCM01 y CCM02 para la corrección del color rojo) es igual a l, lo cual puede ayudar a mantener la brillantez y el equilibrio del color. Además, los coeficientes típicamente son seleccionados de manera que se aplica una ganancia positiva al color que se está corrigiendo. Por ejemplo, con la corrección del color rojo, el coeficiente CCM00 puede ser mayor que 1, mientras que uno o ambos de los coeficientes CCM01 y CCM02 puede ser menor que 1. La configuración de los coeficientes de esta manera puede mejorar el componente rojo (R) en el valor R' corregido resultante mientras que se sustrae parte del componente azul (B) y verde (G) . Tal como se apreciará, esto puede corregir problemas con el traslape de color que pueden ocurrir durante la adquisición de la imagen Bayer original, ya que una porción de luz filtrada para un píxel de color particular se puede "escurrir" en un píxel vecino de un color diferente. En una modalidad, los coeficientes de la CCM pueden ser proporcionados como números de dos complementos de 16 bits con 4 bits enteros y 12 bits fracciónales (expresado en punto de flotación como 4.12). De manera adicional, la lógica de corrección de color 1179 puede permitir el recorte de los valores de color corregidos calculados en caso que los valores excedan un valor máximo o estén por debajo de un valor mínimo.
La salida de la lógica de corrección de color RGB 1179 entonces es pasada a otro bloque de lógica GOC 1180. La lógica GOC 1180 puede ser implementada en una manera idéntica que la lógica GOC 1178 y, por lo tanto, aquí no se repetirá una descripción detallada de las funciones de ganancia, desplazamiento y recorte proporcionadas. En una modalidad, la aplicación de la lógica GOC 1180 posterior a la corrección de color puede permitir el balance automático de blancos de los datos de la imagen con base en los valores de color corregidos, y también puede ajustar variaciones del sensor de las relaciones rojo-a-verde y azul -a-verde .
A continuación, la salida de la lógica GOC 1180 es enviada a la lógica de ajuste gama RGB 1181 para procesamiento adicional, por ejemplo, la lógica de ajuste gama RGB 1181 puede permitir la corrección gama, mapeo de tonos, concordancia de histograma, y así sucesivamente. De acuerdo con las modalidades divulgas, la lógica de ajuste gama 1181 puede permitir un mapeo de los valores RGB de entrada a valores RGB de salida correspondientes. Por ejemplo, la lógica de ajuste gama puede permitir un conjunto de tres tablas de búsqueda, una tabla para cada uno de los componentes R, G, y B. A manera de ejemplo, cada tabla de búsqueda se puede configurar para almacenar 256 entradas de valores de 10 bits, cada valor representando un nivel de salida. Las entradas de tabla pueden estar uniformemente distribuidas en el rango de los valores de píxel de entrada, de manera que cuando el valor de entrada cae entre dos entradas, el valor de salida puede ser linealmente interpolado. En una modalidad, cada una de las tres tablas de búsqueda para R, G y B se puede duplicar, de manera que las tablas de búsqueda están "doblemente almacenadas en memoria intermedia" , permitiendo así que una tabla sea utilizada durante el procesamiento, mientras que su duplicado se está actualizando. Con base en los valores de salida de 10 bits antes analizados, se debiera observar que la señal de imagen RGB de 14 bits es efectivamente sub-muestreada a 10 bits como un resultado del proceso de corrección gama en la presente modalidad.
La salida de la lógica de ajuste gama 1181 puede ser enviada a la memoria 108 y/o a la lógica de conversión del espacio de color 1182. La lógica de conversión del espacio de color (CSC) 1182 se puede configurar para convertir la salida RGB de la lógica de ajuste gama 1181 al formato YCbCr, en donde Y representa un componente de luminancia, Cb representa un componente de crominancia de diferencia de azul, y Cr representa un componente de crominancia de diferencia de rojo, cada uno de los cuales puede estar en un formato de 10 bits como un resultado de la conversión de profundidad de bits de los datos RGB de 14 bits a 10 bits durante la operación de ajuste gama. Tal como se analizó anteriormente, en una modalidad, la salida RGB de la lógica de ajuste gama 1181 puede ser sub-muestreada a 10 bits y, por lo tanto, convertida a valores YCbCr de 10 bits por la lógica CSC 1182, la cual entonces puede ser reenviada a la lógica de procesamiento YCbCr 904, lo cual se analizará con mayor detalle a continuación.
La conversión del dominio RGB al espacio de color YCbCr se puede ejecutar utilizando una matriz de conversión de espacio de color (CSCM) . Por ejemplo, en una modalidad, la CSCM puede ser una matriz de transformada 3x3. Los coeficientes de la CSCM se pueden establecer de acuerdo con una ecuación de conversión conocida, tal como las normas BT.601 y BT.709. Adicionalmente , los coeficientes CSCM pueden ser flexibles con base en el rango deseado de entradas y salidas. Por lo tanto, en algunas modalidades, los coeficientes CSCM pueden ser determinados y programados con base en datos recopilados durante el procesamiento de estadísticas en el bloque de etapa inicial ISP 80.
El proceso de ejecutar la conversión de espacio de color YCbCr en un píxel de entrada RGB se puede expresar de la siguiente 'forma : [Y Cb Cr] G B] , (100) en donde R, G y B representan los valores actuales de rojo, verde y azul para el píxel de entrada en el formato de 10 bits (por ejemplo, tal como son procesados por la lógica de ajuste gama 1181) , CSCM00-CSCM22 representan los coeficientes de la matriz de conversión del espacio de color e Y, Cb y Cr representan los componentes de luminancia y crominancia resultantes para el píxel de entrada. Por consiguiente, los valores para Y, Cb y Cr pueden ser calculados de acuerdo con las ecuaciones 101-103 a continuación: Y = (CSCM OOx R) + (CSCMOl x G) + (CSCM 2x B) (101) Cb = (CSCM10x R) + (CSCM11x G) + (CSCM12x B) (102 ) Cr = (CSCM 20 R) + (CSCM21x G) + (CSCM 22x B) (103) Siguiendo la operación de conversión del espacio de color, los valores YCbCr resultantes pueden ser emitidos desde la lógica CSC 1182 como la señal 918, la cual puede ser procesada por la lógica de procesamiento YCbCr 904, tal como se analizará a continuación.
En una modalidad, los coeficientes de la CSCM pueden ser números de dos-complementos de 16 bits con 4 bits enteros y 12 bits fracciónales (4.12). En otra modalidad, la lógica CSC 1182 además se puede configurar para aplicar un desplazamiento a cada uno de los valores Y, Cb y Cr, y para recortar los valores resultantes a un valor máximo y mínimo. A manera de ejemplo solamente, asumiendo que los valores YCbCr están en formato de 10 bits, el desplazamiento puede ser en un rango de -512 a 512, y los valores mínimo y máximo pueden ser 0 y 1023, respectivamente.
Haciendo referencia nuevamente al diagrama de bloques de la lógica de conducto ISP 82 en la figura 98, la señal YCbCr 918 puede ser enviada a la lógica de selección 922 y/o a la memoria 108. La lógica de procesamiento YCbCr 904 puede recibir la señal de entrada 924, la cual puede ser datos de imagen YCbCr de la señal 918 o de la memoria 108, tal como lo muestra la señal 920, dependiendo de la configuración de la lógica de selección 922. Los datos de imagen YCbCr 924 entonces pueden ser procesados por la lógica de procesamiento YCbCr 904 para afinado de luminancia, supresión de crominancia, reducción de ruido de crominancia, reducción de ruido de crominancia, así como ajustes de brillantez, contraste y color, y así sucesivamente. Además, la lógica de procesamiento YCbCr 904 puede permitir el mapeo gama y la escala de los datos de imagen procesados tanto en las direcciones horizontales como verticales.
En la figura 126 se ilustra un diagrama en bloques que muestra una vista más detallada de una modalidad de la lógica de procesamiento YCbCr 904. Tal como se muestra, la lógica de procesamiento YCbCr 904 incluye la lógica de afinado de imagen 1183, la lógica 1184 para ajustar la brillantez, contraste y/o color, la lógica de ajuste gama YCbCr 1185, la lógica de decimación de crominancia 1186, y la lógica de escala 1187. La lógica de procesamiento YCbCr 904 se puede configurar para procesar datos de píxel en los formatos 4:4:4, 4:2:2, o 4:2:0 utilizando configuraciones de memoria de 1-plano, 2 -planos o 3 -planos. Además, en una modalidad, la señal de entrada YCbCr 924 puede proporcionar información de luminancia y crominancia como valores de 10 bits .
Tal como se apreciará, la referencia a 1-plano, 2-planos o 3 -planos se refiere al número de planos de generación de imagen utilizados en la memoria de la imagen. Por ejemplo, en un formato de 3-planos, cada uno de los componentes Y, Cb y Cr puede utilizar planos de memoria respectivos separados. En un formato de 2 -planos, un primer plano puede ser proporcionado para el componente de luminancia (Y) , y un segundo plano que intercala las muestras Cb y Cr puede ser proporcionado para los componentes de crominancia (Cb y Cr) . En un formato de 1-plano, un solo plano en memoria es intercalado con las muestras de luminancia y crominancia. Además, con respecto a los formatos 4:4:4, 4:2:2, y 4:2:0, se puede apreciar que el formato 4:4:4 se refiere a un formato de muestreo en el cual cada unos de los tres componentes YCbCr son muestreados a la misma velocidad. En un formato 4:2:2, los componentes de crominancia Cb y Cr son sub-muestreados a la mitad de la velocidad de muestreo del componente de luminancia Y, reduciendo así la resolución de los componentes de crominancia Cb y Cr a la mitad en la dirección horizontal. De manera similar, el formato 4:2:0 sub-muestrea los componentes de crominancia Cb y Cr tanto en las direcciones vertical como horizontal .
El procesamiento de la información YCbCr puede ocurrir dentro de una región de fuente activa definida dentro de una memoria intermedia fuente, en donde la región de fuente activa contiene datos de píxel "válidos". Por ejemplo, haciendo referencia a la figura 127, se ilustra una memoria intermedia fuente 1188 que tiene ahí definida una región fuente activa 1189. En el ejemplo ilustrado, la memoria intermedia fuente puede representar un formato de un plano 4:4:4 proporcionando píxeles fuente de valores de 10 bits. La región fuente activa 1189 puede ser especificada individualmente para muestras de luminancia (Y) y muestras de crominancia (Cb y Cr) . Por lo tanto, se debiera entender que la región fuente activa 1189 en realidad puede incluir múltiples regiones fuente activas para las muestras de luminancia y crominancia. El inicio de las regiones fuente activas 1189 para luminancia y crominancia puede ser determinado con base en un desplazamiento desde una dirección base (0, 0) 1190 de la memoria intermedia fuente. Por ejemplo, una posición de inicio (Lm_X, Lm_Y) 1191 para la región fuente activa de luminancia puede ser definida por un desplazamiento-x 1193 y un desplazamiento-y 1196 con respecto a la dirección base 1190. De manera similar, una posición de inicio (Ch_X, Ch_Y) 1192 para la región fuente activa de crominancia puede ser definida por un desplazamiento-x 1194 y un desplazamiento-y 1198 con respecto a la dirección base 1190. Se debiera observar que en el presente ejemplo, los desplazamientos-y 1196 y 1198 para luminancia y crominancia, respectivamente, pueden ser iguales. Con base en la posición de inicio 1191, la región fuente activa de luminancia puede ser definida por un ancho 1195 y un alto 1200, cada uno de los cuales puede representar el número de muestras de luminancia en las direcciones x y y, respectivamente. De manera adicional, con base en la posición de inicio 1192, la región fuente activa de crominancia puede ser definida por un ancho 1202 y un alto 1204, cada uno de los cuales puede representar el número de muestras de crominancia en las direcciones x y y, respectivamente.
La figura 128 además proporciona un ejemplo que muestra la manera en que las regiones fuente activas para muestras de luminancia y crominancia pueden ser determinadas en un formato de dos planos. Por ejemplo, tal como se muestra, la región fuente activa de luminancia 1189 puede ser definida en una primer memoria intermedia fuente 1188 (que tiene la dirección base 1190) por el área especificada por el ancho 1195 y el alto 1200 con respecto a la posición de inicio 1191. Una región fuente activa de crominancia 1208 puede ser definida en una segunda memoria intermedia fuente 1206 (que tiene la dirección base 1190) como el área especificada por el ancho 1202 y el alto 1204 con relación a la posición de inicio 1192.
Con los puntos anteriores en mente y haciendo referencia nuevamente a la figura 126, la señal YCbCr 924 primero es recibida por la lógica de afinado de imagen 1183. La lógica de afinado de imagen 1183 se puede configurar para ejecutar procesamiento de mejora de bordes y afinamiento de imagen para incrementar la textura y los detalles de los bordes en la imagen. Tal como se apreciará, el afinamiento de imagen puede mejorar la resolución de la imagen percibida. Sin embargo, generalmente es deseable que el ruido existente en la imagen no sea detectado como textura y/o bordes, y por lo tanto que no sea amplificado durante el proceso de afinamiento .
De acuerdo con la presente técnica, la lógica de afinado de imagen 1183 puede ejecutar afinamiento de imagen utilizando un filtro de máscara de enfoque multi-escala en el componente de luminancia (Y) de la señal YCbCr. En una modalidad, se pueden proporcionar dos o más filtros Gausianos de paso bajo de tamaños de escala diferentes. Por ejemplo, en una modalidad que proporciona dos filtros Gausianos, la salida (por ejemplo, borrosidad Gausiana) de un primer filtro Gausiano que tiene un primer radio (x) es sustraída de la salida de un segundo filtro Gausiano que tiene un segundo radio (y) , en donde x es mayor que y, para generar una máscara de enfoque. También se pueden obtener máscaras de enfoque adicionales sustrayendo las salidas de los filtros Gausianos de la entrada Y. En algunas modalidades, la técnica también puede proporcionar operaciones de comparación de umbral de núcleo adaptable que pueden ser ejecutadas utilizando las máscaras de enfoque de manera que, con base en los resultados de las comparaciones, se pueden agregar las cantidades de ganancia a una imagen base, la cual puede ser seleccionada como la imagen de entrada Y original o la salida de uno de los filtros Gausianos para generar una salida final .
Haciendo referencia a la figura 129, se ilustra un diagrama en bloques que muestra lógica ejemplar 1210 para ejecutar el afinado de imagen de acuerdo con modalidades de las técnicas aquí divulgadas. La lógica 1210 representa una máscara de filtración de enfoque multi -escala que puede ser aplicada a una imagen de luminancia de entrada Yin. Por ejemplo, tal como se muestra, Yin es recibida y procesada por dos filtros Gausianos de paso bajo 1212 (Gl) y 1214 (G2) . En el presente ejemplo, el filtro 1212 puede ser un filtro 3x3 y el filtro 1214 puede ser un filtro 5x5. No obstante, se debiera apreciar que en modalidades adicionales también se pueden utilizar más de dos filtros Gausianos, incluyendo filtros de diferentes escalas (por ejemplo, 7x7, 9x9, etcétera) . Tal como se apreciará, debido al proceso de filtración de paso bajo, los componentes de alta frecuencia, los cuales generalmente corresponden al ruido, pueden ser removidos de las salidas de Gl y G2 para producir imágenes "de enfoque" (Glout y G2out) . Tal como se analizará a continuación, al utilizar la imagen de entrada de enfoque como una imagen base se permite la reducción de ruido como parte del filtro de afinamiento.
El filtro Gausiano 3x3 1212 y el filtro Gausiano 5x5 1214 pueden ser definidos como se muestra a continuación: A manera de ejemplo solamente, los valores de los filtros Gausianos Gl y G2 pueden ser seleccionados en una modalidad de la siguiente forma: Con base en Yin, Glout y G2out, se pueden generar tres máscaras de enfoque, Sharpl, Sharp2 y Sharp3. Sharpl se puede determinar como la imagen de enfoque G2out del filtro Gausiano 1214 sustraída de la imagen de enfoque Glout del filtro Gausiano 1212. Debido a que Sharpl esencialmente es la diferencia entre los dos filtros de paso bajo, esta se puede referir como una máscara de "banda media" , debido a que los componentes de ruido de frecuencia superior ya han sido filtrados en las imágenes de enfoque Glout y G2out . Adicionalmente , Sharp2 se puede calcular sustrayendo G2out de la imagen de luminancia de entrada Yin, y Sharp3 se puede calcular sustrayendo Glout de la imagen de luminancia de entrada Yin. Tal como se analizará a continuación, se puede aplicar un esquema de núcleo de umbral adaptable utilizando las máscaras de enfoque Sharpl, Sharp2 y Sharp3.
Haciendo referencia a la lógica de selección 1216, se puede seleccionar una imagen base con base en una señal de control UnsharpSel. En la modalidad ilustrada, la imagen base puede ser la imagen de entrada Yin, o las salidas filtradas Glout o G2out. Tal como se apreciará, cuando una imagen original tiene una varianza de ruido alta (por ejemplo, casi tan alta como la varianza de señal) , el uso de la imagen original Yin como la imagen base en el afinamiento puede no permitir de manera suficiente la reducción de los componentes de ruido durante el afinamiento. Por consiguiente, cuando se detecta un umbral particular de contenido de ruido en la imagen de entrada, la lógica de selección 1216 se puede adaptar para seleccionar una de las salidas filtradas de paso bajo Glout o G2out a partir de la cual se ha reducido el contenido de alta frecuencia, el cual puede incluir ruido. En una modalidad, el valor de la señal de control UnsharpSel puede ser determinado analizando datos estadísticos adquiridos durante el procesamiento de estadísticas en el bloque de etapa inicial ISP 80 para determinar el contenido de ruido de la imagen. A manera de ejemplo, si la imagen de entrada Yin tiene un contenido de ruido bajo, de manera que el ruido de apariencia probablemente no aumentará como resultado del proceso de afinamiento, la imagen de entrada Yin puede ser seleccionada como la imagen base (por ejemplo, UnsharpSel=0) . Si se determina que la imagen de entrada Yin contiene un nivel de ruido notable, de manera que el proceso de afinamiento puede amplificar el ruido, se puede seleccionar una de las imágenes filtradas Glout o G2out (por ejemplo, UnsharpSel= 1 o 2, respectivamente). Por lo tanto, al aplicar una técnica adaptable para seleccionar una imagen base, la lógica 1210 esencialmente proporciona una función de reducción de ruido.
A continuación, se pueden aplicar ganancias a una o más de las máscaras Sharpl, Sharp2 y Sharp3 de acuerdo con un esquema de umbral núcleo adaptable, tal como se describe a continuación. A continuación, los valores de enfoque Sharpl, Sharp2 y Sharp3 pueden ser comparados con varios umbrales ShrpThdl, SharpThd2 y SharpThd3 (no necesariamente de forma respectiva) por medio de los bloques de comparador 1218, 1220 y 1222. Por ejemplo, el valor Sharpl siempre se compara con SharpThdl en el bloque de comparador 1218. Con respecto al bloque de comparador 1220, el umbral SharpThd2 se puede comparar contra cualquiera de Sharpl o Sharp2 , dependiendo de la lógica de selección 1226. Por ejemplo, la lógica de selección 1226 puede seleccionar Sharpl o Sharp2 dependiendo del estado de una señal de control SharpCmp2 (por ejemplo, SharpCmp2 = 1 selecciona Sharpl, SharpCmp2 = 0 selecciona Sharp2) . Por ejemplo, en una modalidad, el estado de SharpCmp2 puede ser determinado dependiendo de la varianza/contenido de ruido de la imagen de entrada (Yin) .
En la modalidad ilustrada, generalmente es preferible establecer los valores SharpCmp2 y SharpCmp3 para seleccionar Sharpl, a menos que se detecte que los datos de imagen tienen cantidades de ruido relativamente bajas. Esto se deber a que Sharpl, al ser la diferencia entre las salidas de los filtros de paso bajo Gausianos Gl y G2 , generalmente es menos sensible al ruido, y por lo tanto puede ayudar a reducir la cantidad a la cual varían los valores SharpAmtl, SharpAmt2 y SharpAmt3 debido a las fluctuaciones del nivel de ruido en datos de imagen "ruidosos". Por ejemplo, si la imagen original tiene una varianza de ruido alta, algunos de los componentes de alta frecuencia pueden no ser captados cuando se utilizan umbrales fijos y, por lo tanto, pueden ser amplificados durante el proceso de afinamiento. Por consiguiente, si el contenido de ruido de la imagen de entrada es alto, entonces parte del contenido de ruido puede estar presente en Sharp2, en dichos casos, SharpCmp2 puede ser establecido a 1 para seleccionar la máscara de banda media Sharpl que, tal como se analizó anteriormente, ha reducido el contenido de alta frecuencia debido a que es la diferencia de dos salidas de filtro de paso bajo y, por lo tanto, es menos sensible al ruido.
Tal como se apreciará, se puede aplicar un proceso similar a la selección de cualquiera de Sharpl o Sharp3 mediante la lógica de selección 1224 bajo el control de SharpCmp3. En una modalidad, SharpCmp2 y SharpCmp3 se pueden fijar a 1 por omisión (por ejemplo, utilizar Sharpl) , y se pueden establecer a 0 solamente para aquellas imágenes de entrada que son identificadas como teniendo varianzas de ruido generalmente bajas. Esto esencialmente proporciona un esquema de umbral de núcleo adaptable en el cual la selección del valor de comparación (Sharpl, Sharp2 o Sharp3) es adaptable con base en la varianza de ruido de una imagen de entrada .
Con base en las salidas de los bloques de comparador 1218, 1220 y 1222, la imagen de salida afinada Ysharp puede ser determinada aplicando las máscaras de enfoque ganadas a la imagen base (por ejemplo, seleccionada a través de la lógica 1216) . Por ejemplo, haciendo referencia primero al bloque de comparador 1222, SharpThd3 se compara con la B-entrada proporcionada por la lógica de selección 1224, la cual se referirá aquí como "SharpAbs" y puede ser igual a cualquiera de Sharpl o Sharp3 dependiendo del estado de SharpCm 3. Si SharpAbs es mayor que el umbral SharpThd3 , entonces una ganancia SharpAmt3 se aplica a Sharp3 , y el valor resultante se agrega a la imagen base. Si SharpAbs es menor que el umbral SharpThd3 , entonces se puede aplicar una ganancia atenuada Att3. En una modalidad, la ganancia atenuada Att3 se puede determinar de la siguiente forma: . _ SharpAmt3 x SharpAbs Att3 = (104) SharpThd3 en donde SharpAbs es cualquiera de Sharpl o Sharp3 , conforme a lo determinado por la lógica de selección 1224. La selección de la imagen base sumada con cualquiera de la ganancia completa (SharpAmt3) o la ganancia atenuada (Att3) se ejecuta mediante la lógica de selección 1228 con base en la salida del bloque de comparador 1222. Tal como se apreciará, el uso de una ganancia atenuada puede corregir situaciones en las cuales SharpAbs no es mayor que el umbral (por ejemplo, SharpThd3) , pero la varianza de ruido de la imagen no obstante está cerca del umbral determinado. Esto puede ayudar a reducir transiciones notables entre un píxel de afinado y enfoque. Por ejemplo, si los datos de imagen son pasados sin la ganancia atenuada en dicha circunstancia, el píxel resultante puede parecer como un píxel defectuoso (por ejemplo, un píxel atascado) .
A continuación, se puede aplicar un proceso similar con respecto al bloque de comparador 1220. Por ejemplo, dependiendo del estado de SharpCmp2, la lógica de selección 1226 puede proporcionar ya sea Sharpl o Sharp2 como la entrada al bloque de comparador 1220 que se compara contra el umbral SharpThd2. Dependiendo de la salida del bloque de comparador 1220, cualquiera de la ganancia SharpAmt2 o una ganancia atenuada con base en SharpAmt2, Att2, se aplica a Sharp2 y se agrega a la salida de la lógica de selección 1228 antes analizada. Tal como se apreciará, la ganancia atenuada Att2 se puede calcular en una manera similar a la Ecuación 104 anterior, excepto que la ganancia SharpAmt2 y el umbral SharpThd2 se aplican con respecto a SharpAbs, el cual puede ser seleccionado como Sharpl o Sharp2.
Posteriormente, una ganancia SharpAmtl o una ganancia atenuada Attl es aplicada a Sharpl, y el valor resultante es sumado con la salida de la lógica de selección 1230 para producir la salida de píxel afinada Ysharp (de la lógica de selección 1232) . La selección de aplicar ya sea la ganancia SharpAmtl o la ganancia atenuada Attl se puede determinar con base en la salida del bloque de comparador 1218, el cual compara Sharpl contra el umbral SharpThdl . Una vez más, la ganancia atenuada Attl se puede determinar en una manera similar a la ecuación 104 anterior, excepto que la ganancia SharpAmtl y el umbral SharpThdl se aplican con respecto a Sharpl. Los valores de píxel afinados resultantes escalados utilizando cada una de las tres máscaras se añaden al píxel de entrada Yin para generar la salida afinada Ysharp que, en una modalidad, se puede recortar a 10 bits (asumiendo que el procesamiento YCbCr ocurre a una precisión de 10 bits) .
Tal como se apreciará, cuando se comparan con técnicas convencionales de enmascaramiento de enfoque, las técnicas de afinado de imagen establecidas en este divulgación pueden permitir una mejora de texturas y bordes al mismo tiempo que también se reduce el ruido en la imagen de salida. En particular, las presentes técnicas pueden estar bien adecuadas en aplicaciones en las cuales las imágenes capturadas utilizando, por ejemplo, sensores de imagen CMOS, exhiben una relación señal-a-ruido pobre, tal como imágenes adquiridas bajo condiciones de baja iluminación utilizando cámaras de resolución inferior integradas en dispositivos portátiles (por ejemplo, teléfonos móviles) . Por ejemplo, cuando la varianza de ruido y la varianza de señal son comparables, es difícil utilizar un umbral fijo para afinado, ya que algunos de los componentes de ruido debieran ser afinados junto con la textura y bordes. Por consiguiente, las técnicas aquí proporcionadas, tal como se analizó anteriormente, pueden filtrar el ruido de la imagen de entrada utilizando filtros gausianos multi-escala para extraer características de las imágenes de enfoque (por e emplo, Glout y G2out) a fin de proporcionar una imagen afinada que también exhiba contenido de ruido reducido.
Antes de continuar, se debiera entender que la lógica ilustrada 1210 pretende proporcionar solamente una modalidad ejemplar de la presente técnica. En otras modalidades, una cantidad mayor o menor de características puede ser proporcionada por la lógica de afinado de imagen 1183. Por ejemplo, en algunas modalidades, en lugar de aplicar una ganancia atenuada, la lógica 1210 simplemente puede pasar el valor base. Adicionalmente, algunas modalidades pueden no incluir los bloques de lógica de selección 1224, 1226 o 1216. Por ejemplo, los bloques de comparador 1220 y 1222 simplemente pueden recibir los valores Sharp2 y Sharp3, respectivamente, en lugar de una salida de selección de los bloques de lógica de selección 1224 y 1226, respectivamente. Aunque dichas modalidades pueden no permitir las características de afinado y/o reducción de ruido que sean tan robustas como la implementación mostrada en la figura 129, se debiera apreciar que dichas elecciones de diseño pueden ser el resultado de restricciones relacionadas con el costo y/o negocio.
En la presente modalidad, la lógica de afinado de imagen 1183 también puede permitir características de mejoramiento de borde y supresión de crominancia una vez que se obtiene la salida de imagen afinada Yshar . Cada una de estas características adicionales se describirá a continuación. Haciendo referencia primero a la figura 130, de acuerdo con una modalidad, se ilustra la lógica ejemplar 1234 para ejecutar el mejoramiento de borde que puede ser implementado corriente abajo a partir de la lógica de afinado 1210 de la figura 129. Tal como se muestra, el valor de entrada original Yin es procesado por un filtro Sobel 1236 para detección de borde. El filtro Sobel 1236 puede determinar un valor de gradiente YEdge basado en un bloque de píxel 3x3 (referido como una "A" a continuación) de la imagen original, con Yin siendo el píxel central del bloque 3x3. En una modalidad, el filtro Sobel 1236 puede calcular YEdge por convolución de los datos de imagen original para detectar cambios en las direcciones horizontal y vertical. Este proceso se muestra a continuación en las ecuaciones 105-107.
Gx = SxxA, (105) Gy = SyxA, (106) YEdge =GxxGy , (107) en donde Sx y Sy representan operadores de matriz para detección de intensidad de borde de gradiente en las direcciones horizontal y vertical, respectivamente, y en donde Gx y Gy representan imágenes de gradiente que contienen derivados de cambios horizontales y verticales, respectivamente. Por consiguiente, YEdge de salida es determinado como el producto de Gx y Gy.
YEdge entonces es recibido por la lógica de selección 1240 junto con la máscara Sharpl de banda media, tal como se analizó anteriormente en la figura 129. Con base en la señal de control EdgeCmp, ya sea Sharpl o YEdge se comparan con un umbral, EdgeThd, en el bloque de comparador 1238. El estado de EdgeCmp puede ser determinado, por ejemplo, con base en el contenido de ruido de una imagen, proporcionando así un esquema de umbral de núcleo adaptivo para detección y mejoramiento de borde. A continuación, la salida del bloque de comparador 1238 puede ser proporcionado a la lógica de selección 1242 y se puede aplicar una ganancia completa o una ganancia atenuada. Por ejemplo, cuando la B-entrada seleccionada para el bloque de comparador 1238 (Sharpl o YEdge) está por arriba de EdgeThd, YEdge es multiplicado por una ganancia de borde, EdgeAmt, para determinar la cantidad del mejoramiento de borde que se va a aplicar. Si la B-entrada en el bloque de comparador 1238 es menor que EdgeThd, entonces se puede aplicar una ganancia de borde atenuado, AttEdge, para evitar transiciones notables entre el borde mejorado y el píxel original. Tal como se apreciará, AttEdge puede ser calculado en una manera similar como se muestra en la ecuación 104 anterior, pero en donde EdgeAmt y EdgeThd son aplicados a "SharpAbs" , el cual puede ser Sharpl o YEdge, dependiendo de la salida de la lógica de selección 1240. Por lo tanto, el píxel de borde, mejorado utilizando ya sea la ganancia (EdgeAmt) o la ganancia atenuada (AttEdge) se pueden añadir a YSharp (salida de lógica 1210 de la figura 129) para obtener el píxel de salida de borde mejorado Yout que, en una modalidad, se puede recortar a 10 bits (asumiendo que el procesamiento- YCbCr ocurre a una precisión de 10 bits) .
Con respecto a las características de supresión de crominancia proporcionadas por la lógica de afinado de imagen 1183, dichas características pueden atenuar los bordes de crominancia y luminancia. Generalmente, la supresión de la crominancia se puede ejecutar aplicando una ganancia de crominancia (factor de atenuación) de menos de 1 dependiendo del valor (YSharp, Yout) obtenido de los pasos de afinado de luminancia y/o mejoramiento de borde antes analizados. A manera de ejemplo, la figura 131 muestra un gráfico 1250 que incluye una curva 1252 representando las ganancias de crominancia que pueden ser seleccionadas para valores de luminancia afinados correspondientes (YSharp) . Los datos representados por el gráfico 1250 pueden ser implementados como una tabla de búsqueda de valores YSharp y ganancias de crominancia correspondientes entre 0 y 1 (un factor de atenuación) . Las tablas de búsqueda son utilizadas para aproximar la curva 1252. Para valores YSharp que están colocados entre dos factores de atenuación en la tabla de búsqueda, la interpolación lineal puede ser aplicada a los dos factores de atenuación correspondientes a valores YSharp por arriba y por debajo del valor YSharp actual. Además, en otras modalidades, el valor de luminancia de entrada también se puede seleccionar como uno de los valores Sharpl, Sharp2 , o Sharp3 determinados por la lógica 1210, tal como se analizó anteriormente en la figura 129, o el valor YEdge determinado por la lógica 1234, tal como se analizó en la figura 130.
A continuación, la salida de la lógica de afinado de imagen 1183 (figura 126) es procesada por la lógica de ajuste de brillantez, contraste y color (BCC) 1184. En la figura 132 se muestra un diagrama en bloques funcional que muestra una modalidad de la lógica de ajuste BCC 1184. Como se muestra, la lógica 1184 incluye un bloque de procesamiento de brillantez y contraste 1262, bloque de control de tono global 1264, y un bloque de control de saturación 1266. La modalidad ilustrada aquí permite el procesamiento de los datos YCbCr en una precisión de 10 bits, aunque otras modalidades pueden utilizar diferentes profundidades de bit. Las funciones de cada uno de los bloques 1262, 1264 y 1266 se analizan a continuación.
Haciendo referencia primero al bloque de procesamiento de brillantez y contraste 1262, un desplazamiento, YOffset, primero es sustraído de los datos de luminancia (Y) para establecer el nivel de negro a cero. Esto se realiza para asegurar que el ajuste de contraste no altere los niveles de negro. A continuación, el valor de luminancia es multiplicado por un valor de ganancia de contraste para aplicar control de contraste. A manera de ejemplo, el valor de ganancia de contraste puede ser 12 bits sin signo, con 2 bits enteros y 10 bits fracciónales, permitiendo así un rango de ganancia de contraste hasta de 4 veces el valor del píxel . Posteriormente, el ajuste de brillantez puede ser implementado agregando (o sustrayendo) un valor de desplazamiento de brillantez de los datos de luminancia. A manera de ejemplo, el desplazamiento de brillantez en la presente modalidad puede ser un valor de dos-complementos de 10 bits que tenga un rango de entre -512 a +512. Además, se debiera observar que el ajuste de brillantez se ejecuta después del ajuste de contraste para evitar la variación del desplazamiento DC cuando se cambia contraste. Posteriormente, el YOffset inicial se añade nuevamente a los datos de luminancia ajustados para reposicionar el nivel de negro.
Los bloques 1264 y 1266 permiten el ajuste de color con base en las características del tono de los datos Cb y Cr. Tal como se muestra, un desplazamiento de 512 (asumiendo un procesamiento de 10 bits) primero es sustraído de los datos Cb y Cr para colocar el rango a aproximadamente cero. El tono es entonces ajustado de acuerdo con las siguientes ecuaciones : Cbadj = Cb cos(9) + Cr sin(9) , (108) Cr^ = Cr cos(0) - Cb sin(0) , (109) en donde Cba<jj y Cradj representan valores Cb y Cr ajustados, y en donde T representa un ángulo de tono, el cual se puede calcular de la siguiente forma: T = (110) Las operaciones anteriores se muestran a través de la lógica dentro del bloque de control de tono global 1264, y pueden ser representadas por la siguiente operación de matriz : (111) en donde, Ka = eos (?) , Kb=sin(9), y T es definido anteriormente en la ecuación 110.
A continuación, el control de saturación se puede aplicar a los valores Cbatij y Cradj , como se muestra mediante el bloque de control de saturación 1266. En la modalidad ilustrada, el control de saturación es ejecutado aplicando un multiplicador de saturación global y un multiplicador de saturación basado en tono para cada uno de los valores Cb y Cr . El control de saturación basado en tono puede mejorar la reproducción de colores . El tono del color puede ser representado en el espacio de color YCbCr, como lo muestra el gráfico de rueda de color 1270 en la figura 133. Tal como se apreciará, la rueda de color de saturación y tono YCbCr 1270 puede ser derivada desplazando la rueda de color idéntico en el espacio de color HSV (tono, saturación e intensidad) por aproximadamente 190 grados. Como se muestra, el gráfico 1270 incluye valores circunferenciales que representan el multiplicador de saturación (S) dentro de un rango de 0 a 1, así como valores angulares que representan T, conforme a lo definido anteriormente, dentro de un rango de entre 0 a 360°. Cada T puede representar un color diferente (por ejemplo, 49° = magenta, 109° = rojo, 229° = verde, etc.). El tono del color en un ángulo de tono particular T puede ser ajustado seleccionando un multiplicador de saturación apropiado S.
Haciendo referencia nuevamente a la figura 132, el ángulo de tono T (calculado en el bloque de control de tono global 1264) puede ser utilizado como un índice para una tabla de búsqueda de saturación Cb 1268 y una tabla de búsqueda de saturación Cr 1269. En una modalidad, las tablas de búsqueda de saturación 1268 y 1269 pueden contener 256 valores de saturación distribuidos de manera uniforme en el rango de tono de 0-360° (por ejemplo, la primera entrada de la tabla de búsqueda es a 0° y la última entrada es a 360°) y el valor de saturación S en un píxel determinado puede ser determinado a través de interpolación lineal de valores de saturación en la tabla de búsqueda justo por arriba y por debajo del ángulo de tono actual T. Un valor de saturación final para cada uno de los componentes Cb y Cr se obtiene multiplicando un valor de saturación global (el cual puede ser una constante global para cada uno de Cb y Cr) con el valor de saturación basado en tono determinado. Por lo tanto, los valores Cb' y Cr' corregidos finales pueden ser determinados multiplicando Cbatjj y Cradj con sus valores de saturación finales respectivos, como se muestra en el bloque de control de saturación basado en tono 1266.
Posteriormente, la salida de la lógica BCC 1184 es pasada a la lógica de ajuste gama YCbCr 1185, como se muestra en la figura 126. En una modalidad, la lógica de ajuste gama 1185 puede proporcionar funciones de mapeo no lineales para los canales Y, Cb y Cr. Por ejemplo, los valores Y, Cb y Cr de entrada son mapeados a valores de salida correspondientes. Una vez más, asumiendo que los datos YCbCr son procesados en 10 bits, se puede utilizar una tabla de búsqueda de 256 entradas de 10 bits. Se pueden proporcionar tres tablas de búsqueda con una para cada uno de los canales Y, Cb y Cr. Cada una de las 256 entradas puede estar distribuida de manera uniforme y, una salida puede ser determinada por interpolación lineal de los valores de salida mapeados a los índices justo por encima y por debajo del índice de entrada actual. En algunas modalidades, también se puede utilizar una tabla de búsqueda no interpolada que tiene 1024 entradas (para datos de 10 bits) , pero pueden tener requerimientos de memoria significativamente mayores. Tal como se apreciará, al ajustar los valores de salida de las tablas de búsqueda, la función de ajuste gama YCbCr también se puede utilizar para ejecutar algunos efectos de filtro de imagen, tal como blanco y negro, tono sepia, imágenes en negativo, solarización, y así sucesivamente.
A continuación, se puede aplicar decimación de crominancia a través de la lógica de decimación de crominancia 1186 a la salida de la lógica de ajuste de gama 1185. En una modalidad, la lógica de decimación de crominancia 1186 se puede configurar para ejecutar decimación horizontal para convertir los datos YCbCr de formato 4:4:4 a un formato 4:2:2, en donde la información de crominancia (Cr y Cr) es sub-muestreada a la mitad de la tasa de transferencia de los datos de luminancia. A manera de ejemplo solamente, la decimación puede ser ejecutada aplicando un filtro de paso bajo de 7 derivaciones, tal como un filtro lanczos de media banda, a un conjunto de 7 píxeles horizontales, como se muestra a continuación: C0x in(i -3) + Clx in(i - 2) + C2x in(i- 1) + C3xm(i) + C4x in(i + 1) + C5x in(i + 2) + C6x in(i + 3) 512 en donde in(i) representa el píxel de entrada (Cb o Cr) y C0-C6 representan los coeficientes de filtración del filtro de 7 derivaciones. Cada píxel de entrada tiene un coeficiente de filtro independiente (C0-C6) para permitir el desplazamiento de fase flexible para las muestras filtradas de crominancia.
Además, la decimación de crominancia también puede ser ejecutada, en algunos casos, sin filtración. Esto puede ser útil cuando la imagen fuente originalmente fue recibida en formato 4:2:2, pero fue sobre-muestreada a formato 4:4:4 para procesamiento YCbCr. En este caso, la imagen 4:2:2 decimada resultante es idéntica a la imagen original.
Posteriormente, la salida de datos YCbCr de la lógica de decimación de crominancia 1186 puede ser escalada utilizando la lógica de escala 1187 antes de ser emitida del bloque de procesamiento YCbCr 904. La función de la lógica de escala 1187 puede ser similar a la funcionalidad de la lógica de escala 709, 710 en el filtro de compensación de agrupación 652 de la unidad de procesamiento de píxel de etapa inicial 150, tal como se analizó anteriormente con referencia a la figura 59. Por ejemplo, la lógica de escala 1187 puede ejecutar escala horizontal y vertical como dos pasos. En una modalidad, un filtro polifase de 5 derivaciones puede ser utilizado para escala vertical, y un filtro polifase de 9 derivaciones puede ser utilizado para escala horizontal. Los filtros polifase de múltiples derivaciones pueden multiplicar píxeles seleccionados de la imagen fuente por un factor de ponderación (por ejemplo, coeficiente de filtro) y después sumar las salidas para formar el píxel de destino. Los píxeles seleccionados pueden ser elegidos dependiendo de la posición del píxel actual y el número de derivaciones de filtros. Por ejemplo, con un filtro vertical de 5 derivaciones, se pueden seleccionar dos píxeles vecinos en cada lado vertical de un píxel actual y, con un filtro horizontal de 9 derivaciones, se pueden seleccionar cuatro píxeles vecinos en cada lado horizontal del píxel actual . Los coeficientes de filtración pueden ser proporcionados desde una tabla de búsqueda, y pueden ser determinados por la posición fraccional entre-píxeles actual. La salida 926 de la lógica de escala 1187 entonces es emitida desde el bloque de procesamiento YCbCr 904.
Volviendo a la figura 98, la señal de salida procesada 926 puede ser enviada a la memoria 108, o, de acuerdo con la modalidad de la circuitería de procesamiento de imagen 32 que se muestra en la figura 7, puede ser emitida desde la lógica de procesamiento de secuencia ISP 82 como la señal de imagen 114 al hardware de despliegue (por ejemplo, pantalla 28) para visualización por un usuario, o a un motor de compresión (por ejemplo, codificador 118) . En algunas modalidades, la señal de imagen 114 puede ser procesada adicionalmente por una unidad de procesamiento de gráficos y/o un motor de compresión y puede ser almacenada antes de ser descomprimida y proporcionada a una pantalla. Adicionalmente , una o más memorias intermedias de cuadro también pueden ser proporcionadas para controlar el almacenamiento intermedio de los datos de imagen que están siendo emitidos a una pantalla, particularmente con respecto a los datos de imagen de video. Además, en una modalidad donde se proporciona lógica de procesamiento de etapa final ISP 120 (por ejemplo, figura 8) , la señal de imagen 114 puede ser enviada corriente abajo para pasos de post-procesamiento adicionales, tal como se analizará en la siguiente sección.
Lógica de procesamiento de etapa final ISP Habiendo descrito la lógica de etapa inicial ISP 80 y el conducto ISP 82 a detalle anteriormente, el presente análisis ahora cambiará el enfoque a la lógica de procesamiento de etapa final ISP 120, la cual se mostró anteriormente en la figura 8. Tal como se analizó antes, la lógica de etapa final ISP 120 generalmente funciona para recibir datos de imágenes procesados proporcionados por el conducto ISP 82 o desde la memoria 108 (señal 124) , y para ejecutar operaciones de post-procesamiento de imágenes adicionales, es decir, antes de emitir los datos de imagen al dispositivo de despliegue 28.
En la figura 134 se muestra un diagrama en bloques que muestra una modalidad de la lógica de etapa final ISP 120. Tal como se ilustra, la lógica de procesamiento de etapa final ISP 120 puede incluir lógica de detección de características 2200, lógica de mapeo de tono local (LTM) 2202, lógica de ajuste de brillantez, contraste y color 2204, lógica de escala 2206, y una unidad de estadísticas de etapa final 2208. La lógica de detección de características 2200 puede incluir lógica de detección de rostros en una modalidad, y se puede configurar para identificar las ubicaciones de los rostros/características faciales en un cuadro de imagen, mostrado aquí por el número de referencia 2201. En otras modalidades, la lógica de detección de características 2200 también se puede configurar para detectar las ubicaciones de otros tipos de características, tales como las esquinas de objetos en el cuadro de imagen. Por ejemplo, estos datos pueden ser utilizados para identificar la ubicación de las características en cuadros de imagen consecutivos a fin de determinar un estimado del movimiento global entre cuadros, el cual entonces puede ser utilizado para ejecutar ciertas operaciones de procesamiento de imagen, tal como registro de imagen. En una modalidad, la identificación de las características de esquinas y similares puede ser particularmente útil para algoritmos que combinan múltiples cuadros de imagen, tal como en algunos algoritmos de generación de imagen de alto rango dinámico (HDR) , así como ciertos algoritmos de combinación de imágenes panorámicas .
Por simplicidad, la lógica de detección de características 2200 se referirá en la siguiente descripción como siendo la lógica de detección de rostros. No obstante, se debiera entender que la lógica 2200 no pretende quedar limitada solo a la lógica de detección de rostros, y se puede configurar para detectar otros tipos de características en lugar o además de las características faciales. Por ejemplo, en una modalidad, la lógica 2200 puede detectar características de esquina, tal como se analizó antes, y la salida 2201 de la lógica de detección de características 2200 puede incluir características de esquina.
La lógica de detección de rostros 2200 se puede configurar para recibir datos de imagen YCC 114 proporcionados por el conducto ISP 82 o puede recibir una imagen de resolución reducida (representada por la señal 2207) desde la lógica de escala 2206, y para detectar la ubicación y posiciones de los rostros y/o características faciales dentro del cuadro de imagen correspondiente a los datos de imagen seleccionados. Tal como se muestra en la figura 134, la entrada a la lógica de detección de rostros 2200 puede incluir un circuito de selección 2196 que recibe' los datos de imagen YCC 114 desde el conducto ISP 82 y la imagen de resolución reducida 2207 desde la lógica de escala 2206. Una señal de control, la cual puede ser proporcionada por la lógica de control ISP 84 (por ejemplo, un procesador que ejecute microprogramación cableada), puede determinar cuál entrada es proporcionada a la lógica de detección de rostros 2200.
La ubicación detectada de los rostros/características faciales, representada aquí por la señal 2201, puede ser proporcionada como datos de retroalimentación a una o más unidades de procesamiento corriente arriba, así como una o más unidades corriente abajo. A manera de ejemplo, los datos 2201 pueden representar ubicaciones en las cuales los rostros o características faciales aparecen dentro del cuadro de imagen presente. En algunas modalidades, los datos 2201 pueden incluir una imagen transformada de resolución reducida, la cual puede proporcionar información adicional para la detección de rostros. Además, la lógica de detección de rostros 2200, en algunas modalidades, puede utilizar un algoritmo de detección facial, tal como el algoritmo de detección de objetos/facial Viola-Jones, o puede utilizar cualquier otro algoritmo, transformada, o técnicas de detección/concordancia de patrones convenientes para la detección de características faciales en una imagen.
En la modalidad ilustrada, los datos de detección de rostros 2201 pueden ser retroalimentados a la lógica de control 84, la cual puede representar un procesador que ejecute microprogramación cableada para controlar la circuitería de procesamiento de imagen ,32. La lógica de control 84, en una modalidad, puede proporcionar los datos 2201 al bucle de control de estadísticas de etapa inicial (por ejemplo, incluyendo las unidades de procesamiento de estadísticas de etapa inicial (142 y 144) de la lógica de etapa inicial ISP 80 de la figura 10) , con lo cual las unidades de procesamiento de estadísticas 142 o 144 pueden utilizar los datos de retroalimentación 2201 para colocar las ventanas apropiadas y/o seleccionar mosaicos particulares para balance automático de blancos, exposición automática, y procesamiento de enfoque automático. Tal como se apreciará, la mejora del color y/o precisión de tono para áreas de una imagen que contiene características faciales puede tener como resultado una imagen que parezca estéticamente más placentera a un observador. Tal como se analizará a continuación, los datos 2201 también pueden ser proporcionados a la lógica LTM 2202, la unidad de estadísticas de etapa final 2208, así como al bloque de codificador/decodificador 118.
La lógica LTM 2202 también puede recibir los datos de imagen YCC 114 desde el conducto ISP 82. Tal como se analizó anteriormente, la lógica LTM 2202 se puede configurar para aplicar mapeo de tonos a los datos de imagen 114. Tal como se apreciará, técnicas de mapeo de tono pueden ser utilizadas en aplicaciones de procesamiento de imagen para mapear un conjunto de valores de píxel a otro. En casos donde las imágenes de entrada y salida tienen la misma precisión de bits, el mapeo de tono puede no ser necesario, aunque algunas modalidades pueden aplicar mapeo de tono sin compresión a fin de mejorar las características de contraste en la imagen de salida (por ejemplo, para hacer que áreas brillantes parezcan más oscuras y áreas oscuras parezcan más brillantes) . No obstante, cuando las imágenes de entrada y salida tienen diferentes precisiones de bit, el mapeo de tono se puede aplicar para mapear los valores de imagen de entrada a valores correspondientes del rango de salida de la imagen de entrada. Por ejemplo, escenas pueden tener un rango dinámico de 25,000:1 o más, mientras que estándares de compresión pueden permitir un rango mucho más bajo (por ejemplo, 256:1) para propósitos de despliegue, y en ocasiones incluso un rango más bajo aún (por ejemplo, 100:1) para impresión.
Por lo tanto, a manera de ejemplo solamente, el mapeo de tono puede ser útil en una situación, tal como en la situación en que los datos de imagen expresados como una precisión de 10 bits o más van a ser emitidos en un formato de precisión inferior, tal como una imagen JPEG de 8 bits. De manera adicional, el mapeo de tono puede ser particularmente útil cuando se aplica a imágenes de alto rango dinámico (HD ) . En procesamiento de imágenes digitales, las imágenes HDR pueden ser generadas adquiriendo múltiples imágenes de una escena a diferentes niveles de exposición y combinando o componiendo las imágenes para generar una imagen que tiene un rango dinámico que es superior a lo que se puede lograr utilizando una sola exposición. Además, en algunos sistemas de generación de imagen, un sensor de imagen (por ejemplo, sensor 90a, 90b) puede ser configurado para adquirir imágenes HDR sin la necesidad de combinar múltiples imágenes para generar una imagen HDR compuesta.
La lógica LT 2202 de la modalidad ilustrada puede utilizar operadores de mapeo de tono local (por ejemplo, que varíen espacialmente) , los cuales pueden ser determinados con base en las características locales dentro del cuadro de imagen. Por ejemplo, los operadores de mapeo de tono local pueden estar basados en región, y pueden cambiar localmente con basé en el contenido dentro de una región particular del cuadro de imagen. A manera de ejemplo solamente, los operadores de mapeo de tono local pueden estar basados en la compresión HD de dominio de gradiente, la reproducción de tono fotográfico, o el procesamiento de imagen Retinex®.
Tal como se puede apreciar, las técnicas de mapeo de tono local, cuando son aplicadas a imágenes, generalmente pueden producir imágenes de salida que tienen características de contraste mejoradas y pueden parecer estéticamente más placenteras a un observador con relación a imágenes procesadas utilizando mapeo de tono global. Las figuras 135 y 136 ilustran algunos de los inconvenientes asociados con el mapeo de tono global. Por ejemplo, haciendo referencia a la figura 135, el gráfico 2400 representa el mapeo de tono de la imagen de entrada que tiene un rango de entrada 2401 a un rango de salida 2403. El rango de tono en la imagen de entrada es representado por la curva 2402, en donde los valores 2402 representan áreas brillantes de la imagen y los valores 2406 representan áreas oscuras de la imagen.
A manera de ejemplo, en una modalidad, el rango 2401 de la imagen de entrada puede tener una precisión de 12 bits (0-4095) , y puede ser mapeada a un rango de salida 2403 que tenga una precisión de 8 bits (0-255, por ejemplo, una imagen JPEG) . La figura 135 muestra un proceso de mapeo de tono lineal, en el cual la curva 2402 es mapeada linealmente a la curva 2410. Tal como se ilustra, el resultado del proceso de mapeo de tono que se muestra en la figura 135 tiene como resultado el rango 2404 correspondiente a las áreas brillantes de la imagen de entrada que se está comprimiendo a un rango más pequeño 2412, y también tiene como resultado el rango 2406 correspondiente a las áreas oscuras de la imagen de entrada que se está comprimiendo a un rango más pequeño 2414. La reducción en el rango de tono para áreas oscuras (por ejemplo, sombras) y áreas brillantes puede impactar de forma negativa las propiedades del contraste, y puede parecer estéticamente desagradable a un observador.
Haciendo referencia a la figura 136, un método para corregir los problemas asociados con la compresión del rango "brillante" 2404 (comprimido al rango 2412) y el rango "oscuro" 2406 (comprimido al rango 2414), tal como se muestra en la figura 176A, es utilizar una técnica de mapeo de tono no lineal. Por ejemplo, en la figura 136, la curva de tono 2402 que representa la imagen de entrada es mapeada utilizando una curva en forma de "S" no lineal (o curva S) 2422. Como resultado del mapeo no lineal, la porción brillante del rango de entrada 2404 es mapeada a la porción brillante del rango de salida 2424 y, de manera similar, la porción oscura del rango de entrada 2406 es mapeada a la porción oscura del rango de salida 2426. Tal como se muestra, los rangos brillante y oscuro 2424 y 2426 de la imagen de salida de la figura 136 son mayores que los rangos brillante y oscuro 2412 y 2414 de la imagen de salida de la figura 135, y por lo tanto conservan más del contenido brillante y oscuro de la imagen de entrada. No obstante, debido al aspecto no lineal (por ejemplo, curva S) de la técnica de mapeo de la figura 136, los valores de rango medio 2428 de la imagen de salida pueden parecer más planos, lo cual también puede ser estéticamente desagradable a un observador.
Por consiguiente, modalidades de la presente divulgación pueden implementar técnicas de mapeo de tono local utilizando operadores de mapeo de tono local para procesar secciones discretas del cuadro de imagen actual, el cual se puede dividir en regiones con base en las características locales dentro de la imagen, tal como las características de brillantez. Por ejemplo, tal como se muestra en la figura 137, una porción 2430 del cuadro de imagen recibido por la lógica de etapa final ISP 120 puede incluir una región brillante 2432 y una región oscura 2434. A manera de ejemplo, la región brillante 2432 puede representar un área de luz de la imagen, tal como un cielo o el horizonte, mientras que el área oscura puede representar una región relativamente más oscura de la imagen, tal como un fondo o panorama. El mapeo de tono local se puede aplicar por separado para cada una de las regiones 2432 y 2434 para producir una imagen de salida que conserva más del rango dinámico de la imagen de entrada con relación a las técnicas de mapeo de tono global antes analizadas, mejorando así el contraste local y proporcionando una imagen de salida que es estéticamente más agradable para un observador.
Un ejemplo de la manera en que se puede implementar el mapeo de tono local en la presente modalidad se muestra a manera de ejemplo en las figuras 138 y 139. Par icularmente, la figura 138 muestra una técnica de mapeo de tono local convencional que, en algunos casos, puede tener como resultado un rango de salida limitado, y la figura 139 muestra un proceso de mapeo de tono local adaptable que se puede implementar mediante la lógica LTM 2202 que puede hacer uso del rango de salida completo, incluso si una porción del rango de entrada no es utilizada por el cuadro de imagen.
Haciendo referencia primero a la figura 138, el gráfico 2440 representa la aplicación del mapeo de tono local a una imagen de entrada de mayor precisión de bit para producir una imagen de salida de menor precisión de bits. Por ejemplo, en el ejemplo ilustrado, los datos de imagen de entrada de mayor precisión de bit puede ser datos de imagen de 12 bits (con 4096 valores de entrada (por ejemplo, valores 0-4095) ) , conforme a lo representado por el rango 2442, que es mapeado en tono para producir una salida de 8 bits (con 256 valores de salida (por ejemplo, 0-255) ) , representada aquí por el rango 244 . Se debiera entender que las profundidades de bits simplemente pretenden proporcionar ejemplos, y no se debiera interpretar como una limitación en manera alguna. Por ejemplo, en otras modalidades, la imagen de entrada puede ser de 8 bits, 10 bits, 14 bits o 16 bits, etcétera, y la imagen de salida puede tener una profundidad de bit que sea mayor que o menor que una precisión de 8 bits.
Aquí, se puede asumir que la región de la imagen sobre la cual se aplica el mapeo de tono local solamente utiliza una porción del rango dinámico de entrada completo, tal como el rango 2448 representado por los valores 0-1023. Por ejemplo, estos valores de entrada pueden corresponder a los valores de la región oscura 2434 mostrada en la figura 137. La figura 138 muestra un mapeo lineal de los 4096 valores de entrada (12 bits) a los 256 valores de salida (8 bits) . Por lo tanto, aunque los valores que varían de 0-4095 son mapeados a los valores 0-255 del rango dinámico de salida 2444, la porción no utilizada 2450 (valores 1024-4095) del rango de entrada completo 2442 es mapeada a la porción 2454 (valores 64-255) del rango de salida 2444, dejando así solamente los valores de salida 0-63 (porción 2452 del rango de salida 2444) disponibles para representar la porción utilizada 2448 (valores 0-1023) del rango de entrada. En otras palabras, esta técnica de mapeo de tono local lineal no toma en cuenta si los valores o rangos de valores no utilizados son mapeados. Esto tiene como resultado que una porción (por ejemplo, 2454) de los valores de salida (por ejemplo, 2444) sea asignada para representar valores de entrada que en realidad no están presentes en la región (por ejemplo, 2434) del cuadro de imagen sobre el cual se está aplicando la operación de mapeo de tono local presente (por ejemplo, gráfico 2440) , reduciendo así los valores de salida disponibles (por ejemplo, 2452) que pueden ser utilizados para expresar los valores de entrada (por ejemplo, rango 2448) presentes en la región actual que se esté procesando.
Con lo anterior en mente, la figura 139 ilustra una técnica de mapeo de tono local que puede ser implementada de acuerdo con modalidades de la presente divulgación. Aquí, antes de ejecutar el mapeo de rango de entrada 2442 (por ejemplo, 12 bits) al rango de salida 2444 (por ejemplo, 8 bits) , la lógica LTM 2202 se puede configurar para primero determinar un rango utilizado del rango de entrada 2442. Por ejemplo, asumiendo que la región es una región generalmente oscura, los valores de entrada correspondientes al color dentro de esa región solamente pueden utilizar un sub-rango, tal como 2448 (por ejemplo, valores 0-1023), del rango completo 2442. Es decir, el sub-rango 2448 representa el rango dinámico real presente en la región particular del cuadro de imagen que se esté procesando. Por lo tanto, debido a que los valores 1024-4095 (sub-rango no utilizado 2450) no están siendo utilizados en esta región, el rango utilizado 2448 primero puede ser mapeado y expandido para utilizar el rango completo 2442, tal como se muestra mediante el proceso de expansión 2472. Es decir, debido a que los valores 1024-4095 no están siendo utilizados dentro de la región actual de la imagen que se está procesando, estos pueden ser utilizados para expresar la porción utilizada (por ejemplo, 0-1023) . Como resultado, la porción utilizada 2448 del rango de entrada puede ser expresada utilizando valores adicionales, aquí aproximadamente tres veces · más valores de entrada adicionales .
A continuación, tal como se muestra mediante el proceso 2474, el rango de entrada utilizado expandido (expandido a los valores 0-4095) posteriormente puede ser mapeado a los valores de salida 0-255 (rango de salida 2444) . Por lo tanto, tal como se muestra en la figura 139, como resultado de primero expandir el rango utilizado 2448 de valores de entrada para hacer uso del rango de entrada completo (0-4095) , el rango utilizado 2448 de los valores de entrada se puede expresar utilizando el rango de salida completo 2444 (valores 0-255) en lugar de únicamente una porción del rango de salida, tal como se muestra en la figura 138.
Antes de continuar, se debiera observar que aunque se refiere como un bloque de mapeo de tono local, la lógica LTM 2202 también se puede configurar para implementar mapeo de tono global en algunos casos. Por ejemplo, en la situación donde el cuadro de imagen incluye una escena de imagen con características generalmente uniformes (por ejemplo, una escena del cielo) , la región sobre la cual es aplicado el mapeo de tono puede incluir todo el cuadro. Es decir, el mismo operador de mapeo de tono puede ser aplicado a todos los píxeles del cuadro. Volviendo a la figura 134, la lógica LTM 2202 también puede recibir los datos 2201 desde la lógica de detección de rostros 2200 y, en algunos casos, puede utilizar estos datos para identificar una o más áreas locales dentro del cuadro de imagen actual al cual se aplica el mapeo de tono. Por lo tanto, el resultado final de la aplicación de una o más de las técnicas de mapeo de tono local antes descritas puede ser una imagen que sea estéticamente más agradable a un observador.
La salida de la lógica LTM 2202 puede ser proporcionada a la lógica de ajuste de brillantez, contraste y color (BCC) 2204. En la modalidad mostrada, la lógica BCC 2204 puede ser implementada generalmente de forma idéntica a la lógica BCC 1184 de la lógica de procesamiento YCbCr 904 del conducto ISP, tal como se muestra en la figura 132, y puede ofrecer funcionalidad generalmente similar para proporcionar control de brillantez, contraste, tono y/o saturación. Por lo tanto, para evitar la redundancia, la lógica BCC 2204 de la presente modalidad no se va a volver a describir aquí, pero se debiera entender que es idéntica a la lógica BCC 1184 previamente descrita de la figura 132.
A continuación, la lógica de escala 2206 puede recibir la salida de la lógica BCC 2204 y puede ser configurada para escalar los datos de imagen que representan el cuadro de imagen actual. Pro ejemplo, cuando el tamaño real o resolución del cuadro de imagen (por ejemplo, en píxeles) es diferente de un tamaño de salida esperado o deseado, la lógica de escala 2206 puede escalar la imagen digital por consiguiente para lograr una imagen de salida del tamaño o resolución deseados. Tal como se muestra, la salida 126 de la lógica de escala 2206 puede ser enviada al dispositivo de despliegue 28 para visualización por un usuario o a la memoria 108. De manera adicional, la salida 126 también puede ser proporcionada a un motor de compresión/descompresión 118 para codificar/decodificar los datos de imagen. Los datos de imagen codificados pueden ser almacenados en un formato comprimido y posteriormente descomprimidos antes de ser desplegados en el dispositivo de despliegue 28.
Además, en algunas modalidades, la lógica de escala 2206 puede escalar los datos de imagen utilizando múltiples resoluciones. A manera de ejemplo, cuando la resolución de imagen de salida deseada es 720p (1280x720 píxeles) , la lógica de escala puede escalar el cuadro de imagen por consiguiente para proporcionar una imagen de salida de 720p, y también puede proporcionar una imagen de resolución inferior que puede funcionar como una imagen de vista previa o croquis. Por ejemplo, una aplicación que corre en un dispositivo, tal como la aplicación de "fotos" disponible en modelos del iPhone® o el iPhoto® y aplicaciones de iMovie®, disponibles en algunos modelos del iPhone®, MacBook®, y computadoras iMc®, todos disponibles de Apple Inc., pueden permitir a los usuarios ver un listado de versiones de vista previa del video o imágenes estáticas almacenadas en el dispositivo electrónico 10. Al momento de seleccionar una imagen o video almacenado, el dispositivo electrónico puede desplegar y/o reproducir la imagen o video seleccionado a plena resolución.
En la modalidad ilustrada, la lógica de escala 2206 también puede proporcionar información 2203 al bloque de estadísticas de etapa final 2208, el cual puede utilizar la lógica de escala 2206 para procesamiento de estadísticas de etapa final. Por ejemplo, en una modalidad, la lógica de estadísticas de etapa final 2208 puede procesar la información de imagen escalada 2203 para determinar uno o más parámetros para modular parámetros de cuantificación asociados con el codificador 118 (por ejemplo, parámetros de cuantificación por macrobloque) , el cual puede ser un codificador-decodificador H .264/JPEG en una modalidad. Por ejemplo, en una modalidad, la lógica de estadísticas de etapa final 2208 puede analizar la imagen por macrobloques para determinar un parámetro o clasificación de contenido de frecuencia para cada macrobloque. Por ejemplo, en algunas modalidades, la lógica de estadísticas de etapa final 2206 puede determinar una clasificación de frecuencia para cada macrobloque utilizando técnicas tales como compresión de ondas pequeñas, transformadas rápidas de Fourier, o transformadas de coseno discreto (DCTs) . Al utilizar las clasificaciones de frecuencia, el codificador 118 puede modular los parámetros de cuantificación para lograr, por ejemplo, una calidad de imagen generalmente uniforme a través de los macrobloques que constituyen el cuadro de imagen. Por ejemplo, si una alta varianza en el contenido de frecuencia está presente en un macrobloque particular, la compresión se puede aplicar a ese macrobloque de manera más agresiva. Tal como se muestra en la figura 134, la lógica de escala 2206 también puede proporcionar una imagen de resolución reducida, representada aquí por el número de referencia 2207, a la lógica de detección de rostros 2200 por medio de una entrada a la circuitería de selección 2196, la cual puede ser un multiplexor o algún otro tipo conveniente de lógica de selección. Por lo tanto, la salida 2198 de la circuitería de selección 2196 puede ser la entrada YCC 114 del conducto ISP 82 o la imagen YCC escala hacia abajo 2207 de la lógica de escala 2206.
En algunas modalidades, los datos de estadísticas de etapa final y/o el codificador 118 se pueden configurar para predecir y detectar cambios de escena. Por ejemplo, la lógica de estadísticas de etapa final 2208 se puede configurar para adquirir estadísticas de movimiento. El codificador 118 puede intentar predecir cambio de escena mediante la comparación de las estadísticas de movimiento proporcionadas por la lógica de estadísticas de etapa final 2208, la cual puede incluir ciertas métricas (por ejemplo, brillantez) de un cuadro actual a un cuadro previo. Cuando la diferencia en la métrica es mayor que un umbral particular, se predice un cambio de escena, la lógica de estadísticas de etapa final 2208 puede enviar la señal de un cambio de escena. En algunas modalidades, se pueden utilizar predicciones ponderadas, ya que un umbral fijo no siempre puede ser ideal debido a la diversidad de imágenes que pueden ser capturadas y procesadas por el dispositivo 10. De manera adicional, múltiples valores de umbral también pueden ser utilizados dependiendo de ciertas características de los datos de imagen que se estén procesando.
Tal como se analizó anteriormente, los datos de detección fácil 2201 también pueden ser proporcionados a la lógica de estadísticas de etapa final 2208 y el codificador 118, tal como se muestra en la figura 134. Aquí, los datos de estadística de etapa final y/o el codificador 118 pueden utilizar los datos de detección facial 2201 junto con la información de frecuencia de macrobloque durante el procesamiento de etapa final. Por ejemplo, se puede reducir la cuantificación para macrobloques que corresponden a la ubicación de rostros dentro del cuadro de imagen, tal como se determina utilizando los datos de detección fácil 2201, mejorando así la apariencia visual y la calidad general de los rostros y características faciales codificadas presentes en una imagen desplegada utilizando el dispositivo de despliegue 28.
Haciendo referencia ahora a la figura 140, un diagrama en bloques que muestra una vista más detallada de la lógica LTM 2202 se ilustra de acuerdo con una modalidad. Tal como se muestra, el mapeo de tono es aplicado después de primero convertir los datos de imagen YC1C2 114 del conducto ISP 82 en un espacio de color lineal RGB corregido gama. Por ejemplo, tal como se muestra en la figura 140, la lógica 2208 primero puede convertir los datos YC1C2 (por ejemplo, YCbCr) a un espacio de color sRGB no lineal. En la presente modalidad, la lógica LTM 2202 se puede configurar para recibir datos de imagen YCC que tengan diferentes características de submuestreo. Por ejemplo, tal como se muestra mediante las entradas 114 a una lógica de selección 2205 (por ejemplo, un multiplexor) , la lógica LTM 2202 se puede configurar para recibir datos completos YCC 4:4:4, datos sub-muestreados croma YCC 4:2:2), o datos sub-muestreados croma YCC 4:2:0. Para formatos de datos de imagen YCC sub-muestreados, la lógica de conversión ascendente 2209 se puede aplicar para convertir los datos de imagen YCC sub-muestreados a formato YCC 4:4:4 antes de la conversión mediante la lógica 2208 al espacio de color sRGB.
Los datos de imagen sRGB convertidos, representados aquí por el número de referencia 2210, entonces pueden ser convertidos en el espacio de color RGBiineai, que es un espacio de color corregido gama, mediante la lógica 2212. Posteriormente, los datos de imagen RGBiineai convertidos 2214 son proporcionados a la lógica LTM 2216, la cual puede ser configurada para identificar regiones (por ejemplo, 2432 y 2434 de la figura 137) en el cuadro de imagen que comparte brillantez similar y para aplicar mapeo de tono local a esas regiones. Tal como se muestra en la presente modalidad, la lógica LTM 2216 también puede recibir parámetros 2201 a partir de la lógica de detección de rostros 2200 (figura 134) la cual puede indicar la ubicación y posiciones dentro del cuadro de imagen actual en donde están presentes los rostros y/o características faciales.
Después que se aplica el mapeo de tono local a los datos RGBiineai 2214 , los datos de imagen procesados 2220 entonces son convertidos nuevamente al espacio de color YC1C2 primero utilizando la lógica 2222 para convertir los datos de imagen RGBiineai procesados 2220 nuevamente al espacio de color sRGB, y después utilizando la lógica 2226 para convertir los datos de imagen sRGB 2224 nuevamente al espacio de color YC1C2. Por lo tanto, los datos YC1C2 convertidos 2228 (con mapeo de tono aplicado) pueden ser emitidos desde la lógica LTM 2202 y proporcionados a la lógica BCC 2204, tal como se analizó anteriormente en la figura 134. Tal como se apreciará, la conversión de los datos de imagen 114 en los diversos espacios de color utilizados dentro del bloque de lógica LTM de etapa final ISP 2202 pueden ser implementados utilizando técnicas similares a la conversión de los datos de imagen RGB con interpolación cromática en el espacio de color YC1C2 en la lógica de procesamiento RGB 902 del conducto ISP 82, tal como se analizó anteriormente en la figura 125. Además, en modalidades donde el YCC es convertido hacia arriba (por ejemplo, utilizando la lógica 2209), los datos YC1C2 pueden ser convertidos hacia abajo (sub-muestreados) por la lógica 2226. De manera adicional, en otras modalidades, este sub-muestreo/conversión hacia abajo también se puede ejecutar mediante la lógica de escala 2206 en lugar de la lógica 2226.
Aunque la presente modalidad muestra un proceso de conversión que convierte el espacio de color YCC al espacio de color sRGB y después al espacio de color sRGBiineal, otras modalidades pueden utilizar conversiones de espacio de color con diferencia o pueden aplicar una transformada aproximada utilizando una función de potencia. Es decir, en algunas modalidades, la conversión a un espacio de color aproximadamente lineal puede ser suficiente para propósitos de mapeo de tono local. Por lo tanto, al utilizar una función de transformada aproximada, la lógica de conversión de dichas modalidades puede ser al menos parcialmente simplificada (por ejemplo, al eliminar la necesidad de tablas de búsqueda de conversión de espacio de color). En una modalidad adicional, el mapeo de tono local también se puede ejecutar en un espacio de color que es perceptivamente mejor al ojo humano, tal como un espacio de color Lab.
Las figuras 141 y 142 muestran gráficos de flujo que muestran métodos para procesar datos de imagen utilizando lógica de procesamiento de etapa final ISP 120, de acuerdo con la modalidad divulgada. Haciendo referencia primero a la figura 141, se muestra un método 2230 que ilustra de manera general el procesamiento de los datos de imagen por la lógica de procesamiento de etapa final ISP 120. Comenzando en el paso 2232, el método 2230 recibe los datos de imagen YCC desde el conducto ISP 82. Por ejemplo, tal como se analizó antes, los datos de imagen YCC recibidos pueden ser en el espacio de color de luminancia y crominancia YCbCr. A continuación, el método 2232 se puede ramificar a cada uno de los pasos 2234 y 2238. En el paso 2234, los datos de imagen YCC recibidos pueden ser procesados para detectar las posiciones/ubicaciones de los rostros y/o características faciales dentro de un cuadro de imagen actual. Por ejemplo, con referencia a la figura 134, este paso se puede ejecutar utilizando la lógica de detección de rostros 2200, la cual se puede configurar para implementar un algoritmo de detección facial, tal como Viola-Jones. Posteriormente, en el paso 2236, los datos de detección de rostros (por ejemplo, datos 2201) pueden ser proporcionados a la lógica de control ISP 84 como retroalimentación a las unidades de procesamiento de estadísticas de etapa inicial ISP 142 o 144) , así como al bloque de lógica LTM 2202, la lógica de estadísticas de etapa final 2208, y la lógica del codificador/decodificador 118, tal como se muestra en la figura 134.
En el paso 2238, el cual puede ocurrir al menos parcialmente de forma concurrente con el paso 2234, los datos de imagen YCC recibidos desde el conducto ISP 82 son procesados para aplicar mapeo de tono. Posteriormente, el método 2230 continua al paso 2240, en donde los datos de imagen YCC (por ejemplo, 2228) son procesados adicionalmente para ajustes de brillantez, contraste y color (por ejemplo, utilizando la lógica BCC 2204) . Posteriormente, en el paso 2242, se aplica la escala a los datos de imagen del paso 2240 a fin de escalar los datos de imagen a uno o más del tamaño o resolución deseados. De manera adicional, tal como se mencionó antes, en algunas modalidades, la conversión o sub-muestreo del espacio de color también se puede aplicar (por ejemplo, en modalidades donde los datos YCC son muestreados hacia arriba para mapeo de tono local) para producir una imagen de salida que tenga el muestreo deseado. Finalmente, en el paso 2244, los datos de imagen YCC escalados pueden ser desplegados para visualización (por ejemplo, utilizando el dispositivo de despliegue 28) o pueden ser almacenados en la memoria 108 para visualizacion posterior.
La figura 142 ilustra el paso de mapeo de tono 2238 de la figura 141 con mayor detalle. Por ejemplo, el paso 2238 puede comenzar con el subpaso 2248, en el cual los datos de imagen YCC recibidos en el paso 2232 primero son convertidos al espacio de color sRGB. Tal como se analizó anteriormente y como se muestra en la figura 140, algunas modalidades pueden permitir la conversión hacia arriba de los datos de imagen YCC sub-muestreados antes de la conversión al espacio sRGB . Posteriormente, los datos de imagen sRGB son convertidos a un espacio de color lineal gama-corregido, RGBiineai, en el subpaso 2250. A continuación, en el subpaso 2252, se aplica mapeo de tono a los datos GBiineai mediante la lógica de mapeo de tono 2216 del bloque de lógica LT de etapa final ISP 2202. Los datos de imagen mapeados de tono del subpaso 2252 pueden entonces ser convertidos del espacio de color RGBiineai nuevamente al espacio de color sRGB, tal como se muestra en el subpaso 2254. Posteriormente, en el subpaso 2256, los datos de imagen sRGB pueden ser convertidos nuevamente al espacio de color YCC, y el paso 2238 del método 2230 puede continuar al paso 2240, tal como se analizó en la figura 141. Tal como se mencionó antes, el proceso 2238 mostrado en la figura 142 simplemente pretende ser un proceso para aplicar conversión de espacio de color en una manera conveniente para mapeo de tono local. En otras modalidades, las conversiones lineales aproximadas también se pueden aplicar en lugar de los pasos de conversión ilustrados.
Tal como se entenderá, las diversas técnicas de procesamiento de imagen antes descritas y relacionadas con la detección y corrección de píxeles defectuosos, corrección de sombreado de lente, interpolación cromática y afinamiento de imagen, entre otras, son proporcionadas aquí a manera de ejemplo solamente. Por consiguiente, se debiera entender que la presente divulgación no debiera ser interpretada como limitada únicamente a los ejemplos antes proporcionados. De hecho, la lógica ejemplar mostrada aquí se puede someter a un número de variaciones y/o características adicionales en otras modalidades. Además, se debiera apreciar que las técnicas antes analizadas pueden ser implementadas en cualquier manera conveniente. Por ejemplo, los componentes de la circuitería de procesamiento de imagen 32, y particularmente el bloque de etapa inicial ISP 80 y el bloque de conducto ISP 82 pueden ser implementados utilizando hardware (por ejemplo, circuitería convenientemente configurada) , software (por ejemplo a través de un programa de computadora incluyendo un código ejecutable almacenado en uno o más medios legibles por computadora tangibles) , o a través del uso de una combinación de elementos de hardware y software .
Las modalidades específicas antes descritas se han mostrado a manera de ejemplo, y se debiera entender que estas modalidades pueden ser susceptibles a diversas modificaciones y formas alternativas. Además se debiera entender que las reivindicaciones no pretenden quedar limitadas a las formas particulares descritas, sino que más bien pretenden cubrir todas las modificaciones, equivalentes y alternativas que caen dentro del espíritu y alcance de esta divulgación.

Claims (20)

NOVEDAD DE LA INVENCION Habiendo descrito el presente invento, se considera como una novedad y, por lo tanto, se reclama como prioridad lo contenido en las siguientes: REIVINDICACIONES
1.- Un sistema de procesamiento de señal de imagen que comprende : un conducto de procesamiento de imagen configurado para recibir un cuadro de datos de imagen en bruto que comprende píxeles adquiridos utilizando un sensor de imagen digital y para procesar el cuadro de imagen en bruto mediante la aplicación de interpolación cromática para producir un cuadro correspondiente de datos de imagen RGB a pleno color y posteriormente convertir los datos de imagen RGB en un cuadro correspondiente de datos de imagen de luminancia y crominancia; una unidad de procesamiento de etapa final configurada para recibir el cuadro de datos de imagen de luminancia y crominancia, y para procesar el cuadro de imagen de luminancia y crominancia utilizando lógica de detección de rostro configurada para detectar las ubicaciones dentro del cuadro recibido que contienen características faciales y para proporcionar las ubicaciones detectadas como un conjunto de datos de detección facial; y una unidad de procesamiento de etapa inicial acoplada corriente arriba desde el conducto de procesamiento de imagen y que tiene un motor de recopilación de estadísticas de etapa inicial configurado para procesar el cuadro de imagen en bruto para determinar al menos uno de estadística de balance automático de blancos, estadísticas de exposición automática, estadísticas de enfoque automático, y estadísticas de detección de parpadeo antes que el cuadro de imagen en bruto sea procesado por el conducto de procesamiento de imagen y la unidad de procesamiento de etapa final, en donde los datos de detección facial son retroalimentados al motor de recopilación de estadísticas de etapa inicial, y en donde el motor de recopilación de estadísticas de etapa inicial está configurado para colocar una o más ventanas de recopilación de estadísticas para determinar las estadísticas de balance automático de blancos utilizando los datos de detección facial.
2. - El sistema de procesamiento de señal de imagen de conformidad con la reivindicación 1, caracterizado porque la lógica de detección de rostro está configurada para detectar las ubicaciones de las características faciales utilizando un algoritmo de detección de objetos.
3. - El sistema de procesamiento de señal de imagen de conformidad con la reivindicación 1, caracterizado porque el sensor de imagen digital comprende un arreglo de filtro de color Bayer, y en donde los datos de imagen en bruto comprenden datos de imagen Bayer.
4. - Un método para procesar datos de imagen utilizando lógica de procesamiento de etapa final de un sistema de procesamiento de señal de imagen (ISP) que comprende : recibir un cuadro de imagen que comprende datos de imagen de luminancia y crominancia, el cuadro de imagen ha sido previamente procesado por un conducto de procesamiento de imagen del sistema ISP; aplicar mapeo de tono local al cuadro de imagen utilizando la lógica de mapeo de tono; y utilizar lógica de escala para escalar el cuadro de imagen a una primera resolución de salida y a una segunda resolución de salida después de aplicar el mapeo de tono local, en donde la primera resolución de salida corresponde a una resolución de visualización deseada de un dispositivo de despliegue configurado para desplegar el cuadro de imagen, y en donde la segunda resolución de salida corresponde a una resolución de vista previa que es menor que la resolución de visualización deseada.
5. - El método de conformidad con la reivindicación 4, caracterizado porque la aplicación del mapeo de tono local al cuadro de imagen comprende dividir el cuadro de imagen en secciones basadas en características locales dentro del cuadro de imagen y procesar cada una de las secciones mediante : identificar un rango dinámico disponible total del cuadro de imagen; identificar un rango dinámico de salida disponible total ; determinar el rango dinámico real de los valores de luminancia en una sección actual del cuadro de imagen ,- expandir el rango dinámico real de la sección actual mediante el mapeo del rango dinámico real al rango dinámico disponible total en caso que el rango dinámico real sea menor que el rango dinámico disponible total; y mapear el rango dinámico real expandido al rango dinámico de salida disponible total.
6. - El método de conformidad con la reivindicación 4, que además comprende aplicar al menos uno de ajustes de brillantez, contraste y color (BCC) al cuadro de imagen utilizando lógica de ajuste BCC después de aplicar el mapeo de tono local pero antes de aplicar la escala utilizando la lógica de escala.
7. - Un sistema de procesamiento de señal de imagen que comprende : una unidad de procesamiento de píxel de etapa final configurada para recibir un cuadro de datos de imagen, en donde la unidad de procesamiento de píxel de etapa final comprende : lógica de detección de rostro configurada para recibir y procesar el cuadro de datos de imagen y para emitir un conjunto de datos de detección facial indicativos de la ubicación de las características faciales dentro del cuadro de datos de imagen; lógica de mapeo de tono configurada para aplicar mapeo de tono al cuadro de datos de imagen; lógica de escala configurada para escalar el cuadro de datos de imagen a una primera resolución de salida y a una segunda resolución de salida después de aplicar mapeo de tono local, en donde la primera resolución de salida corresponde a una resolución de visualizacion deseada de un dispositivo de despliegue configurado para desplegar el cuadro de datos de imagen, y en donde la segunda resolución de salida corresponde a una resolución de vista previa que es menor que la resolución de visualizacion deseada; y una unidad de procesamiento de estadísticas de etapa final configurada para procesar los datos de imagen escalados para recopilar estadísticas de frecuencia para los datos de imagen escalados; y lógica de codificador/decodificador configurada para aplicar compresión a los datos de imagen escalados con base al menos parcialmente en las estadísticas de frecuencia.
8. - El sistema de procesamiento de señal de imagen de conformidad con la reivindicación 7, caracterizado porque la estadística de etapa final procesa los datos de imagen escalados como una pluralidad de macrobloques , y en donde la recopilación de las estadísticas de frecuencia comprende determinar un parámetro de frecuencia indicativo del contenido de frecuencia para cada macrobloque.
9. - El sistema de procesamiento de señal de imagen de conformidad con la reivindicación 8, caracterizado porque el parámetro de frecuencia es determinado para cada macrobloque utilizando al menos una de una transformada de coseno discreto, una transformada rápida de Fourier, o compresión de ondas pequeñas, o alguna combinación de los mismos .
10. - El sistema de procesamiento de señal de imagen de conformidad con la reivindicación 8, caracterizado porque, para cada macrobloque, la lógica de codificador/decodificador modula al menos un parámetro de cuantificación con base en el parámetro de frecuencia asociado con el macrobloque.
11. - El sistema de procesamiento de señal de imagen de conformidad con la reivindicación 8, caracterizado porque los datos de detección facial son proporcionados al menos a una de la unidad de procesamiento de estadísticas de etapa final y la lógica de codificador/decodificador, y en donde la lógica de codificador/decodificador está configurada para reducir la cuantificación para macrobloques en el cuadro de imagen que corresponden a las ubicaciones de las características faciales, conforme a lo indicado por los datos de detección facial .
12.- El sistema de procesamiento de señal de imagen de conformidad con la reivindicación 7, caracterizado porque la unidad de procesamiento de píxel de etapa final comprende lógica de selección configurada para recibir el cuadro de datos de imagen y al menos un cuadro de imagen escalado a partir de la unidad de escala, y en donde la lógica de selección está configurada para seleccionar uno de cualquiera del cuadro de imagen o el cuadro de imagen escalado y para proporcionar el cuadro de imagen seleccionado a la lógica de detección de rostro.
13.- Un dispositivo electrónico, que comprende: un sensor de imagen digital; una interfaz de sensor configurada para comunicarse con el sensor de imagen digital; un dispositivo de memoria; un dispositivo de despliegue configurado para desplegar una representación visual de una escena de imagen correspondiente a datos de imagen en bruto adquiridos por el sensor de imagen digital; y un subsistema de procesamiento de señal de imagen que comprende : un conducto de procesamiento de imagen configurado para recibir un cuadro de datos de imagen en bruto que comprende píxeles adquiridos utilizando el sensor de imagen digital, realizar la interpolación cromática del cuadro de imagen en bruto para producir un cuadro de imagen RGB a pleno color correspondiente, y convertir los datos de imagen RGB a pleno color en un cuadro de imagen de luminancia y crominancia correspondiente; y una unidad de procesamiento de etapa final configurada para recibir y procesar el cuadro de imagen de luminancia y crominancia utilizando al menos una de lógica de detección de rostro, lógica de mapeo de tono local, y lógica de escala, y para recopilar estadísticas de imagen utilizando un motor de estadísticas de etapa final, en donde las estadísticas de imagen incluyen estadísticas de frecuencia que pueden ser utilizadas para determinar parámetros de cuantificación para codificar el cuadro de imagen de luminancia y crominancia utilizando un codificador.
14.- El dispositivo electrónico de conformidad con la reivindicación 13, caracterizado porque la unidad de procesamiento de etapa final procesa el cuadro de imagen de luminancia y crominancia utilizando lógica de mapeo de tono local convirtiendo el cuadro de luminancia y crominancia a partir del espacio de color de luminancia y crominancia en al menos un espacio de color RGB aproximadamente lineal, y aplicando mapeo de tono local al espacio de color RGB aproximadamente lineal.
15.- El dispositivo electrónico de conformidad con la reivindicación 14, caracterizado porque la conversión de los datos de luminancia y crominancia en al menos un espacio de color RGB aproximadamente lineal comprende aplicar una transformada aproximada con base en una función de energía.
16.- El dispositivo electrónico de conformidad con la reivindicación 15, caracterizado porque si los datos de luminancia y crominancia comprenden datos de luminancia y crominancia en un formato de datos sub-muestreados YCC 4:2:2 o YCC 4:2:0, los datos de luminancia y crominancia primero son convertidos hacia arriba a un formato de datos completo YCC 4:4:4 antes de ser convertido al menos al espacio de color RGB aproximadamente lineal.
17.- El dispositivo electrónico de conformidad con la reivindicación 14, caracterizado porque la conversión de los datos de luminancia y crominancia al menos al espacio de color RGB aproximadamente lineal comprende convertir los datos de luminancia y crominancia a un espacio de color sRGB y después convertir los datos sRGB a un espacio de color SRGBuneal-
18. - El dispositivo electrónico de conformidad con la reivindicación 13, caracterizado porque el sensor de imagen digital comprende al menos uno de una cámara digital integrada con el dispositivo electrónico, una cámara digital externa acoplada al dispositivo electrónico a través de un puerto de entrada/salida, o alguna combinación de los mismos.
19. - El dispositivo electrónico de conformidad con la reivindicación 13, que además comprende al menos uno de una computadora de escritorio, una computadora tipo laptop, una computadora tipo tableta, un teléfono celular móvil, un reproductor de medios portátil, o cualquier combinación de los mismos.
20. - El dispositivo electrónico de conformidad con la reivindicación 13, caracterizado porque las estadísticas de imagen comprenden estadísticas de movimiento, y en donde la unidad de procesamiento de etapa final está configurada para ejecutar detección de escena con base en las estadísticas de movimiento.
MX2013003446A 2010-09-30 2011-08-31 Sistema y metodo para procesar datos de imagen utilizando un procesador de señal de imagen con logica de procesamiento de etapa final. MX2013003446A (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/894,833 US8786625B2 (en) 2010-09-30 2010-09-30 System and method for processing image data using an image signal processor having back-end processing logic
PCT/US2011/049986 WO2012047425A1 (en) 2010-09-30 2011-08-31 System and method for processing image data using an image signal processor having back-end processing logic

Publications (1)

Publication Number Publication Date
MX2013003446A true MX2013003446A (es) 2013-09-13

Family

ID=44675819

Family Applications (1)

Application Number Title Priority Date Filing Date
MX2013003446A MX2013003446A (es) 2010-09-30 2011-08-31 Sistema y metodo para procesar datos de imagen utilizando un procesador de señal de imagen con logica de procesamiento de etapa final.

Country Status (10)

Country Link
US (1) US8786625B2 (es)
EP (1) EP2622867A1 (es)
KR (1) KR101320804B1 (es)
CN (1) CN102547301B (es)
AU (1) AU2011312756B2 (es)
BR (1) BR112013007333A2 (es)
MX (1) MX2013003446A (es)
RU (1) RU2542928C2 (es)
TW (1) TWI433532B (es)
WO (1) WO2012047425A1 (es)

Families Citing this family (133)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101448308B1 (ko) * 2008-02-04 2014-10-08 삼성전자주식회사 썸네일 이미지 생성 방법 및 장치
US8488055B2 (en) 2010-09-30 2013-07-16 Apple Inc. Flash synchronization using image sensor interface timing signal
CN103155535B (zh) * 2010-10-18 2016-06-08 杜比实验室特许公司 使用局部色域定义的图像处理方法和设备
JP5195942B2 (ja) * 2011-01-24 2013-05-15 ブラザー工業株式会社 走査型画像表示装置
CA2771851C (en) 2011-04-12 2018-07-24 Research In Motion Limited Camera flash for improved color balance
CN104025013B (zh) * 2011-12-29 2017-08-08 英特尔公司 在线性存储格式和y瓦片化存储格式之间转置图像数据
US8988578B2 (en) 2012-02-03 2015-03-24 Honeywell International Inc. Mobile computing device with improved image preview functionality
US9743057B2 (en) 2012-05-31 2017-08-22 Apple Inc. Systems and methods for lens shading correction
US9077943B2 (en) 2012-05-31 2015-07-07 Apple Inc. Local image statistics collection
US9105078B2 (en) 2012-05-31 2015-08-11 Apple Inc. Systems and methods for local tone mapping
US9031319B2 (en) 2012-05-31 2015-05-12 Apple Inc. Systems and methods for luma sharpening
US8817120B2 (en) 2012-05-31 2014-08-26 Apple Inc. Systems and methods for collecting fixed pattern noise statistics of image data
US9332239B2 (en) 2012-05-31 2016-05-03 Apple Inc. Systems and methods for RGB image processing
US9014504B2 (en) 2012-05-31 2015-04-21 Apple Inc. Systems and methods for highlight recovery in an image signal processor
US8953882B2 (en) 2012-05-31 2015-02-10 Apple Inc. Systems and methods for determining noise statistics of image data
US9142012B2 (en) 2012-05-31 2015-09-22 Apple Inc. Systems and methods for chroma noise reduction
US8917336B2 (en) 2012-05-31 2014-12-23 Apple Inc. Image signal processing involving geometric distortion correction
US11089247B2 (en) 2012-05-31 2021-08-10 Apple Inc. Systems and method for reducing fixed pattern noise in image data
US9025867B2 (en) 2012-05-31 2015-05-05 Apple Inc. Systems and methods for YCC image processing
US8872946B2 (en) 2012-05-31 2014-10-28 Apple Inc. Systems and methods for raw image processing
JP2014052552A (ja) * 2012-09-07 2014-03-20 Sharp Corp メモリ制御装置、携帯端末、メモリ制御プログラムおよびコンピュータ読み取り可能な記録媒体
US9854138B2 (en) * 2012-09-20 2017-12-26 Gyrus Acmi, Inc. Fixed pattern noise reduction
US9058541B2 (en) 2012-09-21 2015-06-16 Fondation De L'institut De Recherche Idiap Object detection method, object detector and object detection computer program
US9201821B2 (en) * 2012-09-27 2015-12-01 Apple Inc. Interrupt timestamping
TWI495862B (zh) * 2012-10-04 2015-08-11 Pixart Imaging Inc 檢測影像感測器的方法以及相關裝置
US9741098B2 (en) * 2012-10-12 2017-08-22 Nvidia Corporation System and method for optimizing image quality in a digital camera
CN103871352A (zh) * 2012-12-11 2014-06-18 华东师范大学 一种三维显示控制装置
US20140173086A1 (en) * 2012-12-13 2014-06-19 Telemetry Limited Method and apparatus for determining digital media visibility
WO2014177172A1 (en) 2013-04-29 2014-11-06 Hewlett-Packard Development Company, L P Color image processing
US9888240B2 (en) * 2013-04-29 2018-02-06 Apple Inc. Video processors for preserving detail in low-light scenes
US9462179B2 (en) 2013-05-20 2016-10-04 Omnivision Technologies, Inc. Image sensor with fast intra-frame focus
US9124823B2 (en) 2013-05-20 2015-09-01 Omnivision Technologies, Inc. Image sensor with fast intra-frame focus
CN103593828A (zh) * 2013-11-13 2014-02-19 厦门美图网科技有限公司 一种局部添加滤镜的图像处理方法
KR102128468B1 (ko) * 2014-02-19 2020-06-30 삼성전자주식회사 복수의 이미지 신호 프로세서들을 포함하는 이미지 처리 장치 및 이미지 처리 방법
EP2913993B1 (en) * 2014-02-26 2016-02-17 Axis AB Method and control unit for controlling exposure of a camera
CN104933689B (zh) * 2014-03-19 2018-01-16 炬芯(珠海)科技有限公司 一种图像信号处理方法及装置
WO2015174613A1 (ko) * 2014-05-13 2015-11-19 한국과학기술원 타임 레지스터, 이를 이용한 시간 연산 장치, 시간 연산 방법, 시간-디지털 변환 장치 및 시간-디지털 변환 방법
JP6612056B2 (ja) * 2014-05-16 2019-11-27 株式会社半導体エネルギー研究所 撮像装置、及び監視装置
US10136141B2 (en) * 2014-06-11 2018-11-20 Qualcomm Incorporated Determining quantization parameter (QP) values and delta QP values for palette coded blocks in video coding
JP6301759B2 (ja) * 2014-07-07 2018-03-28 東芝テック株式会社 顔識別装置及びプログラム
US9462189B2 (en) 2014-07-31 2016-10-04 Apple Inc. Piecewise perspective transform engine
US9386234B2 (en) 2014-07-31 2016-07-05 Apple Inc. Auto filter extent management
US9219870B1 (en) * 2014-07-31 2015-12-22 Apple Inc. Sensor data rescaler for image signal processing
US9762919B2 (en) 2014-08-28 2017-09-12 Apple Inc. Chroma cache architecture in block processing pipelines
CN105430429B (zh) * 2014-09-18 2019-09-13 青岛海尔电子有限公司 一种媒体数据的优化方法和装置
US9779471B2 (en) * 2014-10-01 2017-10-03 Qualcomm Incorporated Transparent pixel format converter
US10531103B2 (en) 2014-10-16 2020-01-07 Purdue Research Foundation Video coding using a saliency map
KR102251444B1 (ko) 2014-10-21 2021-05-13 삼성전자주식회사 그래픽 프로세싱 유닛, 이를 포함하는 그래픽 프로세싱 시스템, 및 이를 이용한 안티 에일리어싱 방법
CN105635634A (zh) * 2014-11-07 2016-06-01 中兴通讯股份有限公司 一种实现视频图像处理的方法及装置
CN104581098B (zh) * 2014-12-01 2016-09-28 北京思比科微电子技术股份有限公司 一种lens shading自适应的处理方法
CN104484418B (zh) * 2014-12-17 2017-10-31 中国科学技术大学 一种基于双分辨率的特征量化方法及系统
SG10201900004UA (en) * 2014-12-19 2019-02-27 Hfi Innovation Inc Methods of palette based prediction for non-444 color format in video and image coding
US10257542B1 (en) * 2015-03-25 2019-04-09 Amazon Technologies, Inc. Compression encoding of images
US9697796B2 (en) * 2015-03-26 2017-07-04 Intel Corporation Adaptive linear luma domain video pipeline architecture
RU2596610C1 (ru) * 2015-06-16 2016-09-10 Федеральное государственное унитарное предприятие "Государственный научно-исследовательский институт авиационных систем" Способ поиска и обнаружения объекта
US9787922B2 (en) 2015-08-31 2017-10-10 Apple Inc. Pixel defect preprocessing in an image signal processor
US9754182B2 (en) * 2015-09-02 2017-09-05 Apple Inc. Detecting keypoints in image data
US10440299B2 (en) 2015-09-04 2019-10-08 Apple Inc. Correcting pixel defects based on defect history in an image processing pipeline
CN105142300A (zh) * 2015-09-23 2015-12-09 广州硅能照明有限公司 一种无频闪led交流驱动装置和方法
US20170142313A1 (en) * 2015-11-16 2017-05-18 Microsoft Corporation Image sensor system
KR102410016B1 (ko) * 2015-12-16 2022-06-16 삼성전자주식회사 이미지 처리 장치 및 이미지 처리 시스템
KR102512828B1 (ko) 2016-01-22 2023-03-22 삼성전자주식회사 이벤트 신호 처리 방법 및 장치
RU2632415C2 (ru) * 2016-02-11 2017-10-04 Общество С Ограниченной Ответственностью "Яндекс" Способ и система сохранения в памяти пиксельных данных, связанных с графическим объектом
GB2554633B (en) 2016-06-24 2020-01-22 Imperial College Sci Tech & Medicine Detecting objects in video data
US9992467B2 (en) * 2016-06-30 2018-06-05 Apple Inc. Parallel computer vision and image scaling architecture
KR20180014644A (ko) 2016-08-01 2018-02-09 삼성전자주식회사 터치 인식 방법 및 이를 수행하는 전자 장치
WO2018026155A1 (en) * 2016-08-01 2018-02-08 Samsung Electronics Co., Ltd. Method and electronic device for recognizing touch
US10504487B2 (en) * 2016-10-14 2019-12-10 Apple Inc. Ambient and content adaptive pixel manipulation
CN107977929B (zh) * 2016-10-21 2021-02-23 中国电信股份有限公司 图像超分辨率处理方法和装置
US10218952B2 (en) 2016-11-28 2019-02-26 Microsoft Technology Licensing, Llc Architecture for rendering high dynamic range video on enhanced dynamic range display devices
US10176561B2 (en) * 2017-01-27 2019-01-08 Microsoft Technology Licensing, Llc Content-adaptive adjustments to tone mapping operations for high dynamic range content
US10104334B2 (en) 2017-01-27 2018-10-16 Microsoft Technology Licensing, Llc Content-adaptive adjustment of display device brightness levels when rendering high dynamic range content
US10467509B2 (en) * 2017-02-14 2019-11-05 Microsoft Technology Licensing, Llc Computationally-efficient human-identifying smart assistant computer
US10187637B2 (en) 2017-03-07 2019-01-22 Filmic Inc. Inductive micro-contrast evaluation method
US10904531B2 (en) * 2017-03-23 2021-01-26 Qualcomm Incorporated Adaptive parameters for coding of 360-degree video
TWI833248B (zh) * 2017-04-06 2024-02-21 美商松下電器(美國)知識產權公司 解碼方法及編碼方法
TW201842768A (zh) * 2017-04-06 2018-12-01 美商松下電器(美國)知識產權公司 編碼裝置、解碼裝置、編碼方法及解碼方法
TWI812378B (zh) * 2017-04-06 2023-08-11 美商松下電器(美國)知識產權公司 解碼裝置、編碼裝置及電腦可讀取之非暫時性媒體
WO2018194618A1 (en) * 2017-04-20 2018-10-25 Hewlett-Packard Development Company, L.P. Combining lookup tables
US10489878B2 (en) * 2017-05-15 2019-11-26 Google Llc Configurable and programmable image processor unit
US11107177B1 (en) * 2017-06-16 2021-08-31 Amazon Technologies, Inc. Data/metadata synchronization using metadata queue statistics
CN107463349B (zh) * 2017-07-01 2020-08-04 广州视源电子科技股份有限公司 色盘建立方法及颜色定位方法
CN107634819A (zh) * 2017-07-14 2018-01-26 西安万像电子科技有限公司 传感器数据的传输方法、设备及系统
US10412410B2 (en) * 2017-08-14 2019-09-10 Google Llc Compound motion-compensated prediction
CN107610132B (zh) * 2017-08-28 2021-12-31 西北民族大学 一种古籍文档图像污渍去除方法
US11361729B2 (en) * 2017-09-08 2022-06-14 Apple Inc. Burn-in statistics and burn-in compensation
DE102017217723A1 (de) * 2017-10-05 2019-04-11 Robert Bosch Gmbh Vorrichtung und Verfahren zur Korrektur von mindestens einem Übertragungsparameter
CN107680064A (zh) * 2017-10-31 2018-02-09 长沙准光里电子科技有限公司 计算机可读存储介质
US10552707B2 (en) * 2017-12-07 2020-02-04 Qualcomm Incorporated Methods and devices for image change detection
CN108198152B (zh) * 2018-02-07 2020-05-12 Oppo广东移动通信有限公司 图像处理方法和装置、电子设备、计算机可读存储介质
CN112055860A (zh) * 2018-06-05 2020-12-08 惠普发展公司,有限责任合伙企业 从种子图像生成经修改的图像
EP3808073A4 (en) * 2018-06-12 2021-05-26 Ela Kliots Shapira METHOD AND SYSTEM OF AUTOMATIC REAL-TIME SEGMENTATION OF HIGH-DEFINITION VIDEO STREAM IMAGES INTO CONSTITUENTS AND OF EDITING ITEMS IN EACH IMAGE TO SIMULTANEOUSLY CREATE MULTIPLE DIFFERENT LINEAR VIEWS FROM THE SAME
CN110858895B (zh) * 2018-08-22 2023-01-24 虹软科技股份有限公司 一种图像处理方法和装置
JP2021193762A (ja) * 2018-09-28 2021-12-23 ソニーグループ株式会社 受信装置、および受信方法、並びに、画像処理システム
US10957024B2 (en) 2018-10-30 2021-03-23 Microsoft Technology Licensing, Llc Real time tone mapping of high dynamic range image data at time of playback on a lower dynamic range display
CN109348146B (zh) * 2018-10-31 2021-03-02 上海集成电路研发中心有限公司 一种图像传感器的静态坏点校正装置及其校正方法
CN111199515B (zh) * 2018-11-16 2024-03-19 西安诺瓦星云科技股份有限公司 缩放器、图像缩放方法及装置
US11138765B2 (en) * 2018-12-10 2021-10-05 Gopro, Inc. Non-linear color correction
RU2715292C1 (ru) * 2019-01-31 2020-02-26 ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ КАЗЕННОЕ ВОЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ "Военная академия Ракетных войск стратегического назначения имени Петра Великого" МИНИСТЕРСТВА ОБОРОНЫ РОССИЙСКОЙ ФЕДЕРАЦИИ Способ и устройство обработки оптической информации
CN109859142B (zh) * 2019-02-19 2021-06-22 广州视源电子科技股份有限公司 图像亮度的调节方法、装置、计算机设备和存储介质
US11405535B2 (en) 2019-02-28 2022-08-02 Qualcomm Incorporated Quad color filter array camera sensor configurations
US20220182682A1 (en) * 2019-03-18 2022-06-09 Google Llc Frame overlay for encoding artifacts
CN109889417B (zh) * 2019-03-19 2020-08-04 每步科技(上海)有限公司 通信组件开关控制系统及方法
CN110347362B (zh) * 2019-07-05 2021-05-11 南京芯驰半导体科技有限公司 图像显示控制方法及装置
RU2742871C1 (ru) * 2020-02-19 2021-02-11 Федеральное государственное казенное военное образовательное учреждение высшего образования "Военный учебно-научный центр Военно-воздушных сил "Военно-воздушная академия имени профессора Н.Е. Жуковского и Ю.А. Гагарина" (г. Воронеж) Министерства обороны Российской Федерации Способ двумерной дискретной фильтрации объектов заданного размера
US11665273B2 (en) * 2020-03-03 2023-05-30 Samsung Electronics Co., Ltd. System and method for image color management
CN113453001A (zh) * 2020-03-24 2021-09-28 合肥君正科技有限公司 一种利用isp信息自适应分配qp提高h264编码效率的方法
WO2021194501A1 (en) * 2020-03-27 2021-09-30 Hewlett-Packard Development Company, L.P. Alternate operating systems
WO2021203286A1 (en) * 2020-04-08 2021-10-14 Qualcomm Incorporated High dynamic range (hdr) video rotation animation
KR20210142398A (ko) * 2020-05-18 2021-11-25 에스케이하이닉스 주식회사 로컬 톤 맵핑 회로, 이미지 센싱 장치 및 그 동작방법
TWI738379B (zh) * 2020-06-10 2021-09-01 聯詠科技股份有限公司 影像處理電路及其影像位移方法
CN111815661B (zh) * 2020-07-14 2024-02-02 合肥工业大学 基于Retinex分解的铅笔画图像生成方法及装置
US11388348B2 (en) * 2020-07-20 2022-07-12 Samsung Electronics Co., Ltd. Systems and methods for dynamic range compression in multi-frame processing
CN112017191B (zh) * 2020-08-12 2023-08-22 西北大学 基于注意力机制的肝脏病理图像分割模型建立及分割方法
US11736804B2 (en) * 2020-09-07 2023-08-22 Mediatek Inc. Method and apparatus for generating high dynamic range frame through white balance compensation that uses white balance gain table generated from combining multiple sets of white balance gain settings
CN112206508A (zh) * 2020-09-25 2021-01-12 腾讯科技(深圳)有限公司 一种图像检测方法、装置及计算机可读存储介质
CN112381743A (zh) * 2020-12-01 2021-02-19 影石创新科技股份有限公司 图像处理方法、装置、设备和存储介质
US11653105B2 (en) * 2020-12-02 2023-05-16 Texas Instmments Incorporated Intensity separated local white balance correction
CN115225828B (zh) * 2021-04-17 2024-04-23 Oppo广东移动通信有限公司 前置图像信号处理装置及图像信息传输方法
CN115604590A (zh) 2021-07-07 2023-01-13 三星电子株式会社(Kr) 图像信号处理器、图像信号处理器的操作方法和包括图像信号处理器的图像传感器设备
CN115731829A (zh) * 2021-08-30 2023-03-03 广州视源电子科技股份有限公司 一种画质调节方法、存储介质及显示设备
US11509836B1 (en) 2021-12-29 2022-11-22 Insight Direct Usa, Inc. Dynamically configured processing of a region of interest dependent upon published video data selected by a runtime configuration file
US11704891B1 (en) 2021-12-29 2023-07-18 Insight Direct Usa, Inc. Dynamically configured extraction, preprocessing, and publishing of a region of interest that is a subset of streaming video data
CN114339045B (zh) * 2021-12-30 2024-06-07 京东方科技集团股份有限公司 图像处理系统和显示装置
CN114897697A (zh) * 2022-05-18 2022-08-12 北京航空航天大学 一种面向相机成像模型的超分辨率重建方法
CN114913096B (zh) * 2022-06-10 2024-04-23 中国科学院长春光学精密机械与物理研究所 一种特征初始化的非均匀校正方法及其系统
US11778167B1 (en) 2022-07-26 2023-10-03 Insight Direct Usa, Inc. Method and system for preprocessing optimization of streaming video data
CN115426449B (zh) * 2022-07-30 2023-07-11 荣耀终端有限公司 一种拍照方法和终端
CN116091329B (zh) * 2022-08-31 2023-10-20 荣耀终端有限公司 图像处理方法、装置、设备及存储介质
CN115546614B (zh) * 2022-12-02 2023-04-18 天津城建大学 一种基于改进yolov5模型的安全帽佩戴检测方法
US20240202867A1 (en) * 2022-12-14 2024-06-20 Samsung Electronics Co., Ltd. Demosaicing method and demosaicing device
CN116930955B (zh) * 2023-09-15 2023-12-22 名商科技有限公司 一种高速导航自动驾驶系统
CN117176933B (zh) * 2023-11-02 2024-01-23 摩尔线程智能科技(北京)有限责任公司 一种图像信号处理方法及装置、电子设备和存储介质

Family Cites Families (107)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4475172A (en) 1978-05-30 1984-10-02 Bally Manufacturing Corporation Audio/visual home computer and game apparatus
US4589089A (en) 1978-05-30 1986-05-13 Bally Manufacturing Corporation Computer-peripheral interface for a game apparatus
US4799677A (en) 1983-09-02 1989-01-24 Bally Manufacturing Corporation Video game having video disk read only memory
US4979738A (en) 1983-12-06 1990-12-25 Midway Manufacturing Corporation Constant spatial data mass RAM video display system
US4682360A (en) 1983-12-22 1987-07-21 Frederiksen Jeffrey E Video transmission system
US4605961A (en) 1983-12-22 1986-08-12 Frederiksen Jeffrey E Video transmission system using time-warp scrambling
US4742543A (en) 1983-12-22 1988-05-03 Frederiksen Jeffrey E Video transmission system
US4694489A (en) 1983-12-22 1987-09-15 Frederiksen Jeffrey E Video transmission system
US4743959A (en) 1986-09-17 1988-05-10 Frederiksen Jeffrey E High resolution color video image acquisition and compression system
DE69018231T2 (de) 1989-08-08 1995-11-09 Sanyo Electric Co Kamera mit selbsttätiger scharfeinstellung.
US5227863A (en) 1989-11-14 1993-07-13 Intelligent Resources Integrated Systems, Inc. Programmable digital video processing system
EP0445451A1 (en) * 1990-03-07 1991-09-11 International Business Machines Corporation Image processor for producing antialiased images
US5272529A (en) 1992-03-20 1993-12-21 Northwest Starscan Limited Partnership Adaptive hierarchical subband vector quantization encoder
US5247355A (en) 1992-06-11 1993-09-21 Northwest Starscan Limited Partnership Gridlocked method and system for video motion compensation
DE69334349D1 (de) 1992-09-01 2011-04-21 Apple Inc Verbesserte Vektorquatisierung
US6122411A (en) 1994-02-16 2000-09-19 Apple Computer, Inc. Method and apparatus for storing high and low resolution images in an imaging device
US5694227A (en) 1994-07-15 1997-12-02 Apple Computer, Inc. Method and apparatus for calibrating and adjusting a color imaging system
US5764291A (en) 1994-09-30 1998-06-09 Apple Computer, Inc. Apparatus and method for orientation-dependent camera exposure and focus setting optimization
US5496106A (en) 1994-12-13 1996-03-05 Apple Computer, Inc. System and method for generating a contrast overlay as a focus assist for an imaging device
US5640613A (en) 1995-04-14 1997-06-17 Apple Computer, Inc. Corrective lens assembly
US6011585A (en) 1996-01-19 2000-01-04 Apple Computer, Inc. Apparatus and method for rotating the display orientation of a captured image
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
US5809178A (en) 1996-06-11 1998-09-15 Apple Computer, Inc. Elimination of visible quantizing artifacts in a digital image utilizing a critical noise/quantizing factor
US6031964A (en) 1996-06-20 2000-02-29 Apple Computer, Inc. System and method for using a unified memory architecture to implement a digital camera device
US5991465A (en) 1996-08-29 1999-11-23 Apple Computer, Inc. Modular digital image processing via an image processing chain with modifiable parameter controls
US6028611A (en) 1996-08-29 2000-02-22 Apple Computer, Inc. Modular digital image processing via an image processing chain
US6157394A (en) 1996-08-29 2000-12-05 Apple Computer, Inc. Flexible digital image processing via an image processing chain with modular image processors
US5790705A (en) 1996-09-13 1998-08-04 Apple Computer, Inc. Compression techniques for substantially lossless digital image data storage
US6141044A (en) 1996-09-26 2000-10-31 Apple Computer, Inc. Method and system for coherent image group maintenance in memory
US6151069A (en) * 1997-11-03 2000-11-21 Intel Corporation Dual mode digital camera for video and still operation
US6198514B1 (en) 1998-02-27 2001-03-06 Apple Computer, Inc. Color misconvergence measurement using a common monochrome image
US6686957B1 (en) * 1999-03-31 2004-02-03 Cirrus Logic, Inc. Preview mode low resolution output system and method
US6549214B1 (en) * 1999-12-31 2003-04-15 General Electric Company Automatic scaling of display for image management system
US6618045B1 (en) * 2000-02-04 2003-09-09 Microsoft Corporation Display device with self-adjusting control parameters
JP2001281529A (ja) 2000-03-29 2001-10-10 Minolta Co Ltd デジタルカメラ
US6954193B1 (en) 2000-09-08 2005-10-11 Apple Computer, Inc. Method and apparatus for correcting pixel level intensity variation
JP2002094992A (ja) 2000-09-19 2002-03-29 Sony Corp 符号化データ長検出装置とその方法および画像符号化装置
US7869067B2 (en) 2000-10-20 2011-01-11 Visioneer, Inc. Combination scanner and image data reader system including image management and software
US6745012B1 (en) 2000-11-17 2004-06-01 Telefonaktiebolaget Lm Ericsson (Publ) Adaptive data compression in a wireless telecommunications system
US7170938B1 (en) 2001-08-21 2007-01-30 Cisco Systems Canada Co. Rate control method for video transcoding
US6959044B1 (en) 2001-08-21 2005-10-25 Cisco Systems Canada Co. Dynamic GOP system and method for digital video encoding
AU2002351417A1 (en) * 2001-12-21 2003-07-30 Polycom, Inc. Motion wake identification and control mechanism
JP4007052B2 (ja) * 2002-05-07 2007-11-14 セイコーエプソン株式会社 画像処理制御データ更新装置
CN100335964C (zh) 2002-08-07 2007-09-05 松下电器产业株式会社 聚焦装置
US7136073B2 (en) * 2002-10-17 2006-11-14 Canon Kabushiki Kaisha Automatic tone mapping for images
US7277595B1 (en) 2003-01-06 2007-10-02 Apple Inc. Method and apparatus for digital image manipulation to remove image blemishes
US7257278B2 (en) * 2003-02-26 2007-08-14 Hewlett-Packard Development Company, L.P. Image sensor for capturing and filtering image data
US7310371B2 (en) 2003-05-30 2007-12-18 Lsi Corporation Method and/or apparatus for reducing the complexity of H.264 B-frame encoding using selective reconstruction
US7327786B2 (en) 2003-06-02 2008-02-05 Lsi Logic Corporation Method for improving rate-distortion performance of a video compression system through parallel coefficient cancellation in the transform
US7158668B2 (en) * 2003-08-01 2007-01-02 Microsoft Corporation Image processing using linear light values and other image processing improvements
RU2358319C2 (ru) * 2003-08-29 2009-06-10 Самсунг Электроникс Ко., Лтд. Способ и устройство для фотореалистического трехмерного моделирования лица на основе изображения
US7324595B2 (en) 2003-09-22 2008-01-29 Lsi Logic Corporation Method and/or apparatus for reducing the complexity of non-reference frame encoding using selective reconstruction
US7492375B2 (en) * 2003-11-14 2009-02-17 Microsoft Corporation High dynamic range image viewing on low dynamic range displays
US7602849B2 (en) 2003-11-17 2009-10-13 Lsi Corporation Adaptive reference picture selection based on inter-picture motion measurement
EP1534016A3 (en) * 2003-11-21 2007-03-07 Matsushita Electric Industrial Co., Ltd. Using motion vectors and the occurrence of coefficient quantization levels to drive a noise removal image postprocessing
US7362804B2 (en) 2003-11-24 2008-04-22 Lsi Logic Corporation Graphical symbols for H.264 bitstream syntax elements
US7345708B2 (en) 2003-12-23 2008-03-18 Lsi Logic Corporation Method and apparatus for video deinterlacing and format conversion
US7362376B2 (en) 2003-12-23 2008-04-22 Lsi Logic Corporation Method and apparatus for video deinterlacing and format conversion
US7515765B1 (en) 2004-01-30 2009-04-07 Apple Inc. Image sharpness management
US7231587B2 (en) 2004-03-29 2007-06-12 Lsi Corporation Embedded picture PSNR/CRC data in compressed video bitstream
US8462850B2 (en) * 2004-07-02 2013-06-11 Qualcomm Incorporated Motion estimation in video compression systems
US7620103B2 (en) 2004-12-10 2009-11-17 Lsi Corporation Programmable quantization dead zone and threshold for standard-based H.264 and/or VC1 video encoding
US7612804B1 (en) 2005-02-15 2009-11-03 Apple Inc. Methods and apparatuses for image processing
US20060222243A1 (en) * 2005-04-02 2006-10-05 Newell Martin E Extraction and scaled display of objects in an image
US7949044B2 (en) 2005-04-12 2011-05-24 Lsi Corporation Method for coefficient bitdepth limitation, encoder and bitstream generation apparatus
JP4526445B2 (ja) * 2005-06-15 2010-08-18 オリンパス株式会社 撮像装置
JP2007005879A (ja) * 2005-06-21 2007-01-11 Konica Minolta Photo Imaging Inc 画像出力装置、画像入出力システム、撮像装置およびプログラム
US8135068B1 (en) * 2005-07-19 2012-03-13 Maxim Integrated Products, Inc. Method and/or architecture for motion estimation using integrated information from camera ISP
US8031766B2 (en) 2005-08-02 2011-10-04 Lsi Corporation Performance adaptive video encoding with concurrent decoding
US8045618B2 (en) 2005-08-05 2011-10-25 Lsi Corporation Method and apparatus for MPEG-2 to VC-1 video transcoding
US7903739B2 (en) 2005-08-05 2011-03-08 Lsi Corporation Method and apparatus for VC-1 to MPEG-2 video transcoding
US8155194B2 (en) 2005-08-05 2012-04-10 Lsi Corporation Method and apparatus for MPEG-2 to H.264 video transcoding
US8208540B2 (en) 2005-08-05 2012-06-26 Lsi Corporation Video bitstream transcoding method and apparatus
US7881384B2 (en) 2005-08-05 2011-02-01 Lsi Corporation Method and apparatus for H.264 to MPEG-2 video transcoding
WO2007024351A2 (en) * 2005-08-26 2007-03-01 Idt Corporation Region of interest tracking and integration into a video codec
US7596280B2 (en) 2005-09-29 2009-09-29 Apple Inc. Video acquisition with integrated GPU processing
TWI285500B (en) 2005-11-11 2007-08-11 Primax Electronics Ltd Auto focus method for digital camera
US7522173B1 (en) * 2006-02-23 2009-04-21 Nvidia Corporation Conversion of data in an sRGB format to a compact floating point format
RU2329535C2 (ru) * 2006-05-24 2008-07-20 Самсунг Электроникс Ко., Лтд. Способ автоматического кадрирования фотографий
US8275045B2 (en) 2006-07-12 2012-09-25 Qualcomm Incorporated Video compression using adaptive variable length codes
US8970680B2 (en) 2006-08-01 2015-03-03 Qualcomm Incorporated Real-time capturing and generating stereo images and videos with a monoscopic low power mobile device
US7773127B2 (en) 2006-10-13 2010-08-10 Apple Inc. System and method for RAW image processing
US7893975B2 (en) 2006-10-13 2011-02-22 Apple Inc. System and method for processing images using predetermined tone reproduction curves
JP4254841B2 (ja) * 2006-10-20 2009-04-15 ソニー株式会社 撮像装置、撮像方法、画像処理装置、画像処理方法および画像処理プログラム
US7463340B2 (en) * 2007-03-28 2008-12-09 Honeywell International Inc. Ladar-based motion estimation for navigation
US20080292219A1 (en) * 2007-05-24 2008-11-27 Gary Keall Method And System For An Image Sensor Pipeline On A Mobile Imaging Device
JP2009017306A (ja) * 2007-07-05 2009-01-22 Olympus Corp 画像表示装置及びそれを用いた撮像装置
CN101082992A (zh) * 2007-07-06 2007-12-05 浙江大学 实时高动态范围图像的绘制和显示方法
US9830691B2 (en) * 2007-08-03 2017-11-28 The University Of Akron Method for real-time implementable local tone mapping for high dynamic range images
KR101023945B1 (ko) 2007-08-08 2011-03-28 주식회사 코아로직 Jpeg 캡쳐 시간 단축을 위한 영상 처리 장치 및 그영상 처리 장치에서 jpeg 캡쳐 방법
US20090317017A1 (en) * 2008-06-20 2009-12-24 The Hong Kong University Of Science And Technology Image characteristic oriented tone mapping for high dynamic range images
WO2009064537A1 (en) * 2007-11-15 2009-05-22 Marvell World Trade Ltd. Method and system for noise management for spatial processing in digital image/video capture systems
JP5584200B2 (ja) * 2008-05-01 2014-09-03 ウッドウェルディング・アクチェンゲゼルシャフト 組織中にアンカー固定を確立するための装置および方法
US8405727B2 (en) 2008-05-01 2013-03-26 Apple Inc. Apparatus and method for calibrating image capture devices
EP2286595A1 (en) * 2008-06-16 2011-02-23 Dolby Laboratories Licensing Corporation Rate control model adaptation based on slice dependencies for video coding
US20090316961A1 (en) * 2008-06-21 2009-12-24 Microsoft Corporation Method for tagging image content
JP5266957B2 (ja) * 2008-08-21 2013-08-21 パナソニック株式会社 欠陥画素検出装置、撮像装置、および欠陥画素検出方法
US8059892B1 (en) * 2008-10-01 2011-11-15 Hewlett-Packard Development Company, L.P. Image enhancement method and apparatus
KR101553850B1 (ko) 2008-10-21 2015-09-17 에스케이 텔레콤주식회사 동영상 부호화/복호화 장치 및 그를 위한 적응적 가중치를 사용하는 적응 중첩 블록 움직임 보상 방법 및 장치
NO329897B1 (no) * 2008-12-19 2011-01-24 Tandberg Telecom As Fremgangsmate for raskere ansiktsdeteksjon
CN102473295B (zh) * 2009-06-29 2016-05-04 汤姆森特许公司 基于区的色调映射
US8346009B2 (en) * 2009-06-29 2013-01-01 Thomson Licensing Automatic exposure estimation for HDR images based on image statistics
US8487791B2 (en) * 2010-02-18 2013-07-16 Research In Motion Limited Parallel entropy coding and decoding methods and devices
US8405736B2 (en) * 2010-04-07 2013-03-26 Apple Inc. Face detection using orientation sensor data
US8766999B2 (en) * 2010-05-20 2014-07-01 Aptina Imaging Corporation Systems and methods for local tone mapping of high dynamic range images
US20120007875A1 (en) * 2010-07-12 2012-01-12 International Business Machines Corporation Multiple Monitor Video Control
US20120069143A1 (en) * 2010-09-20 2012-03-22 Joseph Yao Hua Chu Object tracking and highlighting in stereoscopic images

Also Published As

Publication number Publication date
KR20120107041A (ko) 2012-09-28
WO2012047425A1 (en) 2012-04-12
WO2012047425A8 (en) 2013-05-02
KR101320804B1 (ko) 2013-11-01
US8786625B2 (en) 2014-07-22
RU2542928C2 (ru) 2015-02-27
RU2013119999A (ru) 2014-11-10
BR112013007333A2 (pt) 2016-07-05
AU2011312756A1 (en) 2013-05-02
TWI433532B (zh) 2014-04-01
CN102547301A (zh) 2012-07-04
EP2622867A1 (en) 2013-08-07
AU2011312756B2 (en) 2015-06-04
US20120081385A1 (en) 2012-04-05
TW201233158A (en) 2012-08-01
CN102547301B (zh) 2015-11-25

Similar Documents

Publication Publication Date Title
KR101320804B1 (ko) 백엔드 프로세싱 로직을 가지는 이미지 신호 프로세서를 이용하여 이미지 데이터를 프로세싱하기 위한 시스템 및 방법
EP2622839B1 (en) Flash synchronization using image sensor interface timing signal
KR101295977B1 (ko) 이미지 신호 처리 시스템에서 오디오 및 비디오 데이터를 동기화하기 위한 기술들
KR101296035B1 (ko) 미가공 이미지 데이터를 프로세싱하기 위한 이미지 신호 프로세서 라인 버퍼 구성
KR101320818B1 (ko) 이미지 신호 처리를 위한 오버플로우 제어 기술들
US20120081577A1 (en) Image sensor data formats and memory addressing techniques for image signal processing

Legal Events

Date Code Title Description
FG Grant or registration