CN1520580A - 用于增强数据解析度的方法和设备 - Google Patents

用于增强数据解析度的方法和设备 Download PDF

Info

Publication number
CN1520580A
CN1520580A CNA018151043A CN01815104A CN1520580A CN 1520580 A CN1520580 A CN 1520580A CN A018151043 A CNA018151043 A CN A018151043A CN 01815104 A CN01815104 A CN 01815104A CN 1520580 A CN1520580 A CN 1520580A
Authority
CN
China
Prior art keywords
susceptibility
feature
data
signals
susceptibility feature
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA018151043A
Other languages
English (en)
Inventor
Sk
S·K·纳亚尔
˹��ϣķ
S·G·纳拉希姆汉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Columbia University in the City of New York
Original Assignee
Columbia University in the City of New York
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 Columbia University in the City of New York filed Critical Columbia University in the City of New York
Publication of CN1520580A publication Critical patent/CN1520580A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N7/00Computing arrangements based on specific mathematical models
    • G06N7/01Probabilistic graphical models, e.g. probabilistic networks
    • 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/4007Scaling of whole images or parts thereof, e.g. expanding or contracting based on interpolation, e.g. bilinear interpolation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/117Filters, e.g. for pre-processing or post-processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/154Measured or subjectively estimated visual quality after decoding, e.g. measurement of distortion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Computational Mathematics (AREA)
  • Molecular Biology (AREA)
  • Algebra (AREA)
  • Probability & Statistics with Applications (AREA)
  • Image Processing (AREA)
  • Studio Devices (AREA)
  • Color Television Image Signal Generators (AREA)
  • Length Measuring Devices By Optical Means (AREA)

Abstract

提供了一种用于增强多种数据(如图像数据)的解析度的算法。所增强的数据可以是用某种局部相异敏感度样式(如Bayer型彩色拼图、曝光度水平拼图或彩色和曝光度水平组合拼图)采样的数据。解析度增强算法使用一幅样本图像的高解析度与低解析度版本来“学习”(即优化)一组从低解析度数据到高解析度数据的映射的参数。该映射可以由一个多项式模型构成。对多幅样本图像重复该学习程序。而后可以用所学习的映射来处理其它低解析度图像,以获得相应的较高解析度图像。所学习的映射提供了优于常规插值技术的解析度增强。

Description

用于增强数据解析度的方法和设备
                         相关申请参照
本申请要求对题为“用于动态范围彩色成像的设备和方法”的美国临时专利申请(序列编号60/216395,2000年7月6日提交)的优先权,该申请完整引入以作参考。
                   关于联邦资助研究或开发的说明
本发明部分在来自国家科学基金信息技术研究奖金(编号IIS-00-85864)的美国政府资助下完成。因此,美国政府可在本发明中拥有某些权利。
                         发明背景
图像处理的一个共同目的是从一组给定的输入数据中获得所可能的最高图像质量。图像质量一般以“解析度”来判断,解析度一般指组成图像的数据的准确和精确度,可以包括空间解析度(如,每个单位区域或每幅图像的像素),每个像素的特征的精确和准确度(如,亮度和/或色彩的动态范围),和/或每段单位时间的图像帧数量(如,对于视频应用)。传统图像处理算法一般忽略所处理的数据的外在的但与之相关的信息与知识。其结果是,用某种传统图像处理算法产生的图像的解析度就被减低了。特别是,尽管理论上输入图像可以实质地具有任何特征,但多数图像的特征受到支配所成像物体的物理法则的限制。而且,尽管理论上一个物体可以具有几乎任何形状,但某些形状可能比其它的形状更经常地出现。
举例而言,尽管理论上一幅图像有可能包含一个亮度脉冲,即一个无穷亮的无穷小点,但这种情况在实际生活中不会发生。而且,真实物体的图像经常充满简单的几何形状,如直线、矩形、椭圆、平面和光滑球面。实际上很少有一个真实的物理场景的图像是主要由一组以完全随机方式分布的完全随机形状组成的。然而,传统的图像处理算法极大地忽略了前述的支配多数图像的实际限制。
一种用于增强动态范围的传统方法是顺序地使用不同的曝光度捕捉同一场景的多幅图像。对每幅图像的曝光度通过改变成像光学器件的光圈或图像感测器的曝光时间来控制。高曝光的图像(即使用大光圈或长曝光时间捕捉的图像)总是趋向于在亮场景区域过于饱和,但在暗的区域捕捉较准确。相反,低曝光的图像(即使用小光圈或短曝光时间捕捉的图像)总是趋向于在亮区域较少饱和,但在暗的区域可能太暗及太多噪声。这种高曝光与低曝光图像的互补性质使它们可以组合成一幅高动态范围的图像。这种方法可以通过利用所获得图像计算成像***的辐射测度响应函数来进一步加强。
以上方法更适于静态场景而非移动场景,因为为获得好的效果,成像***、场景物体与物体的光最好在以不同曝光度顺序捕捉图像时保持恒定。但是,在有些情况下,固定场景的要求是通过使用多个成像***来补偿。在这样的方法中,使用光束分离器来产生场景的光学图像的多份拷贝。每一份拷贝由一个图像感测器来探测,图像感测器的曝光度使用光学衰减器或通过将感测器的曝光时间设定成一个特定的值来预设。每个感测器的曝光度设为不同的值。这一方法具有实时产生高动态范围图像的优点。实时成像使场景物体和/或成像***在捕捉时可以移动,而不会影响对多个图像拷贝的处理。缺点是这一方法太昂贵,因为需要多个图像感测器、用于对齐所有获得图像的精密光学器件和用于捕捉与处理多幅图像的额外硬件。
另一种用于高动态范围成像的方法使用一种特殊的CCD设计。在这一方法中,每个感测器单元包括两个具有不同尺寸因而具有不同传感能力的隐藏井的传感元件。当感测器对准场景时,就在每个单元中产生两种测量,在读出图像前,这些测量在芯片中组合起来。但是,这一技术太昂贵,因为需要制作复杂的CCD图像传感器。而且,所得到图像的空间解析度会减小两倍,因为两个传感元件占据的空间与在具单个传感元件单元的图像感测器中两个像素所占据的空间数量相同。况且,为了在将信号送出芯片以作进一步处理前组合每个感测器中两个传感元件的输出,这一技术需要额外的芯片电子器件。
还提出了一种用于高动态范围成像的“自适应像素”方法。这样一种方法使用一个固态图像传感器,其中每个像素包含一个测量将隐藏井充满电荷所需时间的计算元件。由于井的容量对所有像素都相同,充满一个井所需要的时间就与射到相应像素上的光线的强度成比例。所记录的时间值被读出并转换成一幅高动态范围图像。在有些情况下,这一方法可以提供增强的动态范围。但是,尽管已实现了一种32×32单元的设备,可能很难将该技术扩展到高解析度而不招致很高的制作成本。而且,由于在暗场景区域曝光时间总是趋向于很大,这一技术对动作模糊可能具有相对高的敏感度。
图像数据还可以以与图像像素相关的偏振数据的形式来捕捉。特别是,已提出了在一个感测器阵列的每个元件前放置一个偏振滤镜。举例而言,可以在覆盖一个感测器阵列的单个彩色滤镜上增加单个偏振滤镜。在偏振滤镜下的感测器的输出可以用来估计射到感测器附近的光的偏振性。但是,这一技术牺牲了空间解析度,因为就偏振数据而言,其将一个像素周围的整个区域处理为一个像素。
                         发明内容
因而本发明的一个目的是提供一种图像处理算法,这种算法能利用关于可能由其所处理的图像的典型特征的信息。
本发明的一个进一步的目的是提供一种图像处理算法,这种算法能利用前述信息来增强数据的解析度。
这些以及其它目的通过本发明的以下方面来达到。
如本发明的一个方面所述,一种用于产生增强解析度数据的方法包括:(1)接收用以某种局部相异的测量样式排列的多个敏感度特征所产生的第一组数据;以及(2)用某种模型来处理这第一组数据,从而产生第二组数据,该模型具有用某种学习过程来确定的第一个模型参数。
如本发明的另外一个方面所述,一种用于产生增强解析度数据的方法包括:(1)接收代表至少一个变量的第一个取值的第一个数据,该至少一个变量在至少一个维度上的第一个位置具有该第一个取值;(2)接收代表该至少一个变量的第二个取值的第二个数据,该至少一个变量在该至少一个维度的第二个位置具有该第二个取值;以及(3)用某种多项式模型来处理这第一和第二个数据,从而产生至少第三个数据,该多项式模型具有:(a)控制该多项式模型运行于第一个数据的第一个多项式系数,以及(b)控制该多项式模型运用于第二个数据的第二个多项式系数,其中该第一个和第二个多项式系数中的至少一个是用某种学习过程来确定的。
如本发明的另外一个方面所述,一种用于测量的方法包括:(1)执行包含对第一个信号组的至少一次测量的第一组测量,该第一个信号组包含来自至少一个维度的第一个区域的至少一个信号,该第一组测量具有关于第一个信号组的第一和第二个敏感度特征,该第一个敏感度特征具有第一种特征类型,而该第二个敏感度特征具有第二种特征类型;(2)执行包含对第二个信号组的至少一次测量的第二组测量,该第二个信号组包含来自该至少一个维度的第二个区域的至少一个信号,该第二组测量具有关于第二个信号组的第一个敏感度特征,还具有关于第二个信号组的第三个敏感度特征,该第三个敏感度特征具有第二种特征类型;以及(3)执行包含对第三个信号组的至少一次测量的第三组测量,该第三个信号组包含来自该至少一个维度的第三个区域的至少一个信号,该第三组测量具有关于第三个信号组的第四个敏感度特征,该第四个敏感度特征具有第一种特征类型。
如本发明的还有另外一个方面所述,一种用于测量的方法包括:(1)执行包含对第一个信号组的至少一次测量的第一组测量,该第一个信号组包含来自至少一个维度的第一个区域的至少一个信号,该第一组测量具有关于第一个信号组的第一、第二和第三个敏感度特征,该第一个敏感度特征具有第一种特征类型,该第二个敏感度特征具有第二种特征类型,而该第三个敏感度特征具有第三种特征类型;以及(2)执行包含对第二个信号组的至少一次测量的第二组测量,该第二个信号组包含来自该至少一个维度的第二个区域的至少一个信号,该第二组测量具有关于第二个信号组的第一个敏感度特征,还具有关于第二个信号组的第四个和第五个敏感度特征,该第四个敏感度特征具有第二种特征类型,而该第五个敏感度特征具有第三种特征类型。
                         附图说明
通过下面的详细描述以及显示本发明说明性实施例的附图,本发明进一步的目的、特点和优点将更为明显。这些附图包括:
图1是一幅说明如本发明所述的一个用于增强数据解析度的示例性程序的框图;
图2是一幅说明如本发明所述的一个示例性感测器敏感度样式的图;
图3是一幅说明如本发明所述的一个用于增强数据解析度的示例性程序的框图;
图4是一幅说明如本发明所述的另外一个用于增强数据解析度的示例性程序的流程图;
图5是一幅说明如本发明所述的另外一个用于增强数据解析度的示例性程序的流程图;
图6A是一幅说明如本发明所述的一个示例性感测器敏感度样式的使用的图;
图6B是一幅说明如本发明所述的另外一个示例性感测器敏感度样式的使用的图;
图6C是一幅说明如本发明所述的一个示例性感测器敏感度样式的图;
图6D是一幅说明如本发明所述的另外一个示例性感测器敏感度样式的图;
图6E是一幅说明如本发明所述的另外一个示例性感测器敏感度样式的使用的图;
图6F是一幅说明如本发明所述的另外一个示例性感测器敏感度样式的使用的图;
图7是一幅说明如本发明所述的另外一个示例性感测器敏感度样式的图;
图8A是一幅说明如本发明所述的处理一个输入数据集合以获得一个更高解析度数据集合的图;
图8B是一幅说明如本发明所述的处理另外一个输入数据集合以获得一个更高解析度数据集合的图;
图9是一幅说明如本发明所述的一个用于增强数据解析度的示例性程序的流程图;
图10是一幅说明如本发明所述的一个示例性感测器敏感度样式的图;
图11是一幅说明如本发明所述的另外一个示例性感测器敏感度样式的图;
图12是一幅说明如本发明所述的另外一个示例性感测器敏感度样式的图;
图13是一幅说明如本发明所述的用一个示例性多项式映射函数处理数据的框图;
图14是一幅说明如本发明所述的一个用于增强数据解析度的示例性程序的矩阵图;
图15是一幅说明如本发明所述的另外一个用于增强数据解析度的示例性程序的流程图;
图16是一幅说明如本发明所述的另外一个用于增强数据解析度的示例性程序的流程图;
图17是一幅说明如本发明所述的一个示例性感测器敏感度样式的图;
图18A是一幅说明如本发明所述的使用感测器敏感度样式的一个示例性方式的图;
图18B是一幅说明如本发明所述的使用感测器敏感度样式的另外一个示例性方式的图;
图18C是一幅说明如本发明所述的使用感测器敏感度样式的另外一个示例性方式的图;
图19是一幅说明如本发明所述的用一个示例性多项式映射函数处理输入数据的框图;
图20是一幅说明如本发明所述的一个用于增强数据解析度的示例性程序的框图;
图21是一幅说明如本发明所述的另外一个用于增强数据解析度的示例性程序的流程图;
图22是一幅说明如本发明所述的一个示例性感测器敏感度样式的图;
图23是一幅说明如本发明所述的用一个示例性多项式映射函数处理输入数据的框图;
图24是一幅说明如本发明所述的另外一个用于增强数据解析度的示例性程序的流程图;
图25是一幅说明如本发明所述的另外一个用于增强数据解析度的示例性程序的流程图;
图26是一幅说明如本发明所述的另外一个示例性感测器敏感度样式的图;
图27是一幅说明如本发明所述的数据重建的图;
图28是一幅说明如本发明所述的另外一个示例性感测器敏感度样式的图;
图29是一幅说明如本发明所述的另外一个示例性敏感度样式的图;
图30是一幅说明如本发明所述的另外一个示例性感测器敏感度样式的图;
图31是一幅说明如本发明所述的另外一个示例性感测器敏感度样式的图;
图32是一幅说明如本发明所述的用于执行数据解析度增强程序的计算机***的框图;
图33是一幅用于图32的计算机***中的处理器的框图;
图34是一幅说明如本发明所述的一个用于增强数据解析度的示例性程序的性能等级的图表;
图35是一幅说明如本发明所述的另外一个用于增强数据解析度的示例性程序的性能等级的图表;
图36是一幅说明如本发明所述的另外一个用于增强数据解析度的示例性程序的性能的图表。
在所有这些附图中,除非另外标明,同一参考号和字符用以代表所说明实施例的同样特点、元素、组件或部分。而且,虽然本发明将参照这些附图,并联系所说明的实施例而详细描述,但仍可对所描述的实施例加以变化与修改,而不背离如所附权利要求所定义的本发明的真正范围和精神。
                         发明详细描述
许多图像都是真实或虚构物理场景的表示。图像数据通常包括一组像素数据,每个像素数据表示某一场景中某个特定区域或点的一个属性,如亮度和/或色彩。但是,除了亮度和色彩以外,像素数据还可以包括景深、光偏振、色温或任何其它场景物理属性的值。而且,尽管图像通常是空间维度(如竖直位置、水平位置和/或景深位置——如至镜头或观察者的距离)函数形式的场景物理属性(如亮度)的表示,但该属性也可以以其它维度的函数来表示,如时间。一般而言,由于像素的数量和/或每个像素的动态范围(如每个像素的位数)有限,可用的图像数据的解析度是有限的。此而,用图像数据来表示物理场景的准确度也是有限的。希望能处理输入图像数据,从而产生能更准确和/或更精确地表示场景的更高解析度的数据。
这样的数据解析度增强将能够以所输入的一个或多个数据的函数来产生每个更高解析度的数据。特别的是,在所输入图像的一个区域的数据将用来产生在所处理图像的相应区域的更高解析度的数据。然而,一个更高解析度数据集合一般要包含比一个相应的较低解析度数据集合更多的信息。举例来说,如果所有的像素都具有同样的动态范围,一幅具较多像素的图像就包含比一幅具较少像素的图像更多的信息。而且,一组特定数量的高动态范围像素包含比一组相同数量的较低动态范围像素更多的信息。因此,如果没有可用的外在信息——即在输入数据本身外没有信息可用,就不可能从低质量的数据重建出较高质量的图像。
另一方面,如上面所讨论的那样,对许多图像而言,有外在信息可用;这些信息包含了关于一般在多数图像中出现并期望发生的形状和样式的知识。按照本发明,这样的外在信息被引入一个输入数据集与一个已处理数据集之间映射的参数中。该映射——又叫“模型”——包括一组应用于输入数据以产生较高解析度的已处理数据的函数。前述外在信息的引入是用一个“学***面图像数据;(c)3维数据,如包含景深信息的图像数据,或由2维图像数据的时间序列组成的视频数据;(d)4维数据,如由包含景深信息的图像数据的时间序列组成的3维视频数据;或(e)任何维数的其它类型数据。
图1说明了如本发明所述的一个处理一组数据以产生增强解析度数据的示例。在所说明的示例中,从一个感测器阵列104接收到第一组数据102,这组数据可以是如一幅未加工的图像。该第一个数据集102包括第一和第二个数据122和124,它们可以是如一幅未加工图像的像素。第一个数据122表示至少一个变量(例如一个被成像场景的第一个局部640的亮度)的第一个值。特别是,如果在该场景内一个物体126的表面上的第一个部分640具有某一特定亮度,第一个数据122就表示这一亮度。类似地,第二个数据124表示在该场景内一个物体126的表面上的第二个部分642的亮度。用一个模型106来处理该第一个数据集102,从而产生第二个数据集108。模型106最好包括控制该模型106对第一个数据集102的应用的第一个模型参数116,和控制该模型106对第二个数据集124的应用的第二个模型参数118。第二组数据108包括通过对第一和第二个数据122和124应用模型106所产生的第三个数据120。
在本发明的某个较佳实施例中,映射106包含在第一个数据集102中的数据的一组多项式函数。第一和第二个数据122和124可以按照在图4中所说明的算法来处理。在所说明的该算法中,接收第一个数据(步骤402)。也接收第二个数据(步骤404)。用模型106来处理第一和第二个数据(步骤406),从而产生第三个数据120(步骤414)。如果使用的是一个多项式模型,则步骤406最好包含将第一个多项式系数应用于第一个数据122(步骤408),将第二个多项式系数应用于第二个数据124(步骤410),和将步骤408与步骤410的结果相加(步骤412)。将某个多项式系数应用于某个数据一般包含将该系数乘上该数据的某个算术幂。
模型106最好包含一组局部映射函数,该函数从一幅已捕获图像内的一小块邻域接收像素测量值,并将该像素测量值转换成某个(或某些)所期望的输出图像值。该映射函数是通过对比高质量数据(如高解析度图像数据)的样例与从这些高质量数据计算得到的低质量数据的样例而“学习”到的。举例而言,如果目标是学习一个结构模型,来处理一幅具低空间解析度的亮度图像,从而产生一幅具高空间解析度的亮度图像,可以将该高解析度图像特意降低品质(模糊化或向下采样)以产生相应的低解析度图像。另一个例子是,如果要优化该模型来从对应于多种不同曝光度的一系列低动态范围图像(如每像素8个比特位的图像)产生一幅高动态范围图像(如一幅每像素12个比特位的图像),可以将该幅高动态范围图像缩放、裁剪、重新量化,从而产生一组具低动态范围的测试图像。换句话说,为了综合所测量数据的低品质模拟,用于训练程序,要用“降低品质”处理步骤来降低高质量图像的品质。在图8A和8B中说明了示例性高质量与低质量图像间的关系。在图8A的示例中,低质量数据集802是高质量数据804的一个低解析度版本。因此,对于两幅图像中的相同区域,在高质量图像中有比在所测得的图像中更多的样例。在图8B的示例中,高质量数据集808包含了一个时间维度(即时间),比低质量数据集806具有更高的空间和/或时间解析度。
需要注意,在学习阶段使用的高质量图像可以是真实场景的图像、用多种渲染技术所产生的合成图像或真实与合成图像数据的某些组合。真实场景的图像可以用高质量(如专业级别)成像***来获得,而且如果这些高质量图像被使用某个模拟低质量成像***的特性和缺点的模型降低了品质,本发明的解析度增强技术可以允许较低质量的成像***来模拟高质量***的性能。该算法所用的结构模型最好尽可能普通,相应地,选来用于训练程序的图像应当充分代表场景类型的全部范围和一个人在真实世界所期望遇到的特性。举例来说,最好包括城市背景、风景和室内空间的图像。而且,所选择的图像最好代表实际所遇到的照明条件的全部范围,包括室内照明、阴天的室外条件,和晴天的室外条件。而且,为了使结构模型优化过程能捕捉缩放和方向效果,将在多种不同放大设定和旋转下所采集的相同场景的图像包括在内,通常是有益的。合成图像可以特别有用,因为在其中可以容易地包含可能与某个特定应用相关的特殊特性。举例来说,在产生的合成图像中,相对容易渲染边缘、直线、曲线,和/或多种方向与比例的更复杂的特性。而且,在计算机产生的图像中可以容易地合成特殊类型的表面纹理。
一旦获得了高质量图像及其相应的低质量图像,就希望能估计一个或多个结构映射模型。在图9中说明了一种用来进行这种估计的示例性程序。所说明示例的结构模型902是一个将输入数据M(x,y)(如真实测量数据或模拟数据)与一组所期望的输出值H(i,j)相关联的通用函数。输入与输出数据之间的关系可以按如下表达:
H(i,j)=f(M(1,1),...,M(x,y),...,M(X,Y))      (1)
其中X与Y定义了输入测量数据M(x,y)的一个邻域,该区域最好围绕(或邻近)高质量值H(i,j)的相应邻域。对结构模型的估计本质上由对公式(1)中函数f的参数的估计构成。
需要注意,在这一示例中的函数f是以通用形式定义的。函数f可以是线性或非线性的。其参数可以随意地用许多种不同回归技术中的任何一种来估计。该回归方法可以是线性或非线性的,可以包括如在拟合中估计无关点的技术,就象在鲁棒统计学中所普遍使用的那样。而且,函数f可以由基础函数的组合组成,在这些基础函数中的函数系数是所要估计的模型的参数。
而且,模型106可以如在图3中所说明的那样,包括一个网络306。在图3所说明的示例中,将第一个数据集102接收到一个网络306中,该网络包括多个通过多个链路304联接的节点302。网络306可以包含如一个Markov网络、一个Bayesian网络,和/或一个神经网络——所有这些都是已知的。网络306处理第一组数据102,从而产生具有改善了的解析度的第二组数据108。如果该函数以一个Bayesian或神经网络来实现,可以用多种已知方法,如向后传播算法,来估计其参数。而且,该模型还可以包含一个隐藏的Markov模型。在某个较佳实施例中,所期望的高质量值以输入数据的某个多项式函数来模拟。不论模型的形式,本发明的算法寻求确定和优化一组系数或其它模型参数C。如上面所讨论的,高质量训练图像(真实的、合成的,或两者兼有)被用来计算这些系数(步骤904)。注意,每幅高质量训练图像一般提供大量对寻找系数有用的数据,因为在该程序中所用的邻域(尺寸为(X,Y))一般很小,一个典型的例子是围绕其值最终将要被计算的高质量像素区域的一个5×5的低质量像素窗口。
一旦结构模型902以上述方式被计算出来,就可以进行数据的重建。重建过程包括如在图9中所说明的那样将该模型应用于低质量数据。低质量数据可以来自某种物理测量设备,或可以是为有效存储和/或传输的目的而从高质量数据产生并替代它的“合成的”低质量数据。而且,低质量数据可以是通过使用某个相对低质量传感器的模型(图9中的项906)来从高质量数据合成的。
每幅输出图像的值从重建过程获得:
(i,j)=f(M(1,1),...,M(x,y),...,M(X,Y))      (2)
对许多应用,用某种局部相异的测量样式(即一个传感器的敏感度特征与相邻或附近传感器的敏感度特征显著不同的样式)来测量输入图像是有益的。这种样式——也可以称为“拼图式的”——与如“虚光”之类的效果有区别,在“虚光”中感测器阵列的敏感度趋向于逐渐从中央向边缘减小。虚光效果在可与整个阵列尺寸相比较的范围内发生。
由于多数光强传感器的动态范围有限,而人眼的动态范围很高,就希望能利用对输入光的强度(即亮度)具有不同敏感度的传感器的样式。这一样式使准确测量场景光照丰富和光照缺乏两部分的亮度成为可能。在图1中说明了这一局部相异测量样式的一个示例。样式110包括对输入光强度具有高敏感度的第一个区域114,和对输入光强度具有低敏感度的第二个区域112。局部相异测量样式110可以重复许多次,以形成一个用于感测器阵列104中的较大的局部相异测量样式。结果图像可以称为“空间变化曝光”(SVE)图像。在图1所说明的示例中,来自场景中一个物体126的第一部分640的光线由测量样式110的第一个部分114接收。来自该物体126表面的第二部分642的光线由用于感测器阵列110中的测量样式的第二个部分112接收。模型106的第一个模型参数116最好与测量样式110的第一个部分114的敏感度特征(即高敏感度)相对应,并相匹配与优化,而第二个模型参数118最好与测量样式110的第二个部分112的敏感度特征(即低敏感度)相对应,并相匹配与优化。由于局部相异测量样式110可以重复许多次以形成一个用于感测器阵列104的较大的样式,最好对于测量样式110的第一个和第二个部分114和112的每个拷贝重用第一个和第二个模型参数116和118。这一配置是有益的,因为用具第一种传感器特征的传感器采样的未加工数据与场景的关系有可能和用具不同传感器特征的传感器采样的未加工数据与场景的关系不同。因此,在确定与优化映射106的参数116和118时,最好对每种敏感度特征赋以其自己的映射参数。
图17说明了一种另外的空间相异亮度敏感(即SVE)样式。在图中展示为较亮的像素对输入光强具有较大的敏感度,而较暗的像素则具有较低的敏感度。在所说明的示例中,四个相邻的像素1711、1712、1713和1714具有不同的敏感度(e1<e2<e3<e4)。这四个像素1711、1712、1713和1714形成一个2×2的相邻区域1705,该区域被重复以覆盖感测器阵列。一个基于四数值敏感度样式的SVE图像具有四种不同类型的局部相邻区域强度敏感度样式1722、1724、1726和1728,对应于2×2相邻区域1705的不同轮换。
SVE样式是有益的,因为即使在一个像素已饱和时,该像素也很可能有至少一个相邻像素是不饱和的。而且,即使在SVE样式中的一个像素记录了非常低的或零亮度,或者具有非常低的信噪比时,该像素也很可能有至少一个相邻像素记录了可测量的亮度并/或具有可接受的信噪比。其结果是,SVE样式实现了对场景高动态范围图像的计算。
还应注意,SVE技术绝对不限于图17中所说明的拼图。亮度敏感度的值的数量(以及相应的不同局部样式类型的数量)可以变化,样式也不需要是周期性的。可能在有些情况下,某种随机排列的曝光度的拼图也会是有用的。而且,SVE拼图可以以许多方式实现。一种方法是用一种由具不同透光度的单元组成的遮罩覆盖感测器阵列。可作替换的或可另外附加的是,敏感度样式(即拼图)可以直接蚀刻在感测器上,特别是在感测器是固态设备如CCD阵列时。而且,可以用另外的技术来预设像素的敏感度,如:(1)用不同配置的显微镜头覆盖每个像素,(2)对不同像素使用多种不同的集中时间,和/或(3)用不同的光圈覆盖每个像素。前述的所有实现都可以用来为感测器阵列提供在空间上变化的亮度敏感度样式。
使用具不同透光度单元拼图的光遮罩是特别方便的,因为这一方法可以通过对事实上的任何成像***作简单的更改来实现。图18A-18C说明了将一个光遮罩结合入一个成像***的几种方式。在图18A中,遮罩1802放置在感测器1804平面的附近。遮罩1802还可以放置在成像镜头1806的外面,这通常对接触感测器平面1804有困难的***是最好的。在图18B所说明的示例中,用一个初级镜头1810将场景1808聚焦到遮罩1802平面上。从遮罩1802显现的光线由成像镜头1806接收,并聚焦到感测器1804平面上。可以用一个散射器1812来减少或消除到达遮罩1802的直射光线,在这种情况下成像镜头1806最好聚焦在散射器1812平面上。图18C说明了一种通过其可以容易地将遮罩1802结合入常规相机的排列。在图18C所说明的示例中,遮罩1802固定在胶片1814前进的平面附近。需要注意,SVE技术并非仅限于可见光。实际上,任何电磁辐射成像器或任何其他辐射成像器的动态范围都可以用SVE方法来增强。
如本发明所述,可以用局部多项式映射函数将一幅低动态范围SVE图像映射到一幅高动态范围图像。SVE算法寻求开发结构模型,以开发图像光的空间曝光维度。
令M表示所测量的数据(如用某个SVE传感器捕捉的数据)。可以用一组结构模型(即映射函数)来从M重建高动态范围图像H,其中每个模型用于四种局部邻域样式p中的一种。令Mp表示具有特定局部样式p的M的一个邻域。可以按如下来估计所期望的在邻域中心的高动态范围值:
H p ( i + 0.5 , j + 0.5 ) = Σ ( x , y ) ⋐ S p ( i , j ) Σ ( k ≠ x , l ≠ y ) ∈ S p ( i , j ) Σ n = 0 N P Σ q = 0 N P - n C p ( x , y , k , l , n ) M p n ( x , y ) M p q ( k , l ) - - - ( 3 )
其中Sp(i,j)是像素(i,j)的邻域,如图19中所说明的那样。Mp n(x,y)Mp q(k,l)表示(1)在邻域Mp内点(x,y)的未加工值的n次幂与(2)在邻域Mp内点(k,l)的未加工值的q次幂的乘积。Np是多项式映射的级数。Cp表示局部样式p的多项式系数。一般而言,来自以竖直方向从像素(i,j)替换的像素的信息并不比来自以水平方向替换的像素的信息更重要或更不重要。因此,一般最好使用宽与长一样的邻域——如方形的邻域。而且,每种强度敏感度特征(如每种曝光度水平)最好应该在每个邻域进行相同的次数。对于任何偶数的曝光度,具有偶数(而不是奇数)长度和宽度的邻域满足这一条件。举例来说,在图19中所说明的邻域Sp(i,j)就是一个具有偶数长度和宽度的方形邻域。高动态范围值则在偏离网格上的邻域中心(i+0.5,j+0.5)处计算。
乘积Mp(x,y)Mp(k,l)显式地表示邻域中两个像素间的相关性。但是,在许多情况下,使用该乘积项(即显式地计算并包含该相关性项)并不能很大地增加该技术的准确性和效率,因为(在空间位置或其它维度上)邻近的场景的光总是趋向于自然相关。以下给出了一个较佳的映射函数(其比较简单,因而计算不太复杂):
H p ( i + 0.5 , j + 0.5 ) = Σ ( x , y ) ⋐ S p ( i , j ) Σ n = 0 N P C p ( x , y , n ) M p n ( x , y ) - - - ( 4 )
应当注意,尽管图19说明的是一个方形的4×4邻域,但该方法可以应用于具任何尺寸和形状的邻域,也可以用以计算无论在或不在网格上位置的像素的值。
对于每种局部样式p,公式(4)也可以以矩阵来表达,如在图14中所说明的那样:
Bp=ApCp                                     (5)
其中矩阵Ap的每一行包含一个具有局部样式类型p的邻域Mp的像素值的幂。Ap的每一行包含乘幂到多项式级数Np的像素值。Cp是一个列向量,包含对应于在具局部样式p的邻域中的每个像素的多项式系数。Bp是一个列向量,包含对每个p的所期望的不在中心的邻域中心值Hp
对应于不同局部曝光样式的映射函数使用一种加权最少方块技术来估计。这一技术的一个示例是求解加权正规方程:
A P T W P 2 A P C P = A P T W P 2 B P - - - ( 6 )
其中Wp是对每个邻域线形方程加权的一个对角矩阵。在最少方块方式中,Ap TWp 2Ap可以称为“加权规范矩阵”,而Ap TWp 2Bp可以称为“加权回归向量”。
在多项式映射函数中的系数数量可以按以下计算。令u、x、v表示邻域的尺寸,令Np表示与局部曝光样式p相对应的多项式级数。令P表示在该SVE图像中的不同局部样式的数量。则系数数量|C|由以下公式给出:
| C | = P + uv Σ p = 1 P N p - - - ( 7 )
举例来说,当对于p=1...P有P=4(如对于具4种不同像素曝光度的SVE感测器),Np=2,且u=v=6(即一个具有偶数长度和偶数宽度的方形邻域)时,系数数量为292。
可以用如本发明所述的一种算法通过处理几幅不同的以高动态范围传感器捕捉的图像来学习(即优化)局部多项式映射函数。而后,用优化了的映射函数,可以从由SVE传感器捕捉的其它图像重建高动态范围图像。在训练阶段,某种训练算法使用高动态范围图像对每种类型的邻域样式(如在图17中的样式1701-1704)估计局部多项式映射函数的系数。
图20是如本发明所述的一个示例性训练阶段的一幅流程图。在图20所说明的示例中,训练使用由一个胶片相机捕捉并由一个胶片扫描仪扫描的12位图像2024来进行。缩放这些图像的强度,以模拟在传感器全部曝光度中的变化(步骤2002)。对这些训练图像应用一个与SVE感测器的响应函数相匹配的响应函数2004。而后,将缩放了的图像平移(即移动位置),以训练用于具各种图像邻域的各种曝光度样式的算法(即优化模型参数)(步骤2006)。接着,对训练图像2026应用一个SVE遮罩2008,从而产生一幅12位SVE图像2012(步骤2010)。而后(在步骤2014中),通过按最大255个强度等级裁剪这些数据,再映射或重新量化这些数据从而产生一幅8位图像M(图20中的项2028),来降低12位SVE图像2012的品质(即降级)。上述降低品质程序模拟了一个具低动态范围的SVE传感器。如在图14中所说明的那样,对每种样式p从图像M中解析出邻域集合Ap。类似地,从训练图像H中解析出列向量Bp。为了避免在不同强度敏感度(如图17中的e1、e2、e3和e4)数量上的不对称,最好使用具有偶数(而不是奇数)长度和宽度的方形邻域。如在图19中所说明的那样,一个具有偶数长度和/或宽度的邻域的中心是在一个不在网格上的位置。为了对结果的半个像素偏移进行补偿,将这些训练图像自身位移半个像素。如果高质量图像的原先采样没有遵循用于信号重建的Nyquist标准,这一偏移可以将更多的模糊引入这些图像,从而获得对模糊或平滑图像及场景优化了的系数。如果期望对更明锐图像及场景的优化,则初始的高解析度图像最好表示具有锐利特性的明锐场景,并且按照Nyquist标准来采样。但是,需要注意,对明锐图像的增强一般要求比对平滑和/或模糊图像的增强更为准确的模型。而且,即使明锐的图像也总是趋向于包括大量的平滑区域。因此,如果在训练时,无法知道以后将要由算法增强的图像的明锐度水平,就最好使用明锐的图像来训练,因为模型的准确度对于增强较明锐的图像最为重要,并且在任何情况下,明锐的训练图像都很可能包括足够的平滑区域,以致还能够实现对平滑和/或模糊图像的增强。
属于SVE数据中任何局部样式类型的每个邻域都要规范化。规范化是通过首先从每种p类型邻域的每个数据减去所有p类型的邻域Ap的平均能量μp,然后将该数据除以Ap(i)的能量来实现的。规范化步骤在数学上可以按如下表达:
A pnorm ( i ) = A p ( i ) - μ p | | A p ( i ) | | - - - ( 8 )
其中Ap(i)的能量(即分母)是在图14中所示的矩阵Ap的第i行向量的一个选定部分的量级。第i行向量的这一选定部分是包含该邻域像素值的第一次幂的那一部分。类似地规范化训练数据Bp
B pnorm ( i ) = B p ( i ) - μ p | | A p ( i ) | | - - - ( 9 )
在规范化(步骤2016)后,用一个加权最少方块程序(步骤2018)来计算加权规范矩阵Apnorm TWp 2Apnorm和右手侧回归向量Apnorm TWp 2Bpnorm。在该最少方块程序2018中,对于每幅训练图像,累积各规范矩阵和回归向量(步骤2020)。然后计算该最少方块结果(步骤2022)。一旦所有高动态范围图像都已用于训练,包括以多种曝光度和多种平移来训练,就用公式(6)对每种类型的邻域样式p计算出了多项式映射函数的系数Cp(在图20中的项2032)(步骤2030)。
在重建阶段(在图21中说明了其一个示例),某种重建算法将该多项式系数2032(在训练阶段计算出来的)应用于用某个低动态范围8位SVE传感器捕捉的SVE图像2102。与训练算法相类似,重建算法对与各种局部样式p相对应的各个邻域Ap进行规范化(步骤2104)。然后将系数Cp(项2032)应用于每种规范化了的邻域样式,从而获得Bpnorm=ApnormCp(步骤2106)。接着,将Bpnorm反规范化(即非规范化)以获得Bp(步骤2108)。由于SVE技术使用场景强度的非均匀的量化,该算法最好根据在SVE感测器遮罩中所用的离散曝光度的数量,非均匀地量化这些反规范化了的数据(步骤2110),从而获得一幅重建的高动态范围图像2112。
如本发明所述的一种SVE方法已经用表示多种自然场景的五幅高动态范围(12位)图像测试过。为了“训练”(即优化)映射系数,每幅训练图像都如在图20的流程图所说明的那样降低了品质(即降级),以获得8位的SVE图像。为了创建这些SVE图像,每幅训练图像都用4种不同的曝光度(e1=4e2=16e3=64e4)来捕捉,而后按照在图17中所说明的SVE遮罩1706组合起来。级数3的局部多项式映射函数的系数用一种加权最少方块技术来计算。为了重建,将六幅12位SVE测试图像(与在训练中所用的不同)降低品质以产生8位SVE图像。如在图21中的流程图所说明的那样,将结果系数应用于这些降低了品质的8位SVE图像。图36是一幅比较上述程序与一个双向立方体插值程序的结果的柱状图。两个柱状图的比较展示出本发明的方法产生更多低差错的像素和更少高差错的像素。
在前面的示例中,局部相异敏感度特征是一种特殊类型,明确地说,是一种依赖关于光强的传感器输出的类型。但是,如本发明所述,也可以用其它敏感度特征类型来构成某个局部相异测量样式。举例来说,敏感度特征可以是某种依赖关于信号波长(如色彩)的测量敏感度的类型。而且,敏感度特征可以是某种依赖关于输入光偏振的测量敏感度的类型。
应当注意,在某些情况下,如果一种结构模型不顾要增强哪个像素而使用相同的系数,就可能不能产生最理想的结果。当同时采样场景的多个属性时,这是特别有可能的。在图2中说明了这样一个示例。对所说明的测量样式的检查展示出在网格上的不同像素可以具有不同的局部采样样式。举例而言,参照图2,假设使用了如本发明所述的某种算法来获得在第一个像素202和第二个相邻像素204的邻域中的高质量R、G、B值。在第一个像素202周围的曝光度和空间滤镜的局部样式很可能与在相邻像素204周围的不同。因此,如果用一个简单、一致的结构模型(即一个忽略环绕邻域像素的敏感度样式的模型)来预测在所说明的三个彩色频道中每个像素处的图像亮度,就可能会产生不准确的结果,除非该模型具有极多数量的模型系数。为了获得一个既“紧凑”(即具有很少数量的系数)又有效的模型,最好不要用单独一组系数来适应用多种局部采样样式捕捉的数据。可以通过对每种局部采样样式类型使用不同的一组模型系数来达到较好的结果。由于一般用单次重复样式来采样图像值,所以得到的采样样式个数较少。因此,通常只需要很少数量的结构模型(或模型部件)。如果给出某个特定的所关心的像素,就可以将恰当的结构模型应用于在该特定像素的局部邻域发生的特定采样样式。
多数数字色彩传感器使用一个单独的感测器阵列来捕捉图像。在该阵列中的每一个感测器对应于测量在某个特定波长范围(如红、绿或蓝)内的输入光强度的一个图像像素。换句话说,色彩滤镜在该感测器阵列上空间交错。这样一个色彩拼图可以称为一个空间变化色彩(SVC)拼图。可以在传感器阵列上覆盖多种样式的色彩滤镜。如本发明所述的一种算法可以用训练了的局部多项式映射函数来产生高质量彩色图像。需要注意,尽管本发明的色彩拼图方法在此主要是关于单芯片彩色CCD相机而描述的,但本发明的这些方法并非仅限于任何特定色彩传感器。
在一个单芯片CCD相机的感测器阵列上的色彩滤镜可以以多种方式排列。每个像素周围的区域可以称为一个“邻域”。每个邻域包含一个可以称为“局部样式”的色彩空间变化样式。一幅全图像拼图是通过在整个感测器阵列重复局部样式而创建的。在某些情况下,局部样式可以以某种重叠方式来排列。
上述概念可以参照两幅在数字相机行业广泛使用的样例拼图来说明。第一种类型(在图10中所说明的)普遍称为列拼图。这种类型的拼图是一种均匀的,逐列的红、绿、蓝色彩信道(在图10中标为R、G和B)的交替。为了形成这一拼图,要在整个像素阵列上重复一种R、G和B敏感度的1×3样式1004。在图10所说明的示例性拼图中,R、G、B色彩信道中每一个的相对空间解析度是33%。现在考虑在图10中的邻域1001、1002和1003。任何其它具类似尺寸和形状的邻域必须对应于局部样式1001、1002或1003中的一种,因为这些是唯一有可能用于图10中所说明的示例性列拼图的局部3×3邻域样式。总的来说,不论邻域的形状和尺寸,一个3色列拼图CCD只有3种不同的局部邻域样式。
一种更为普遍类型的拼图(普遍称为Bayer拼图)考虑人体视觉***对不同色彩的敏感度。众所周知人眼对绿光比对红或蓝光更为敏感。因此,Bayer拼图将绿像素的相对空间解析度设置为50%,而将红和蓝像素的设置为25%,从而产生一幅对于人眼呈现较少粒状的图像。在图1 1中说明了这一拼图的一个示例。所说明的拼图由一个在整个图像上重复的2×2样式1105构成。如图11中所说明的那样,在不同邻域中的不同类型局部样式对应于该2×2样式的行和列的不同循环轮换。如此,在一个Bayer拼图CCD中,所有尺寸≥2×2的邻域可以归类成属于四种不同的可能局部样式中的一种。在图12中说明了这四种样式1105-1108。在图11中,样式1101-1104是表示可能在Bayer拼图CCD中的四种不同类型的3×3邻域的示例。在本发明的某一较佳实施例中,使用了一个Bayer拼图,但该技术对于列拼图样式或任何其它类型的样式也是有效的。
在某些常规***中,用插值来计算没有在由单芯片CCD捕捉的图像中出现的R、G、B值。插值分别对每个色彩信道进行。然而,这一方法没能考虑相邻场景点色彩之间的相关性,而这样的相关性在真实场景中总是趋向于会发生。相反,如本发明所述的一种方法开发了不仅在空间维度上,而且在其它维度如波长和/或时间上使用真实场景的相关性的局部函数。使用这些局部函数,可以将Bayer拼图输入映射成一幅高质量RGB图像。
令所测量的SVC数据(如由一个Bayer CCD捕捉的数据)以M表示。可以用一组(一般为12个)结构模型(或映射函数)来从M重建所期望的高质量RGB图像H,其中每个模型针对一个色彩信道λ与四种不同局部样式邻域之一的可能的组合。令Mp表示M的一个属于某特定局部样式p的邻域。而后可以按如下估计在该邻域中心的所期望的色彩值:
H p ( i + 0.5 , j + 0.5 ) = Σ ( x , y ) ⋐ S p ( i , j ) Σ ( k ≠ x , l ≠ y ) ∈ S p ( i , j ) Σ n = 0 N P Σ q = 0 N P - n C p ( x , y , k , l , λ , n ) M p n ( x , y ) M p q ( k , l ) - - - ( 10 )
其中Sp(i,j)是像素(i,j)的邻域(见图13)。Np是多项式映射的级数。Cp表示对于每个色彩信道λ,局部样式p的多项式系数集合。一般而言,来自以竖直方向从像素(i,j)替换的像素的信息并不比来自以水平方向替换的像素的信息更重要或更不重要。因此,一般最好使用宽与长一样的邻域——如方形的邻域。而且,每种波长敏感度特征(如每种色彩)最好应该在每个邻域进行相同的次数。对于任何偶数的色彩,或对于具有偶数像素的拼图样式,具有偶数(而不是奇数)长度和宽度的邻域满足这一条件。R、G、B值在不在网格上的邻域中心(i+0.5,j+0.5)计算。
乘积Mp(x,y)Mp(k,l)显式地表示邻域中两个像素间的相关性。但是,在许多情况下,使用该乘积项并不能很大地增加该技术的准确性和效率,因为(在空间位置或其它维度上)邻近的场景的光总是趋向于自然相关。一个较佳的映射函数更为简单,以下给出:
H p ( i + 0.5 , j + 0.5 ) = Σ ( x , y ) ⋐ S p ( i , j ) Σ n = 0 N P C p ( x , y , λ , n ) M p n ( x , y ) - - - ( 11 )
换句话说,对于在低质量SVC数据内一个邻域的每个在网格上的像素计算一个多项式,而通过合计(如相加)在该邻域中所有像素的多项式,就在不在网格上的中心像素处产生了相应的一个高质量(即高解析度)色彩值。应当注意,总的来说,该方法可以用于任何尺寸和形状的邻域,也可以用于不在或在网格上的计算。
对于每个λ和每种局部样式p,公式(11)所定义的映射函数也可以以矩阵来表达,如在图14中所说明的那样:
Bp(λ)=ApCp(λ)                              (12)
其中矩阵Ap的每一行包含一个具有局部样式类型p的邻域Mp的像素值的幂。Ap的每一行包含乘幂到多项式级数Np的像素值幂。Cp(λ)是一个列向量,包含对于色彩λ和局部样式p的每个邻域像素的多项式系数。Bp(λ)是一个列向量,包含对每个λ和p的所期望的不在网格上的邻域中心值Hp(λ)。序号λ为简短起见可以省略,则该映射函数的估计可以提出为一个加权最少方块问题:
A p T W p 2 A p C p = A p T W p 2 B p - - - ( 13 )
其中Wp是对每个邻域线形方程加权的一个对角矩阵。在最少方块方式中,Ap TWp 2Ap可以称为“加权规范矩阵”,而Ap TWp 2Bp可以称为“加权回归向量”。
在公式(11)的映射函数中的系数数量可以按以下计算。令u、x、v表示邻域的尺寸,令Np表示与样式p相对应的多项式级数。令P表示在该SVC图像中的不同局部样式的数量。令Λ表示色彩信道的数量。则系数数量|C|由以下公式给出:
| C | = ( P + uv Σ p = 1 P N p ) Λ - - - ( 14 )
举例来说,当对于p=1...P有P=4(如对于Bayer拼图CCD),Np=2,u=v=6(即一个具有偶数长度和偶数宽度的方形邻域),且Λ=3时(R、G和B),系数数量为876。对图像重建而言,大数量的系数提供了比常规插值技术更大的灵活性。
如本发明所述的一种算法可以使用几幅高质量RGB图像来“学习”(即优化)局部多项式映射函数的参数。优化了的映射函数实现从用在每个像素只提供一个色彩信道的Bayer拼图CCD捕捉的图像重建高质量彩色图像。
在训练阶段,某种训练算法使用高质量RGB图像对每种类型的局部样式和每个色彩信道估计局部多项式映射函数的系数。图15说明了如本发明所述的一个示例性训练阶段的一幅流程图。在所说明的示例中的训练算法从用一个胶片相机捕捉并用一个胶片扫描仪扫描的高质量彩色图像1502开始。为了降低这些图像的品质以模拟由一个真实CCD阵列所捕捉的图像,通过用一个模拟一个典型CCD阵列的性能和局限的响应函数1504处理这些高质量图像1502来产生训练图像1506。而后,通过按照彩色拼图样式1510从这些高质量图像1502中删除适当的色彩信道来模拟一幅SVC图像M(图15中的项1514)(可以是如一幅Bayer拼图图像)(步骤1512)。如在图14中所说明的那样,该算法对每种样式p从所模拟的SVC图像M(项1514)中解析出一组邻域Ap(项1528)。每个邻域都具有一种局部样式类型p(如见在图11中的样式1101-1104)。类似地,对每个色彩信道,从训练图像H(项1502)中解析出列向量Bp(项1530)。为了确保在邻域中的红色与蓝色像素按在基本Bayer样式中一样的比例来表示,最好使用具有偶数(而不是奇数)长度和宽度的邻域。如在图13中所说明的那样,一个具有偶数长度和/或宽度的邻域的中心是在一个不在网格上的位置。为了对结果的半个像素偏移进行补偿,该算法将这些训练图像1506位移半个像素(步骤1508)。如果高质量图像的原先采样没有遵循用于信号重建的Nyquist标准,这半像素的偏移可以将更多的模糊引入训练图像。这样的模糊可以获得对主要具有平滑表面的模糊输入图像及/或场景较好地优化了的模型系数。如果期望优化用于主要具有锐利和不连贯特性的场景的明锐图像的模型,则最好从按照Nyquist标准采样的表示主要具有锐利和不连贯特性的场景的图像开始。但是,如前面关于SVE图像所讨论的,如果在训练时,无法知道以后将要由该算法增强的图像的明锐度水平,就最好使用明锐的图像来训练,因为模型的准确度对于增强较明锐的图像最为重要,并且在任何情况下,明锐的训练图像都很可能包括足够的平滑区域,以便还能够实现对平滑和/或模糊图像的增强。
如前面关于SVE算法所讨论的那样,该算法规范化在SVC数据中的每个邻域Ap(i)(步骤1516)。在规范化后,用一个加权最少方块程序(步骤1518)来计算加权规范矩阵Apnorm TWp 2Apnorm和右手侧回归向量Apnorm TWp 2Bpnorm。在该最少方块程序1518中,对于每幅训练图像,累积这些加权规范矩阵和加权回归向量(步骤1520)。然后计算最少方块结果(步骤1518)。一旦所有训练图像都已处理,该算法就用公式(13)对每种类型的邻域样式p和每个色彩信道确定多项式映射函数的系数Cp(项1526)(步骤1524)。
在重建阶段(在图16中说明了其一个示例),某种重建算法将该多项式系数1526(在训练阶段计算出来的)应用于用Bayer拼图CCD捕捉的SVC图像1602。换句话说,该算法从一幅每个像素只有一个色彩信道测量的SVC图像计算出一幅每个像素具有三个色彩信道值的高质量图像1610。这种重建可以称为“分离拼图”。与训练阶段相类似,在重建阶段对SVC图像的各个邻域进行规范化(步骤1604)。然后将系数Cp(项1526)应用于每种规范化了的邻域样式和每个色彩信道,从而获得Bpnorm=ApnormCp(步骤1606)。接着,将Bpnorm反规范化(即非规范化)(步骤1608)以获得重建的高质量彩色图像1610。
如本发明所述的一种SVC训练算法已经用表示多种自然场景的30幅高质量彩色图像测试过。如在图15的流程图所说明的那样,每幅训练图像都通过从每个像素中删除两个色彩信道而降低了品质,以获得SVC图像。而后用一种加权最少方块程序来计算一个级数2的局部多项式映射函数的系数。接着,将20幅测试图像(与在训练步骤中所用的不同)降低品质,以产生20幅模拟的低质量SVC图像。如在图16中的流程图所说明的那样,将该模型系数应用于这些模拟的低质量测试图像。如图35的柱状图所示,本发明的结构重建方法比常规立方体插值产生更多低差错的像素和更少高差错的像素。
如本发明的某个较佳实施例所述,一个局部相异测量样式可以由不同种类的敏感度特征的局部相异样式的一个组合构成。举例而言,如在图6A中所说明的那样,一个测量样式可以是一个强度敏感度样式和一个波长(如色彩)敏感度样式的某种组合。这样一个由一个SVE样式和一个SVC样式的某种组合构成的样式可以称为一个空间变化色彩与曝光度(SVEC)样式。在图6A所说明的示例中,测量样式包括三个传感器区域602、604和606。图5说明了一个用图6A的样式测量信号的示例性程序。第一个区域602从在场景中的一个物体126的区域640(见图1)接收包括一个或多个信号的第一个信号集126(图5中的步骤502)。
第一个传感器部分602进行对第一个信号集620的第一个测量集(包含至少一次测量)(图5中的步骤504)。在图6A所说明的测量样式中,第一个区域602具有第一个敏感度特征646,该特征包含一种对绿光的敏感度。而且,该第一个区域602具有第二个敏感度特征648,该特征包含一种对光强的高敏感度。
第二个感测器组604从场景的第二个区域642接收并测量第二个信号集622(步骤506和508)。第二个感测器组604也对绿光敏感——即传感器具有象第一个感测器组602一样的敏感度特征。而且,第二个感测器组604具有关于第二个信号集622的第三个敏感度特征,该第三个敏感度特征650包含一种对光强的有些降低了的敏感度。第三个感测器组606从场景的第三个区域644接收并测量第三个信号集624(步骤510和512)。第三个感测器组606具有关于第三个信号集624的第四个敏感度特征。在本示例中,该第四个敏感度特征652具有与第一种敏感度特征646相同的类型——即对某组选定的波长(在这里的情况下,是红光)的敏感度。而且,在图6A所说明的示例中,第三个感测器组606具有第五个敏感度特征654,该第五个敏感度特征包含一种对光强的更为降低了的敏感度。第五个敏感度特征654具有分别与第一个和第二个感测器组602和604的第二种和第三种敏感度特征648和650相同的类型——即对光强的某个特定水平的敏感度。一旦测量了第一、第二和第三个信号集,就用如本发明所述的某种结构模型来增强结果数据的解析度,从而产生更高解析度的输出数据(图5中的步骤514)。
如本发明所述的一种局部相异测量样式的另外一个实施例所述,感测器组不需要通过重叠遮罩来构成,而可以替换成如在图6B中所说明的那样,从每一个都具有自己的敏感度特征的多个感测器构成。在所说明的测量样式中,第一个感测器组包含一个具有敏感度特征646的感测器616,该敏感度特征是一种依赖于对信号波长的测量敏感度的类型——即感测器616对绿光敏感。第一个感测器组还包含一个具有敏感度特征648的感测器618,该敏感度特征是一种依赖于对信号强度的测量输出的类型——即,在这种情况下,感测器618具有未降低的强度敏感度。第二个感测器组604类似地包含两个分别具有敏感度特征646和650的感测器632和634,该两个敏感度特征分别是一种色彩敏感度类型和一种强度敏感度类型。类似地,第三个感测器组606也包含分别具有敏感度特征646和654的感测器636和638,该两个敏感度特征分别是一种色彩敏感度类型和一种强度敏感度类型。尽管在图6A和6B中所说明的测量样式只包括三个感测器组,对于可以用作测量样式一部分的感测器组的数量并没有限制。举例来说,如在图6C和6D中所说明的那样,在如本发明所述的一种局部相异测量样式的一个较佳实施例中,可以将一种Bayer样式与一种强度敏感度特征的局部相异测量样式一起使用。在图6C所说明的示例中,四个感测器组608、602、610和604分别具有不同的色彩敏感度特征662、646、656和646。而且,感测器组608、602、610和604分别具有不同的强度敏感度特征664、648、660和650。另外,如在图6G中所说明的那样,可以使用不同的强度敏感度特征样式。举例来说,在图6C所说明的示例中,红色和蓝色感测器组608和610具有与对光强的高敏感度相应的强度敏感度特征664和660。但是,在图6D所说明的示例中,红色和蓝色感测器组608和610具有与对光强的降低了的高敏感度相应的强度敏感度特征666和668。
可以用一个基本SVEC样式来创建一个全图像SVEC样式。举例来说,请考虑在图22中所说明的像素阵列。灰度水平指示像素曝光度,而大写字母R、G和B指示在不同像素处所测量的色彩信道。一种创建这一全图像SVEC拼图的方法是通过在一小片邻域内指定色彩敏感度和亮度(即强度)敏感度以形成一个初始样式,而后将该初始样式2201在整个感测器阵列上重复。在图22所说明的示例中,用一个方形的4×4初始样式在整个感测器阵列上重复。然而,总的来说,初始样式可以是一个任意尺寸的色彩和曝光度的拼图。在整个感测器阵列上重复这样一个初始样式的一个好处是不同类型局部样式2201-2216的数量与初始样式2201的不同轮换相对应。在SVEC成像中,色彩和动态范围是作为空间位置的一个函数而同时采样的,其结果是,在SVEC拼图内的局部样式要比在SVC拼图或SVE拼图中的局部样式更为复杂。
最好以某种能产生一个SVEC拼图的方式来对相应像素指定多种曝光度和色彩,该SVEC拼图具有某些依赖于特定应用的所期望的性质。这些所期望的性质可以以下列参数形式来定义:
1.根据长度u、宽度v和/或纵横比a=v/u来定义的邻域尺寸和形状。
2.在某个邻域中的R、G、B区域的数量,及相应色彩敏感区域的相对位置。
3.不同曝光度(即强度敏感度)的数量e和值,及在这些邻域内相应曝光度敏感区域的相对位置。
4.对每个曝光度值所指定的R、G、B区域的数量。
举例来说,如上面所讨论的那样,在多数情况下邻域的长度和宽度最好相等(即a=1)。就尺寸而言,较小的邻域总是趋向于对具有“较小”纹理(即在其中每个单位距离的亮度迅速变化)的图像提供较好的结果。这是因为对于这样的图像,在较远像素间的相关性被削弱了,其结果是,一个大的邻域不能比一个小的邻域提供更多的信息。另外,如上面所讨论的那样,对于一个具有偶数元素的拼图,邻域最好是偶数长度和偶数宽度。
就曝光度水平的数量e而言,一个较高的数量可以提供较高的动态范围。就这些不同曝光度水平间的比例而言,较高的比例提供更多的可感测总范围,但会导致较粗糙的可感测亮度水平的间隔。最好选择这些不同曝光度水平间的比例,使可感测亮度的总范围符合在场景中呈现和所关心的亮度水平的范围。
多种曝光度水平最好分布成避免将多数高敏感度像素放置在邻域的一个部分(如右上角),而将多数低敏感度像素放置在一个不同的部分(如左下角)。这样一种较佳的排列提高了在邻域的每个部分至少有一些像素能准确感测某个输入信号的可能性,即使相邻或附近的像素饱和了或不能感测该信号。
就色彩样式而言,在许多***中,一个Bayer拼图(在图11中所说明的)是一个用于在感测器阵列上色彩分布的较佳选择,因为这一样式符合人眼的敏感度,还因为多数的数字相机都遵循这一样式。如果使用这一样式,则在每个uxv尺寸的局部邻域内,R、G、B的空间解析度分别为25%、50%和25%,如在图11中所说明的那样:
|R|=|B|=0.25uv;|G|=0.5uv。                    (15)
根据公式(15),在Bayer样式上,可以容易地看出邻域长度u和邻域宽度v都是偶数。而且,在每个邻域内,对于每种不同的曝光度水平每种色彩最好发生与该色彩在Bayer样式中所发生的相同的次数。因此:
|R|=|B|=ke;|G|=2ke,
4ke=uv,                                         (16)
其中R和B与每种曝光度结合k次,G与每种曝光度结合2k次,而k、e和u都是正整数。而且,以邻域的纵横比a的形式为:
4ke=au2。                                        (17)
为了使该模型所需要的系数的数量最少化,最好找到满足上述约束的最小局部SVEC样式。对于一个固定的曝光度数量e和一个固定的纵横比a,最小的局部样式尺寸u对应于满足公式(17)的k的最小整数值。举例来说,如果e=2,并且a=1(即该邻域是方形的),则需要在整个感测器阵列上重复的最小邻域具尺寸u=4(对应于k=2)。类似地,对于e=4和a=1,结果参数是:u=4和k=1。在图22中所说明的示例性图像样式使用e=4(即四种不同的灰度水平)和一个Bayer彩色拼图。为产生全图像样式,要将4×4方形邻域2201在整个阵列上重复。
以上结果在曝光度敏感度值的数量与较佳的局部邻域样式尺寸之间建立了某种关系。另外,也确定了在每个邻域中色彩的空间排列。使用上面的约束,可以将多种曝光度敏感度值指定给在局部样式中的多个像素。
在本发明的某一较佳实施例中,用优化了的局部多项式映射函数将一幅低动态范围的Bayer拼图SVEC图像映射成一幅高动态范围彩色图像。这些映射函数得自一个学习来的结构模型。
令所测量的数据(在这一示例中,用一个SVEC传感器捕捉的数据)以M表示。可以用一组结构模型(即局部映射函数)来从M重建一幅高动态范围彩色图像H。针对每个色彩信道λ,为16种局部邻域样式p中的每一种优化一个局部映射函数(在图22中展示为样式2201-2216)。令Mp表示M的一个属于某特定局部样式p的邻域。而后可以按如下估计在该邻域中心的所期望的高动态范围色彩值:
H p ( i + 0.5 , j + 0.5 ) = Σ ( x , y ) ⋐ S p ( i , j ) Σ n = 0 N P C p ( x , y , λ , n ) M p n ( x , y ) - - - ( 18 )
其中Sp(i,j)是像素(i,j)的邻域,如在图23中所说明的那样。Np是多项式映射的级数。Cp表示对于每个色彩信道λ,在每个邻域像素(x,y)的局部样式p的多项式系数。这一示例性实现使用具有偶数长度和偶数宽度的方形邻域。如在图23中所说明的那样,高动态范围色彩值在不在网格上的邻域中心(i+0.5,j+0.5)计算。应当注意,该方法可以用于任何尺寸和形状的邻域,也可以用于计算不在与在网格上位置/区域(即像素)的图像值。还应当注意,尽管在这一示例性实现中使用了一个相对简单的映射函数(公式(18)),该算法还可以使用某种更为通用的映射函数,如前面在SVE和SVC环境中所讨论的公式(3)和(10)的。
与SVE和SVC程序相类似,对于每种局部样式p,公式(18)也可以以矩阵形式来表达,如在图14中所说明的那样:
Bp(λ)=ApCp(λ)                              (19)
其中Ap是一个矩阵,其每一行包含属于局部样式类型p的邻域Mp的像素值的幂。Ap包含乘幂到多项式级数Np的像素值。Cp(λ)是一个列向量,包含对于色彩λ和局部样式类型p的每个邻域像素的多项式系数。Bp(λ)是一个列向量,表示对每个λ和p的所期望的高动态范围的不在网格上邻域的中心色彩值Hp(λ)。序号λ为简短起见可以省掉,则该映射函数的估计可以提出为一个加权最少方块问题:
A p T W p 2 A p C p = A p T W p 2 B p - - - ( 20 )
其中Wp是对每个邻域线形方程加权的一个对角矩阵。
在该多项式映射函数中的系数数量可以按以下计算。令uxv表示邻域的尺寸和形状,并令Np表示与局部SVEC样式p相对应的多项式级数。令P表示在该SVEC图像中的不同领域样式的数量。则系数数量|C|由以下公式给出:
| C | = ( P + uv Σ p = 1 P N p ) Λ - - - ( 21 )
举例来说,当对于p=1...P有A=3(如对于色彩R、G和B),P=16(对于使用4种不同像素曝光度和一个Bayer彩色拼图的SVEC感测器),Np=2,且u=v=6(即一个具有偶数长度和偶数宽度的方形邻域)时,系数数量为3504。
如本发明所述的用于增强图像质量的基于模型的方法可以应用于任何对图像光的维度的同时采样,如通过公式(4)、(11)和(18)的映射函数间的相似性及通过对SVC、SVE和SVEC符号和方法的描述间的相似性所证明的那样。
如本发明所述的一种SVEC算法可以使用几幅由高动态范围彩色传感器捕捉的图像来“学***移,以较佳地用每种类型的曝光度样式与每种类型的图像邻域的每个可能的组合来训练(即优化)映射函数参数(步骤2408)。移动步骤2408的输出是一组训练图像2410。对每幅训练图像应用一个SVC遮罩2412和一个SCE遮罩2418,以产生一幅12位SVEC图像2422(步骤2416和2420)。在所说明的示例中,首先应用SVC遮罩2412(步骤2414),从而产生SVC中间数据2416。但是,也可以首先应用SVE遮罩。通过裁剪255个强度水平的像素数据来降低每幅12位SVEC图像的品质,而后重新量化这些数据(步骤2424)以产生一幅8位图像M(展示为项2426)。上述过程模拟了一个低动态范围SVEC传感器。如在图14中所说明的那样,从图像M(项2426)中,对每种样式p解析出一组邻域Ap。对每个色彩信道和局部区域,从训练图像H中解析出列向量Bp。所说明的实现使用具有偶数长度和宽度的方形邻域。与SVC和SVE算法相类似地,在SVEC算法中,将这些训练图像位移半个像素(步骤2430)。另外,如前面关于SVE和SVC图像所讨论的那样,如果在训练时,无法知道以后将要由该算法增强的图像的明锐度水平,就最好使用明锐的图像来训练,因为模型的准确度对于增强较明锐的图像最为重要,并且在任何情况下,明锐的训练图像都很可能包括足够的平滑区域,以便还能够实现对平滑和/或模糊图像的增强。
与SVC和SVE算法相类似,每个属于这些局部SVEC样式类型之一的邻域的数据用公式(8)和(9)来规范化(步骤2428)。在规范化后,用一个加权最少方块程序2432来计算加权规范矩阵Apnorm TWp 2Apnor m和右手侧回归向量Apnorm TWp 2Bpnorm。在该最少方块程序2432中,对于每幅训练图像,累积每个规范矩阵和回归向量(步骤2434)。一旦该训练算法处理了所有这些高动态范围彩色图像(包括对每幅图像的多种曝光度和多个平移),就获得了最少方块的结果(步骤2436),并以该结果来使用公式(20)对每种类型的邻域样式p和每个色彩信道λ计算多项式映射函数的系数Cp(项2440)(步骤2438)。
在重建阶段(在图25中说明了其一个示例),该算法将优化了的多项式系数应用于用低动态范围(如8位)Bayer拼图SVEC传感器捕捉的SVEC图像2502。与训练阶段相类似,该重建算法对与这些SVEC图像中的每种局部样式p相对应的每个邻域Ap进行规范化(步骤2504)。然后将系数Cp(项2440)为每个色彩信道应用于每种规范化了的邻域样式,从而获得Bpnorm=ApnormCp(步骤2506)。而后该算法将Bpnorm反规范化(步骤2508)。由于SVEC样式是基于对场景光的不均匀的量化,因此根据在SVEC感测器遮罩中所用的离散曝光度的数量,不均匀地量化这些反规范化了的数据(步骤2510),从而产生一幅重建的高动态范围彩色图像2512。
如本发明所述的一种SVCE方法已经用在4种不同曝光度下取得的10幅高动态范围彩色(每色彩信道12位)训练图像测试过。[这要确认]这些训练图像表示了多种自然场景。对于每幅12位训练图像的每个像素,该算法从2个色彩信道中删除信息,从而将每个像素转换成一个单色像素。这一程序的结果是一组12位SVC图像。而后按照在图22中所说明的SVEC曝光度样式,将这些对应于每个场景的4种曝光度的12位SVC图像组合起来。而后如在图24的流程图中所说明的那样,将结果的12位SVEC图像降低品质,以产生8位SVEC图像。而后用一种加权最少方块技术来计算局部多项式映射函数(级数3)的系数。接着,将10幅测试图像(与在训练中所用的图像不同)降低品质以产生示例性8位SVEC测试图像。而后按照图25的流程图,将该模型(使用由训练程序产生的系数)应用于这些8位SVEC测试图像。图34的柱状图将本发明的结构重建算法的结果与一个双向立方体插值程序的结果相比较。如该图表所说明的,该结构模型产生更多低差错的像素和更少高差错的像素。
尽管前面的示例都强调排列在两个空间维度(即竖直和水平维度)中的测量样式,但如本发明所述的测量样式并不仅限于空间维度。特别是,对于视频应用,希望可以利用某种关于空间和时间两者局部相异的测量样式,如在图6E和6F中所说明的那样。在图6E中,在第一个时间T1取得一幅视频帧。该视频帧包括对从场景的两个区域640和642发出的光的测量。区域640和642是以它们在空间和时间两方面的位置来定义的。图6F中,第二幅视频帧在第二个时间T2接收到,该第二幅视频帧包括对从场景的两个不同位置670和644接收的光的测量。应当注意,在图6E和6F所说明的示例中,位置640和670在空间上具相同的位置,但在时间维度上具不同的位置。类似地,位置642和644在空间维度上具相同的位置,但在时间维度上具不同的位置。
举例而言,可以用在图6A中所说明的测量样式来进行对位置640、642和644的测量,该测量样式可以是在竖直空间维度(如由样式元素602和604所定义的)和时间维度(如由样式元素604和606所定义的)上局部相异的。
可以用如本发明所述的一种算法来增强数据的时间解析度,如在图6E和6F中所说明的多帧图像数据。移动物体690在连续图像间的空间平移取决于这些图像被捕捉的频率(即帧速率)。可以用本发明的结构模型来提升(即增加)一个视频序列的有效时间帧速率。这些模型可以有效地用来在原始捕捉的帧之间引入额外的帧。为了进行时间解析度的提升,结构模型预测在图像中多少亮度值预期会在两帧间变化。
可以用真实或合成的高时间解析度数据来优化模型参数。这样的高时间解析度数据对应于多种运动物体的高帧速率视频序列。将这些高解析度数据在时间解析度上降低品质,以合成所测量的数据。在这种情况下的局部样式对应于三维的像素值块,在其中每个块都有一定范围的空间和时间位置。参照图28,举例来说,这样一个块2814可以包含一个3×3空间窗口(一共36个被测量的像素)的四幅视频帧2802、2804、2806和2808,如在图28中所说明的那样。在一个中间帧2812中的一个像素值2810组成一个高解析度图像数据。解析度增强算法将这些高质量图像数据值2810表达成这36个所测量的值2814的一个多项式函数。用这一结构模型来预测一幅完整的中间图像帧。因此一组结构模型可以预测许多中间帧,从而增加任何所捕捉的视频序列的时间解析度。
另外,如本发明所述的某种算法还可以用以增强以不同曝光度捕捉的一系列图像形式的图像数据的解析度。这样一个序列可以用许多技术来捕捉。举例来说,用户可以简单地改变相机的光圈或曝光度设置并用每种设置捕捉一幅单独的图像。而且,相机本身可以用多个快速接替的集成时间来获取一系列图像。这两种方法中的任一种都能产生一系列如在图26中所说明的类型。很显然所说明的序列2606包含足够产生一幅高动态范围图像的信息,因为非常亮的场景区域可以在最小曝光的图像2602中不饱和地捕捉,而非常暗的区域可以在最高曝光的图像2604中以很好的清晰度捕捉。可以用如本发明所述的某种多项式模型来计算从对应于每个像素的不同曝光度的亮度值集合到单个高动态范围值的映射。尽管所测量的数据很可能包含饱和的效果,而且尽管用以捕捉这些数据的传感器的辐射测定响应函数可能与所期望的高质量图像的响应函数不同,但本发明的算法可以优化一个能够为输出图像的每个像素产生一个高动态范围值的强大的多项式模型。而且,这些输入和输出图像还可以包含色彩信息。在彩色图像的情况下,可以为每个色彩信道分别完成映射。可作替换的是,可以只对亮度数据使用映射方法,在这种情况下每个像素的色彩可以从未饱和(并且不是太暗)的测量值之一中选择。
尽管前面的讨论将亮度和色彩强调为图像像素的重要属性,但从某个场景所反射的光也展现出偏振状态。成像了的光的偏振状态传达了有用的信息,如在场景中镜面反射的存在(高亮光)和反射表面的材质属性。如上面所讨论的那样,可以用具有不同线性偏振角度的偏振滤镜来覆盖一个图像感测器的像素。举例来说,可以将偏振滤镜加到在一个Bayer拼图的所有绿色滤镜上。一个场景位置的偏振状态可以用来自相邻像素的偏振数据来计算。
如本发明所述,可以通过使用结构模型来增强偏振数据的解析度。图30说明了在一个图像感测器阵列上的偏振和色彩滤镜的示例性排列。所获得的图像包含色彩和偏振两种信息。如本发明所述的某种算法训练用像素的一小个邻域来估计红、绿、蓝和偏振状态的高质量值的结构模型。如在上面所讨论的SVEC算法中那样,在图30中所说明的偏振样式中出现四种不同的局部样式。相应地,估计四组结构模型,每组包括四个模型部件,每个部件各针对红、绿、蓝和偏振角度数据。这些结构模型结合了偏振测量的空间相关性和色彩测量的空间相关性。另外,这些模型结合了色彩信道和偏振测量之间的相关性。
如果色彩不是特别所关心的,可以使用一个具有不同偏振滤镜的单色感测器。在这样一个***中,结构模型简单地估计在图像中每个点的亮度值和偏振状态。
前面的讨论强调了使用包含色彩敏感度特征的局部相异样式和强度敏感度特征的局部相异样式的组合的测量样式。但是,这一讨论并不意味对可以组合的测量样式的类型数量的任何限制。举例而言,如在图7中所说明的那样,可以期望组合起色彩敏感度(特征706和708)、强度敏感度(特征710和712)和偏振敏感度(特征714和716)样式。而且,尽管在图7中所说明的示例包含感测器组702和704,每组包含单个感测器,但感测器组702和704的每组也可以由多个感测器构成,与在图6B中所展示的感测器组602、604和606相类似。
在多特征的情况下,使用几个结构模型,以包含所出现的多种类型的样式。这一方法可应用于如在图31中所说明的示例性样式的情况,在其中图像数据包含对强度和频谱属性的空间和时间采样。用结构模型来预测增强了空间、强度、频谱和/或时间解析度的高质量图像数据。
而且,应当理解如本发明所述的某种重建算法并不限于表示在可见光谱内光的样式的图像数据。在此描述的技术可应用于任何电磁辐射或任何其它辐射的成像,包括(但不限于)红外(IR)成像、X射线成像、磁共振(MR)成像、合成孔径雷达(SAR)成像、基于粒子的成像(如电子显微)和声学(如超声波)成像。
还可以用如本发明所述的一种方法来增强一幅图像的空间解析度。一幅已捕捉的图像可以认为是一幅理论上较高质量图像的一个低解析度版本。可以用结构模型来将一幅或多幅低解析度图像的局部邻域映射到单个的高解析度值,该高解析度值可以认为是前述较高质量图像的一个像素。在图27中说明了这一技术的一个示例。在图像中的每个像素2702都由一个已测量的亮度值表示。算法进行一次解析度的提升,在其中用所测量的像素值的一个局部邻域2704来对不在该像素网格上的新位置2706估计最有可能的值。在整个图像上重复这一过程,以产生一幅具有原来所测量的图像四倍像素的图像。信息理论建议不可以用传统的技术来进行这一解析度提升。然而,本发明的结构模型使用外在信息来获得额外的解析度。特别的是,这些模型的系数结合了通过训练程序学习到的典型场景的知识。
与上述的示例相类似,空间解析度增强算法使用一组高解析度图像来进行训练程序。这些训练图像在解析度上被降低了品质。然后该算法优化一个多项式结构模型的参数,该模型适合于将所测量值的局部(如3×3或5×5)邻域映射到在一个新位置的高质量数据。对于每个这些新的高质量值计算一个单独的结构模型。在这一示例中,使用了三个结构模型,每个都针对各新位置2706。这些模型一起实现了对任何给定已测量图像的解析度提升。而且,尽管上面的示例包含了对一组非彩色亮度数据的空间解析度的增强,但该技术还可以应用于表示两个或多个色彩信道的数据。对于三个色彩信道(典型的是R、G、B),最好使用总共9个结构模型。
还可以用如本发明所述的一种方法来增强图像数据的空间解析度。在理论上,一个场景点可以具有任意的频谱分布函数——即作为波长函数的任意的反射系数。然而,在实际上,创造物体表面的自然或人工物理过程总是趋向于使表面反射系数的频谱分布平滑与表现良好。其结果是,少量的频谱样本(如用窄带频谱滤镜做的测量)可以足够于准确地预测在宽广范围照明条件下一大类真实世界表面的完整频谱分布。图29说明了一个用不同频谱滤镜捕捉的示例性场景的几幅图像。这些图像也可以用高质量多频谱图像来合成。用具有相对较低频谱解析度的真实或合成图像来开发及优化能够对在所测量(或合成)的波长之间的波长预测亮度值的结构模型。这一方法实现了对基于用常规(R-G-B)彩色相机捕捉的图像的场景点频谱分布估计的确定。在某个较佳实施例中,用于重建的所测量数据的邻域2902是在空间和频谱两个维度上定义的。这一实施例利用在邻近场景点频谱分布之间的相关性,从而提供在每个位置的较高质量的频谱分布的重建。
在本领域技术人员会明白图1-31的方法可以在多种标准计算机平台上实现,这些平台在由图4、5、9、15、16、20、21、24和25定义的合适软件的控制下运作。在某些情况下,专用的计算机硬件(如一块在常规个人计算机中的***板卡)可以增强上面方法的运作效率。
图32和33说明了适合于实行本发明的典型计算机硬件。参照图32,计算机***包括一个处理部件3210、一个显示器3220、一个键盘3230和一个通讯***设备3240(如一个调制解调器)。该***还可以包括其它的输入设备,如一个用于扫描图像媒介3200的扫描仪3250。另外,该***可以包括一个打印机3260。该计算机***一般包括一个或多个硬盘驱动器3270,可以读写计算机可读取媒介,如磁媒介(即软盘)或光媒介(如CD-ROM或DVD),以存储数据和应用软件。没有示出的是,还可以包括其它输入设备,如一个数字指点仪(如一个“鼠标”)以及诸如此类。
图33是一幅进一步说明处理部件3210的功能框图。该处理部件3210一般包括一个处理单元3310、控制逻辑3320和一个存储器单元3330。处理部件3210最好还可以包括一个定时器3350和输入/输出端口3340。处理部件3210还可以包括一个依靠在处理单元中所用的微处理器的协处理器3360。控制逻辑3320与处理单元3310一起,提供处理存储器单元3350与输入/输出端口3340间通讯所必需的控制。定时器3350为处理单元3310和控制逻辑3320提供一个定时参考信号。协处理器3360提供增强了的能力,以进行实时的复杂计算,如密码算法所要求的那些计算。
存储器单元3330可以包括不同种类的存储器,如易失性的和非易失性的存储器和只读及可编程的存储器。举例来说,如在图33中所示出的那样,存储器单元3330可以包括只读存储器(ROM)3331、电子可擦除可编程只读存储器(EEPROM)3332及随机访问存储器(RAM)3333。不同的计算机处理器、存储器配置、数据结构以及诸如此类都可以用以实行本发明,而本发明并不限于某个特定的平台。举例而言,尽管在图32和33中处理部件3210被展示成一个计算机***的一部分,但处理部件3210及/或其部件也可以结合入一个成像仪,如一个数字视频摄像机或一个数字静止图像照相机。
如本领域技术人员会明白的那样,由图4、5、9、15、16、20、21、24和25定义的软件可以以广泛多种编程语言来编写。如本发明所述的示例性软件算法已经以MatlabTM语言(版本5.3.1)编写。在此所附的附录中提供了用于示例性SVEC、SVC与SVE算法的计算机源代码。
尽管本发明是联系特定示例性实施例来描述的,但应当理解可以对所披露的实施例进行多种变化、替换和改造,而不背离在所附权利要求中所阐明的本发明的精神和范围。
                       附录
               MATLAB(5.3.1版本)源代码
                     SVEC代码
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

  %%       SPATIALLY VARYING EXPOSURE AND COLOR       %%

  %%             RUN ALL PROCESSES ONESHOT            %%

  %%                MATLAB VERSION 5.31               %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %% Author    :Srinivasa G.Narasimhan               %%

  %% PI        :Professor Shree K.Nayar              %%

  %% Laboratory:Columbia Automated Vision Environment

  %% Department:Computer Science                     %%

  %% University:Columbia University,NY,10027       %%

  %% Date      :June 2000                            %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Initialization Routine

  init

  % Memory Cleenup and Packing

  clean;

  pack;

  % Training Code

  training

  % Memory Cleanup and Packing

  clean;

  pack;

  % Reconstructing/Testing Code

  testing

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%                   CLEANUP MEMORY                 %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  close all;

  clear all;

  pack;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%           PARAMETER INITIALIZATION CODE          %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
				
				<dp n="d34"/>
  % Number of Patterns

  numpatterns=16;

  % Number of Color Channels

  numchannels=3;

  % Order of Polynomial

  poly_order=3;

  % Pattern Neighborhood Size

  neigh=6;

  neigh=neigh*neigh;

  % SVE Exposures with Ratio 1:4

  e1=1.0;

  e2=1.0/4.0;

  e3=1.0/16.0;

  e4=1.0/64.0;

  % Exposure Scaling of High Quality Data

  numexp=1;

  expo=[1.0,0.5,0.7,0.3,1.5,2.0,3.0,0.125]′;

  % Compute Window Weights(Optional)

  % window_weight=weights(neigh,numpatterns);

  window_weight=ones(sqrt(neigh),sqrt(neigh));

  % Initialize Blur window size and Sigma

  blurwindow=5;

  blurrsigma=0.5;

  % Initialize Input/Output File names

  trainfile=′train′;

  testfile=′test′;

  % Initialize Filenames to save Regression Data

  coeffsfile=′Coeffs.mat′;

  matfile=′RegressionMatrix.mat′;

  vecfile=′RegressionVector.mat′;

  % Save Initialization Parameters

  save initfile*;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%         TRAINING USING HIGH QUALITY DATA         %%

  %% HIGH QUALITY DATA :HIGH DYNAMIC RANGE+COLOR     %%
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Load Parameter Initialization file

  load initfile;

  % Data Structure Initialization

  initialMatrix=zeros(neigh*poly_order,neigh*poly order,numpatterns);

  initialVector=zeros(neigh*poly_order,numchannels,numpatterns);
				
				<dp n="d35"/>
  coeffs=zeros(neigh*poly_order,numchannels,numpatterns);

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%                TRAINING PHASE                    %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  traincount=0;

  % File containing List of Training Images

  fid_train=fopen(trainfile);

  % Do until file ends

  while 1

  % Get Filename from each line of the train file

  filename=fgetl(fid_train);

  if ~isstr(filename),break,end

  % Read in the High Dynamic Range(HDR)Image

  [imgHDR_train,mapH]=imread(filename);

  [r,c,m]=size(imgHDR_train);

  imgOriginal=double(imgHDR_train);

  % Shift the Original HDR Image

  imgOriginalShift=interpShift(imgOriginal,′cubic′);

  % Loop over several Exposure Scales

  for expos=1:1:numexp,

  % Loop over image shifts corresponding to ail patterns

  for pati=1:1:sqrt(numpatterns),

    for patj=1:1:sqrt(numpatterns),

    clear imgHDR_train;

    % Train with a different exposure

    imgHDR_train=double(uint16(imgOriginal(pati:1:r,patj:1:c,:)...

                    *expo(expos,1)));

    imgHDR_shift=double(uint16(imgOriginalShift(pati:1:r,patj:1:c,:)...

                    *expo(expos,1)));

    % Gaussian Blurring to avoid aliasing

    imgHDR_blur=gaussBlur(imgHDR_shift,blurwindow,blursigma);

    % Convert to SVC

    imgSVC_train=img2svc(imgHDR_train);

    % Convert to SVEC

    imgSVE_train=svc2svec(imgSVC_train,e1,e2,e3,e4);

    % Convert HDR to LDR

    imgLDR_train=HDR2LDR(imgSVE_train);
				
				<dp n="d36"/>
      % Train using the HDR image

      [updatedMatrix,updatedVector]=...

           LearnCoeffs(imgLDR_train,imgHDR_blur,...

                  poly_order,numpatterns,neigh,window_weight);

      % Update Normal Covariance Matrix

      initialMatrix=initialMatrix+updatedMatrix;

      initialVector=initialVector+updatedVector;

      traincount=traincount+1

        end

      end

    end

    % Clear Image Memory

    clear img*;

  end % End Training-While 1

  % Optimize Memory Usage

  pack;

  pack;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%           LEAST SQUARES MINIMIZATION             %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Loop over each pattern

  for pattern=1:1:numpatterns,

    % Print the Condition Number and Rank of the Pattern Matrix

    cond(initialMatrix(:,:,pattern))

    rank(initialMatrix(:,:,pattern))

    % Loop over each color channel

    for channel=1:1:numchannels,

      % Use any one of the following 4 techniques to solve

      % for the Coefficients

      % Direct Solution of Normal Equations

      coeffs(:,channel,pattern)=...
      initialMatrix(:,:,pattern)\initialVector(:,channel,pattern);

      % Use Cholesky Decomposition

      % R_Matrix=chol(initialMatrix(:,:,pattern));

      % Y_Vector=R_Matrix′\initialVector(:,channel,pattern);

      % coeffs(:,channel,pattern)=R_Matrix\Y_Vector;

      % Use Orthogonalization

      % [Q_Matrix,R_Matrix,E_Matrix]=qr(initialMatrix(:,:,pattern));
				
				<dp n="d37"/>
      % Y_Vector=Q_Matrix′*initialVector(:,channel,pattern);

      % coeffs(:,channel,pattern)=R_Matrix\Y_Vector;

      % Linear Regression

      % [coeffs(:,channel,pattern)]=regress(...

      %         initialVector(:,channel,pattern),...

      %         initialMatrix(:,:,pattern));

      % Compute Residual Solution for Verification Purposes

      RESIDUAL=(initialVector(:,channel,pattern)-...

              initialMatrix(:,:,pattern)*coeffs(:,channel,pattern))...

              /initialVector(:,channel,pattern);

    end

  end

  % Finished Training on the given images

  strcat(′Finished′,′...Training′)

  % Save the Regression Data in files

  save(coeffsfile,′coeffs′);

  save(mat file,′initialMatrix′);

  save(vecfile,′initialVector′);

  % Optimize Memory Usage

  clear initial*;

  pack;

  pack;

  }

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%            OFFSET IMAGE BY 0.5 PIXELS            %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function [imgShift]=interpShift(img,method)

    % Initializations

    [r,c,m]=size(img);

    imgShift=zeros(r,c,3);

    % Create on-grid points

    [x,y]=meshgrid(1:1:r,1:1:c);

    % Create off-grid points(offset by 0.5 pixels)

    [hx,hy]=meshgrid(1.5:1:r,1.5:1:c);

    % Prepare data in all the color channels

    zr=img(1:1:r,1:1:c,1)′;

    zg=img(1:1:r,1:1:c,2)′;

    zb=img(1:1:r,1:1:c,3)′;

    % Shift by interpolation

    imgShift(1:1:r-1,1:1:c-1,1)=interp2(x,y,double(zr),hx,hy,method)′;
				
				<dp n="d38"/>
    imgShift(1:1:r-1,1:1:c-1,2)=interp2(x,y,double(zg),hx,hy,method)′;

    imgShift(1:1:r-1,1:1:c-1,3)=interp2(x,y,double(zb),hx,hy,method)′;

  }

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%          CONVERT HIGH QUALITY IMAGE TO           %%

  %%            AN SVC BAYER PATTERN IMAGE            %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[imgsvc]=img2svc(imgHDR)

    [r,c,m]=size(imgHDR);

    % Initialize SVC map

    svc_map=zeros(r,c,m);

    % Initialize R′s

    svc_map(1:2:r,1:2:c,1)=...

          ones(prod(size(1:2:r)),prod(size(1:2:c)));

    % Initialize G′s

    svc_map(1:2:r,2:2:c,2)=...

          ones(prod(size(1:2:r)),prod(size(2:2:c)));

    svc_map(2:2:r,1:2:c,2)=...

          ones(prod(size(2:2:r)),prod(size(1:2:c)));

    % Initialize B′s

    svc_map(2:2:r,2:2:c,3)=...

          ones(prod(size(2:2:r)),prod(size(2:2:c)));

    % Initialize SVC Image

    imgsvc=zeros(r,c);

    % Generate the SVC map using Bayer pattern

    for channel=1:1:3

      imgsvc=imgsvc+...

        double(svc_map(:,:,channel)).* double(imgHDR(:,:,channel));

    end

  }

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%                APPLY EXPOSURE MASK               %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function y=expmask(x,mask)

    y=x .* mask;

  }

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%       CONVERT FROM SVC IMAGE TO SVEC IMAGE       %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[imgSVEC]=svc2svec(imgSVC,e1,e2,e3,e4)
				
				<dp n="d39"/>
    % Input the SVE Mask

    sve_mask=[e2,e2,e1,e4;...

               e1,e1,e3,e2;...

               e3,e4,e4,e2;...

               e3,e4,e1,e3;];

    % Generate the SVEC image

    imgSVEC=blkproc(double(imgSVC),[4,4],′expmask′,sve_mask);

  }

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%            BLUR HIGH QUALITY IMAGE TO            %%

  %%        AVOID ALIASING DURING RECONSTRUCTION      %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[imgBlur]=gaussBlur(imgHDR,window,sigma)

    % Create the gaussian kernel

    kernel=fspecial(′gaussian′,window,sigma);

    % Blur each channel separately

    imgBlur(:,:,1)=filter2(kernel,imgHDR(:,:,1));

    imgBlur(:,:,2)=filter2(kernel,imgHDR(:,:,2));

    imgBlur(:,:,3)=filter2(kernel,imgHDR(:,:,3));

  }

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%   DOWNGRADE DYNAMIC RANGE FROM 12-BIT TO 8-BIT   %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[imgLDR]=HDR2LDR(imgHDR)

    % From 16 bits,shift right 4 bits and crop the 4 MSBs

    imgLDR=uint8(imgHDR ./ 16.0);

  }

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%       UPDATING REGRESSION MATRIX AND VECTOR      %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[theMatrix,solutionVector]=...

       LearnCoeffs(imgLDR,imgHDR,...

                      poly_order,numpatterns,neigh,window_weights)

    % Initializations regarding size of images

    [rl,cl,numchannels]=size(imgLDR);

    [rh,ch,numchannels]=size(imgHDR);

    % Initialization regarding Pattern Neighborhoods

    sneigh=sqrt(neigh);

    fsneigh=floor(sneigh/2);

    csneigh=ceil(sneigh/2);

    % Pattern Repetition Width
				
				<dp n="d40"/>
    rep_width=sqrt(numpatterns);

    % Number of Training Data Points

    k=floor((rl-(sneigh-1))/rep_width)*...

       floor((cl-(sneigh-1))/rep_width);

  % Initializa Data Structures

  ParameterData=zeros(k,neigh*poly_order);

  HDR_Training_Data=zeros(k,numchannels);

  % Data Structure for Normal Equations

  theMatrix=zeros(neigh*poly_order,neigh*poly_order,numpatterns);

  solutionVector=zeros(neigh*poly_order,numchannels,numpatterns);

  % Loop over different patterns

  pattern=0;

  for pati=1:1:rep_width,

    for patj=1:1:rep_width,

      pattern=pattern+1;

      % Loop over the neighborhood

      m=0;

      for i=1:1:sneigh,

    for j=1:1:sneigh,

           m=m+1;

           indi=i+pati-1;

           indj=j+patj-1;

           % Form the Parameter Data Matrix

      ParameterData(:,m)=...

             double(reshape(imgLDR...

           (indi:rep_width:rl-max(sneigh+3-indi,0),...

                indj:rep_width:cl-max(sneigh+3-indj,0)), k,l));

        end

      end

      % Normalize patterns by their energy

      energy(:,1)=sqrt(sum(ParameterData(:,1:1:neigh).^ 2,2));

      avg_energy=mean(energy);

      for m=1:1:neigh,

    ParameterData(:,m)=(ParameterData(:,m)-avg_energy) ./ energy;

      end

      % Loop over the Polynomial Order

      for order=1:1:poly_order-1,

        ParameterData(:,neigh*order+1:1:neigh*(order+1))=...

           ParameterData(:,(order-1)*neigh+1:1:neigh*order).*...

       ParameterData(:,1:1:neigh);

      end

      % Loop over the Color Channels

      for channel=1:1:numchannels,

    HDR_Training_Data(:,channel)=(double(reshape(imgHDR...
				
				<dp n="d41"/>
              (pati+fsneigh:rep_width:rh-(csneigh+3-pati),...

              patj+fsneigh:rep_width:ch-(csneigh+3-patj),channel),...

              k,1))-avg_energy) ./ energy;

        end

        % Set up the Regression Matrix

        theMatrix(:,:,pattern)=ParameterData′*parameterData;

        % Set up the Solution Vector for all Color Channels

        for channel=1:1:numchannels,

      solutionVector(:,channel,pattern)=...

             ParameterData′*HDR_Training_Data(:,channel);

        end

      end

    end

  }

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%       RECONSTRUCTING HIGH QUALTTY DATA FROM      %%

  %%             LOW QUALITY TEST DATA                %%

  %%      LOW QUALITY  DATA :8-BIT SVEC IMAGE        %%

  %%  HIGH QUALITY DATA :HIGH DYNAMIC RANGE+COLOR    %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Load Initialization File

  load initfile;

  % Load the computed Coefficients File

  load(coeffsfile);

  % File containing the list of low quality images

  fid_test=fopen(testfile);

  testcount=0;

  % Do until file ends

  while 1

    filename=fgetl(fid_test);

    if ~isstr(filename),break,end

    % Read in the test HDR image

    [imgHDR_test,mapH]=imread(filename);

    [rt,ct,mt]=size(imgHDR_test);

    % Convert to SVC

    imgSVC_test=img2svc(double(imgHDR_test));

    % Convert to SVEC

    imgSVE_test=svc2svec(imgSVC_test,e1,e2,e3,e4);

    % Convert HDR to LDR

    imgLDR_test=HDR2LDR(imgSVE_test);
				
				<dp n="d42"/>
    % Add Gaussian Noise

    imgLDR_test=double(imgLDR_test)+normrnd(0,0.25,rt,ct);

    % Apply coeffs to the image

    imgComputed=ApplyCoeffs(coeffs,imgLDR_test,poly_order,...

                     numpatterns,neigh,window_weight);

    % Non-uniformly quantize output image(Optional)

    imgNonUnifomQuant=nonUniformQuant(uint16(imgComputed),e1,e2,e3,e4); 

    % Output Image

    imwrite(uint16(imgNonUniformQuant),...

    strcat(′E:\matlabrll\svec\output\′,filename),′tif′);

    clear img*;

    testcount=testcount+1

  end

  }

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%     RECONSTRUCT HIGH QUALITY DATA BY APPLYING    %%

  %%          COEFFICIENTS TO LOW QUALITY DATA        %%

  %%            LOW QUALITY DATA:8-BIT SVEC          %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[imgHDR]=ApplyCoeffs(coeffs,imgLDR,poly_order,...

                 numpatterns,neigh,window_weights)

    numchannels=3;

    % Initializations regarding LDR Image

    [rl,cl,nc]=size(imgLDR);

    imgHDR=zeros(rl,cl,numchannels);

    % Initializations regarding pattern neighborhoods

    sneigh=sqrt(neigh);

    fsneigh=floor(sneigh/2);

    csneigh=ceil(sneigh/2);

    % Pattern Repetition Width

    rep_width=sqrt(numpatterns);

    % Number of Training Data Points

    k=floor((rl-(sneigh-1))/rep_width)*...

       floor((cl-(sneigh-1))/rep_width);

    % Initializa Data Structure for Parameter Matrix

    ParameterData=zeros(k,neigh*poly_order);

    % Loop over different Patterns

    pattern=0;

    for pati=1:1:rep_width,
				
				<dp n="d43"/>
        for patj=1:1:rep_width,

          pattern=pattern+1;

          % Loop over the pattern neighborhood

          m=0;

          for i=1:1:sneigh,

            for j=1:1:sneigh,

              m=m+1;

              indi=i+pati-1;

              indj=j+patj-1;

              % Form the Parameter Matrix

              ParameterData(:,m)=window_weights(i,j)*...

                double(reshape(imgLDR...

                (indi:rep_width:rl-(sneigh+3-indi),...

                indj:rep_width:cl-(sneigh+3-indj)),k,l));

            end

          end

          % Normalize by pattern energy

          energy(:,1)= sqrt(sum(ParameterData(:,1:1:neigh).^2,2));

          avg_energy=mean(energy);

          for m=1:1:neigh,

            ParameterData(:,m)=...

              (ParameterData(:,m)-avg_energy) ./ energy;

          end

          % Loop over the Polynomial Order

          for order=1:1:poly_order-1,

            ParameterData(:,neigh*order+1:1:neigh*(order+1))=...

              ParameterData(:,(order-1)*neigh+1:1:neigh*-rder).*...

              ParameterData(:,1:1:neigh);

          end

          % Loop over each channel

          for channel=1:1:numchannels,

            % Apply coeffs to the patterns and inverse normalize the patterns

            HDR_Data=(energy.*...

               (ParameterData*coeffs(:,channel,pattern)))+avg_energy;

          % Reconstruct the High Quality Image

          imgHDR(pati+fsneigh:rep_width:rl-(csneigh+3-pati),...

                 patj+fsneigh:rep_width:cl-(csneigh+3-patj),channel)=...

                 reshape(HDR_Data,floor((rl-(sneigh-1))/rep_width),...

                                   floor((cl-(sneigh-1))/rep_width));

        end

      end

    end

  }
				
				<dp n="d44"/>
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%      NON-UNIFORM QUANTIZATION TO 1024 LEVELS     %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[imgNUQuant,binmap]=nonUniformQuant(imgHDR,e1,e2,e3,e4)

    [r,c,m]=size(imgHDR);

    % Right shift 4 bits to create 12 bit image

    imgHDR=double(imgHDR)./16.0;

    imgNUQuant=zeros(r,c,m);

    binmap=zeros(r,c);

    % Initialize number of bins and levels

    numbins=[256,256,256,256]′;

    levels=4096*[e4,e3,e2,e1]′;

    % Compute bin width for each level

    width=zeros(4,1);

    width(1,1)=(levels(1,1)/numbins(1,1));

    width(2,1)=((levels(2,1)-levels(1,1))/numbins(2,1));

    width(3,1)=((levels(3,1)-levels(2,1))/numbins(3,1));

    width(4,1)=((levels(4,l)-levels(3,1))/numbins(4,1));

    % Quantine according to the bin width in the particular level range

    imgQ1=imgHDR .* (imgHDR<=levels(1,1));

    map1=(1.0/width(1,1))*(imgHDR<=levels(1,1));

    imgQ1=floor(imgQ1 ./ width(1,1)) .* width(1,1);

    imgQ2=imgHDR .* (imgHDR<=levels(2,1)&amp;imgHDR>levels(1,1))-...

                    levels(1,1);

    map2=(1.0/width(2,1))*(imgHDR<= levels(2,1)&amp;imgHDR>levels(1,1));

    imgQ2=levels(1,1)+floor(imgQ2./width(2,1)) .* width(2,1);

    imgQ3=imgHDR .* (imgHDR<=levels(3,1)&amp;imgHDR>levels(2,1))-...

                    levels(2,1);

    map3=(1.0/width(3,1))*(imgHDR<=levels(3,1)&amp;imgHDR>levels(2,1));

    imgQ3=levels(1,1)+levels(2,1)+...

           floor(imgQ3 ./ width(3,1)) .* width(3,1);

    imgQ4=imgHDR .* (imgHDR<=levels(4,1)&amp;imgHDR>levels(3,1))-...

                    levels(3,1);

    map4=(1.0/width(4,1))*(imgHDR<=levels(4,1)&amp;-imgHDR>levels(3,1));

    imgQ4=floor(imgQ4 ./ width(4,1)) .* width(4,1)+levels(1,1)+...

           levels(2,1)+levels(3,1);

    % Combine to form Non-Uniformly Quantized Image

    imgNUQuant=(imgQ1+imgQ2+imgQ3+imgQ4).*16;

    binmap=sqrt(sum((map1+map2+map3+map4).^2,3));

  }
                           SVC代码
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%       SPATIALLY VARYING COLOR RESPONSE           %%

  %%             RUN ALL PROCESSES ONESHOT            %%

  %%                MATLAB VERSION 5.31               %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %% Author    :Srinivasa G.Narasimhan               %%

  %% PI        :Professor Shree K.Nayar              %%

  %% Laboratory:Columbia Automated Vision Environment%%

  %% Department:Computer Science                     %%

  %% University:Columbia University,NY,10027       %%

  %% Date      :June 2000                            %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Initialization Routine

  init

  % Memory Cleanup and Packing

  clean;

  pack;

  % Training Code

  training

  % Memory Cleanup and Packing

  clean;

  pack;

  % Reconstructing/Testing Code

  testing

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%                   CLEANUP MEMORY                 %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  close all;

  clear all;

  pack;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%           PARAMETER INITIALIZATION CODE          %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Number of Patterns

  numpatterns=4;

  % Number of Color Channels

  numchannels=3;

  % Order of Polynomial

  poly_order=2;
				
				<dp n="d46"/>
  % Pattern Neighborhood Size

  neigh=6;

  neigh=neigh*neigh;

  % Cross terms

  numcross=0;

  % Compute Window Weights

  % window_weight=weights(neigh,numpatterns);

  window_weight=ones(sqrt(neigh),sqrt(neigh),numpatterns);

  % Initialize Input/Output File names

  trainfile=′train′;

  testfile=′test′;

  % Initialize Filenames to save Regression Data

  coeffsfile=′Coeffs.mat′;

  matfile=′RegressionMatrix.mat′;

  vecfile=′RegressionVector.mat′;

  % Save Initialization Parameters

  save initfile*;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%         TRAINING USING HIGH QUALITY DATA         %%

  %%     HIGH QUALITY DATA :HIGH QUALITY COLOR       %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Load Initializatiohs

  load initfile;

  % Data Structure Initialization

  initialMatrix=zeros(neigh*poly_order+1+numcross,neigh*poly_order+1...

                       +numcross,numpatterns);

  initialVector=zeros(neigh*poly_order+1+numcross,numohannels,numpatterns);

  coeffs=zeros(neigh*poly_order+1+numcross,numchannels,numpatterns);

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%                       TRAINING PHASE                         %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      traincount=0;

      % Training Phase

          fid train=fopen(trainfile);

      % Do until file ends

      while 1

        filename=fgetl(fid_train);

        if ~isstr(filename),break,end

        % Read in the train HDR image

        [imgHDR_train,mapH]=imread(filename);
				
				<dp n="d47"/>
    [r,c,m]=size(imgHDR_train);

    %Shift the image by 0.5 pixels

    imgHDR_shift=interpShift(imgHDR_train,′cubic′);

    % Convert to SVC

    imgSVC_train=img2svc(imgHDR_train);

    %  Train using the image

     [updatedMatrix,updatedVector]=...

          LearnCoeffs(imgSVC_traint,imgHDR_shift,...

                     poly_order,numpatterns,neigh,window_weight);

    % For Normal Covariance

    initialMatrix=initialMatrix+updatedMatrix;

    initialVector=initialVcctor+updatedVector;

    traincount=traincount+1

    clear img*;

   end % End Training-While 1

    pack;

    pack;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%%%%%%%%%%        LEAST SQUARES MINIMIZATION          %%%%%%%%%%%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Optimice

  pattern=0;

  for pati=1:1:sqrt(numpatterns),

   for patj=1:l:sqrt(numpatterns),

    pattern=pattern+1;

    cond(initialMatrix(:,:,pattern))

    rank(initialMatrix(:,:,pattern))

    %  Find the initial guess by solving the linear system

    for channel=1:1:nupachannels,

        %Direct Inverse of Normal Equations

      coetfs(:,channel,pattern)=...

      initialMatrix(:,:,pattern)\initialVector(:,channel,pattern);

      %Use Cholesky Decomp

      %R_Matrix=chol(initialMatrix(:,:,pattern));

      %Y_Veotor=R_Matrix′\initialVector(:,channel,pattern);

      %coeffs(:,channel,pattern)=R_Matrix\Y_Vector;

      %Usc Orthogonalization

      %[Q_Matrix,R_Matrix,E_Matrix]=qr(initialMatrix(:,:,pattern));
       %Y_Vector=Q_Matrix′* initial Vector(:,channel,Pattern );
				
				<dp n="d48"/>
           % coeffs(:,channel,pattern)=R_Matrix\Y_Vector;

           % Linear Regression

           % [coeffs(:,channel,pattern)]=regress(...

           %   initialVector(:,channel,pattern),...

           %   initialMatrix(:,:,pattern));

           %RESIDUAL=(initialVector(:,channel,pattern)-...

           %      initialMatrix(:,:,pattern)*coeffs(:,channel,pattern))...

               %       ./initialVector(:,channe1,pattern);

      end

    end

  end

  % Finished Training on the given images

  strcat(′Finished′,′...Training′)

  % Save the Regression Data in files

  save(coeffsfile,′coeffs′);

  save(matfile,′initialMatrix′);

  save(vecfile,′initialVector′);

  % Optimize Memory Usage

  clear initial*;

  pack;

  pack;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%            OFFSET IMAGE BY 0.5 PIXELS            %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[imgShift]=interpShift(img,method)

    % Initiali zations

    [r,c,m]=size(img);

    imgShift=zeros(r,c,3);

    % Create on-grid points
    [x,y]=meshgrid(1:1:r,1:1:c);

    % Create off-grid points(offset by 0.5 pixels)

    [hx,hy]=meshgrid(1.5:1:r,1.5:1:c);

    % Prepare data in all the color channels

    zr=img(1:1:r,1:1:c,1)′;

    zg=img(1:1:r,1:1:c,2)′;

    zb=img(1:1:r,1:1:c,3)′;

    %Shift by interpolation

    imgShift(1:1:r-1,1:1:c-1,1)=interp2(x,y,double(zr),hx,hy,method)′;

    imgShift(1:1:r-1,1:1:c-1,2)=interp2(x,y,double(zg),hx,hy,method)′;

    imgShift(1:1:r-1,1:1:c-1,3)=interp2(x,y,double(zb),hx,hy,method)′;
				
				<dp n="d49"/>
  }

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%          CONVERT HIGH QUALITY IMAGE TO           %%

  %%            AN SVC BAYER PATTERN IMAGE            %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[imgsvc]=img2svc(imgHDR)

    [r,c,m]=size(imgHDR);

    % Initialize SVC map

    svc_map=zeros(r,c,m);

    % Initialize R′s

    svc_map(1:2:r,1:2:c,1)=...

          ones(prod(size(1:2:r)),prod(size(1:2:c)));

    % Initialize G′s

    svc_map(1:2:r,2:2:c,2)=...

          ones(prod(size(1:2:r)),prod(size(2:2:c)));

    svc_map(2:2:r,1:2:c,2)=...

          ones(prod(size(2:2:r)),prod(size(1:2:c)));

    % Initialize B′s

    svc_map(2:2:r,2:2:c,3)=...

          ones(prod(size(2:2:r)),prod(size(2:2:c)));

    % Initialize SVC Image

    imgsvc=zeros(r,c);

    % Generate the SVC map using Bayer pattern

    for channel=1:1:3

      imgsvc=imgsvc+...

        double(svc_map(:,:,channel)) .* double(imgHDR(:,:,channel));

    end

  }

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%       UPDATING REGRESSION MATRIX AND VECTOR      %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[theMatrix,solutionVector]=...

        LearnCoeffs(imgLDR,imgHDR,...

                   poly_order,numpatterns,neigh,window_weights)

      % Some initializations

      [rl,cl,numchannels]=size(imgLDR);

      [rh,ch,numchannels]=size(imgHDR);

      sneigh=sqrt(neigh);

      fsneigh=floor(sneigh/2);

      csneigh=ceil(sneigh/2);
				
				<dp n="d50"/>
  % Number of cross terms

  % numcross=prod(size(nchoosek((1:1:neigh),2)))/2;

    numcross=0;

    % Number of Data Points

    k=floor((rl-(sneigh-1))/2)*floor((cl-(sneigh-1))/2);

    numchannels=3;

  % Initializa Data Structures

  ParameterData=zeros(k,neigh*poly_order+1+numcross);

  ParameterData(:,neigh*poly_order+l+numcross)=ones(k,l);

  HDR_Training_Data=zeros(k,numchannels);

  % For Normal Eq

  theMatrix=zeros(neigh*poly_order+l+...

    numcross,neigh*poly_order+1+numcross,numpatterns);

  solutionVector=zeros(neigh*poly_order+1+...

    numcross,numchannels,numpatterns);

  % Loop over different Patterns

  pattern=0;

  for pati=1:1:numpatterns/2,

    for patj=1:1:numpatterns/2,

      pattern=pattern+1;

      % Loop over the neighborhood

      m=0;

      for i=1:1:sneigh,
         for j=1:1:sneigh,

                m=m+1;

                indi=i+pati-1;

                indj=j+patj-1;

               ParameterData(:,m)=window_weights(i,j,pattern)*...

                 double(reshape(imgLDR...

                 (indi:2:rl-(sneigh+1-indi),indj:2:cl-(sneigh+1-indj)),k,1));

         end

       end

        % Normalize by energy

        energy(:,1)=sqrt(sum(ParameterData(:,1:1:neigh).^2,2));

        avg_energy=mean(energy);

        for m=1:1:neigh,

          ParameterData(:,m)=...

             (ParameterData(:,m)-avg_energy) ./ energy;

         end

         % Loop over the Polynomial Order

        for order=1:1:poly_order-1,

          ParameterData(:,neigh*order+1:1:neigh*(order+1))=...

             ParameterData(:,(order-1)*neigh+1:1:neigh*order).*...

             ParameterData(:,1:1:neigh);
				
				<dp n="d51"/>
          end

          % Loop over each color channel

          for channel=1:1:numchannels,

            HDR_Training_Data(:,channel)=(double(reshape(imgHDR...

                (pati+fsneigh:2:rh-(csneigh+1-pati),...

                 patj+fsneigh:2:ch-(csneigh+1-patj),channel),...

                k,l))-avg_energy)./energy;

          end

          % Set up the regression matrix

          theMatrix(:,:,pattern)=ParameterData′* ParameterData;

            for channel=1:1:numchannels,

              solutionVector(:,channel,pattern)=...

                    ParameterData′*HDR_Training_Data(:,channel);

            end

    end

  end

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%       RECONSTRUCTING HIGH QUALITY DATA FROM      %%

  %%             LOW QUALITY TEST DATA                %%

  %%      LOW QUALITY  DATA :S-BIT SVC IMAGE         %%

  %%      HIGH QUALITY DATA :HIGH QUALITY COLOR      %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Load Initialization File

  load initfile;

  % Load the computed Coefficients File

  load(coeffsfile);

  % File containing the list of low quality images

  fid_test=fopen(testfile);

  testcount=0;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%                       TESTING PHASE                %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        % Do until file ends

        while 1

          filename=fgetl(fid_test);

          if ~isstr(filename),break,end

          % Read in the test HDR image

          [imgHDR_test,mapH]=imread(filename);

          [r,c,m]=size(imgHDR_test);

          % figure,imshow(imgHDR_test);

          % Convert to SVC
				
				<dp n="d52"/>
            imgSVC_test=img2svc(imgHDR_test);

            % Apply coeffs to the image

            imgComputed=ApplyCoeffs(coeffs,imgSVC_test,poly_order,...

                           numpatterns,neigh,window_weight);

            % Output Image

            imwrite(uint8(imgComputed),...

            strcat(′E:\matlabrll\svc\output\′,filename),′bmp′);

           clear img*;

           testcount=testcount+1

           end

  clear all;

  pack;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%     RECONSTRUCT HIGH QUALITY DATA BY APPLYING    %%

  %%          COEFFICIENTS TO LOW QUALITY DATA        %%

  %%            LOW QUALITY DATA:8-BIT SVC           %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[imgHDR]=ApplyCoeffs(coeffs,...

               imgLDR,poly_order,numpatterns,neigh,window_weights)

      % Some Initializations

      [rl,cl,nc]=size(imgLDR);

      numchannels=3;

      imgHDR=zeros(rl,cl,numchannels);

      sneigh=sqrt(neigh);

      fsneigh=floor(sneigh/2);

      csneigh=ceil(sneigh/2);

    % Number of cross terms

    %numcross=prod(size(nchoosek((1:1:neigh),2)))/2;

     numcross=0;

     % Number of Data Points

     k=floor((rl-(sneigh-1))/2)*floor((cl-(sneigh-1))/2);

    % Initialize data structures

    ParameterData=zeros(k,neigh*poly_order+1+numcross);

    ParameterData(:,poly_order*neigh+1+numcross)=ones(k,1);

     % Loop over all types of local patterns

     pattern=0;

     for pati=1:1:sqrt(numpatterns),

       for patj=1:1:sqrt(numpatterns),

         pattern=pattern+1;

         m=0;
				
				<dp n="d53"/>
    for i=1:1:sneigh,

       for j=1:1:sneigh,

              m=m+1;

              indi=i+pati-1;

              indj=j+patj-1;

              ParameterData(:,m)=window_weights(i,j,pattern)*...

                 double(reshape(imgLDR...

                 (indi:2:rl-(sneigh+1-indi),indj:2:cl-(sneigh+1-

  indj)),k,1));

       end

      end

      % Normalize by energy

      energy(:,1)=sqrt(sum(ParameterData(:,1:1:neigh).^2,2));

          avg_energy=mean(energy);

          for m=1:1:neigh,

            ParameterData(:,m)=...

              (ParameterData(:,m)-avg_energy) ./ energy;

          end

      % Loop over the Polynomial Order

     for order=1:1:poly_order-1,

       ParameterData(:,neigh*order+1:1:neigh*(order+1))=...

         ParameterData(:,(order-1)*neigh+1:1:neigh*order).*...

         ParameterData(:,1:1:neigh);

     end

     % Loop over each color channel

     for channel=1:1:numchannels,

       HDR_Data=(energy.*...

       (ParameterData*coeffs(:,channel,pattern)))+avg_energy;

       imgHDR(pati+fsneigh:2:rl-(csneigh+1-pati),...

               patj+fsneigh:2:cl-(csneigh+1-patj),channel)=...

               reshape(HDR_Data,floor((rl-(sneigh-1))/2),...

               floor((cl-(sneigh-1))/2));

      end

    end

  end
                        SVE代码
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%           SPATIALLY VARYING EXPOSURES            %%

  %%             RUN ALL PROCESSES ONESHOT            %%

  %%                MATLAB VERSION 5.31               %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %% Author    :Srinivasa G.Narasimhan               %%

  %% PI        :Professor Shree K.Nayar              %%

   %% Laboratory:Columbia Automated Vision Environment%%

   %% Department:Computer Science                     %%

   %% University:Columbia University,NY,10027       %%

   %% Date      :June 2000                            %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Initialization Routine

  init

  % Memory Cleanup and Packing

  clean;

  pack;

  % Training Code

  training

  % Memory Cleanup and Packing

  clean;

  pack;

  % Reconstructing/Testing Code

  testing

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%                   CLEANUP MEMORY                 %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  close all;

  clear all;

  pack;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%           PARAMETER INITIALIZATION CODE          %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Number of Patterns

  numpatterns=4;

  % Number of Color Channels

  numchannels=1;

  % Order of Polynomial

  poly_order=3;
				
				<dp n="d55"/>
  % Pattern Neighborhood Size

  neigh=5;

  neigh=neigh*neigh;

  % Number of cross terms

  % numcross=prod(size(nchoosek((1:1:neigh),2)))/2;

  numcross=0;

  % SVE Exposures

  e1=1.0/2.0;

  e2=1.0/8.0;

  e3=1.0/32.0;

  e4=1.0/128.0;

  % Number of overall exposures

  numexp=8;

  expo=(1.0,0.5,0.7,0.3,1.5,2.0,3.0,0.125]′;

  % Compute Window Weights

  % window_weight=weights(neigh,numpatterns);

  window_weight=ones(sqrt(neigh),sqrt(neigh));

  % Initialize Input/Output File names

  trainfile=′train′;

  testfile=′test′;

  % Initialize Filenames to save Regression Data

  coeffsfile=′Coeffs.mat′;

  matfile=′RegressionMatrix.mat′;

  vecfile=′RegressionVector.mat′;

  % Save Initialization Parameters

  save initfile *;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%         TRAINING USING HIGH QUALITY DATA         %%

  %%      HIGH QUALITY DATA :HIGH DYNAMIC RANGE      %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Load Initializations

  load initfile;

  % Data Structure Initialization

  initialMatrix=zeros(neigh*poly_order+1,neigh*poly_order+1,numpatterns);

  initialVector=zeros(neigh*poly_order+1,numpatterns);

  coeffs=zeros(neigh*poly_order+1,numpatterns);

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%              TRAINING PHASE                %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  traincount=0;

  fid_train=fopen(trainfile);
				
				<dp n="d56"/>
  % Do until file ends

  while 1

    filename=fgetl(fid_train);

    if ~isstr(filename),break,end

    % Read in the train HDR image

    [imgHDR_train,mapH]=imread(filename);

    [r,c,m]=size(imgHDR_train);

    if(isrgb(imgHDR_train))

      imgHDR_train=rgb2gray(imgHDR_train);

    end

   imgOriginal=double(imgHDR_train);

   for expos=1:1:numexp,

    for pati=1:1:sqrt(numpatterns),

      for patj=1:1:sqrt(numpatterns),

        clear imgHDR_train;

      imgHDR_train=double(uint16(imgOriginal(pati:1:r,patj:1:c)...

                                  *expo(expos,1)));

      % Convert to SVE

       imgSVE_train=img2sve(imgHDR_train,e1,e2,e3,e4);

      % Convert HDR to LDR

       imgLDR_train=HDR2LDR(imgSVE_train);

      % Train using the image

       [updatedMatrix,updatedVector]=...

        LearnCoeffs(imgLDR_train,imgHDR_train,...

                poly_order,numpatterns,neigh,window_weight);

       % For Normal Covariance

       initialMatrix=initialMatrix+updatedMatrix;

       initialVector=initialVector+updatedVeetor;

       traincount=traincount+1

     end

    end

   end

    clear img*;

  end % End Training-While 1

  pack;

  pack;
				
				<dp n="d57"/>
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%       LEAST SQUARES MINIMIZATION          %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

      % Optimize

      for pattern=1:1:numpatterns,

         cond(initialMatrix(:,:,pattern))

         rank(initialMatrix(:,:,pattern))

            % Direct Inverse of Normal Eguations

            coeffs(:,pattern)=...

            initialMatrix(:,:,pattern)\initialVector(:,patte

      end

  % Finished Training on the given images

  strcat(′Finished′,′...Training′)

  % Save the Regression Data in files

  save(coeffsfile,′coeffs′);

  save(matfile,′initialMatrix′);

  save(vecfile,′initialVector′);

  % Optimize Memory Usage

  clear initial*;

  pack;

  pack;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%         CONVERT FROM HIGH DYNAMIC RANGE          %%

  %%               IMAGE TO SVEC IMAGE                %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[imgsve]=img2sve(imgHDR,e1,e2,e3,e4)

         [r,c]=size(imgHDR);

         sve_map=ones(r,c);

         % Generate the SVE map

         for i=1:2:r-1,

         for j=1:2:c-1,

           sve_map(i,j)=1.0/e1;

           sve_map(i,j+1)=1.0/e2;

           sve_map(i+1,j)=1.0/e3;

           sve_map(i+1,j+1)=1.0/e4;

         end

         end

         % Generate the SVE image

         imgsve=double(imgHDR) ./ double(sve_map);

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%       UPDATING REGRESSION MATRIX AND VECTOR      %%
				
				<dp n="d58"/>
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[theMatrix,solutionVector]=...

        LearnCoeffs(imgLDR,imgHDR,...

                        poly_order,numpatterns,neigh,window_weights)

      % Some initializations

       [rl,cl]=size(imgLDR);

       [rh,ch]=size(imgHDR);

       sneigh=sqrt(neigh);

       fsneigh=floor(sneigh/2);

       csneigh=ceil(sneigh/2);

       % Number of Data Points

       k=floor((rl-(sneigh-1))/2)*floor((cl-(sneigh-1))/2);

      % Initializa Data Structures

      ParameterData=zeros(k,neigh*poly_order+1);

      ParameterData(:,neigh+poly_order+1)=ones(k,1);

      HDR_Training_Data=zeros(k,1);

      % For Normal Eq

      theMatrix=zeros(neigh*poly_order+1,neigh*poly_order+1,numpatterns);

      solutionVector=zeros(neigh*poly_order+1,numpatterns);

       % Loop over different Patterns

      pattern=0;

      for pati=1:1:sqrt(numpatterns),

        for patj=1:1:sqrt(numpatterns),

           pattern=pattern+1;

           % Loop over the neighborhood

           m=0;

          for i=1:1:sneigh,

             for j=1:1:sneigh,

                    m=m+1;

                    indi=i+pati-1;

                    indj=j+patj-1;

                      ParameterData(:,m)=window_weights(i,j)*...

                                            double(reshape(imgLDR...

                                          (indi:2:rl-(sneigh+1-indi),...

                                          indj:2:cl-(sneigh+1-indj)),k,1));

           end

         end

          % Normalize by energy

          energy(:,1)=sqrt(sum(ParameterData(:,1:1:neigh).^2,2));

          avg_energy=mean(energy);

          for m=1:1:poly_order*neigh+1,

            ParameterData(:,m)=(ParameterData(:,m)-avg_energy) ./ energy;

          end
				
				<dp n="d59"/>
      % Loop over the Polynomial Order

      for order=1:1:poly_order-1,

      ParameterData(:,neigh*order+1:1:neigh*(order+1))=...

            ParameterData(:,(order-1)*neigh+1:1:neigh*order).*.

            ParameterData(:,1:1:neigh);

      end

      % Setup the right side vector

      HDR_Training_Data=(double(reshape(imgHDR...

            (pati+fsneigh:2:rh-(csneigh+1-pati),...

             patj+fsneigh:2:ch-(csneigh+1-patj)),...

                 k,1))-avg_energy) ./ energy;

      % Set up the regression matrix

      theMatrix(:,:,pattern)=(ParameterData′)*(ParameterData);

       solutionVector(:,pattern)=...

               (ParameterData′)*(HDR_Training_Data);

     end

   end

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%      RECONSTRUCTING HIGH QUALITY DATA FROM       %%

  %%             LOW QUALITY TEST DATA                %%

  %%      LOW QUALITY  DATA :8-BIT SVE IMAGE         %%

  %%      HIGH QUALITY DATA :HIGH DYNAMIC RANGE      %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Load Initialization File

  load initfile;

  % Load the computed Coefficients File

  load(coeffsfile);
  % File containing the list of low quality images

  fid_test=fopen(testfile);

  testcount=0;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%           TESTING PHASE                 %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  % Do until file ends

  while 1

       filename=fgetl(fid_test);

       if ~isstr(filename),break,end

        % Read in the test HDR image
				
				<dp n="d60"/>
       [imgHDR_test,mapH]=imread(filename);

       [rt,ct]=size(imgHDR_test);

       if(isrgb(imgHDR_test))

         imgHDR_test=rgb2gray(imgHDR_test);

       end

      % Convert to SVE

      imgSVE_test=img2sve(double(imgHDR_test),e1,e2,e3,e4);

      % Convert HDR to LDR

      imgLDR_test=HDR2LDR(imgSVE_test);

       % Apply coeffs to the image

        imgComputed=ApplyCoeffs(coeffs,imgLDR_test,poly_order,...

                     numpatterns,neigh,window_weight);

       % Non-uniformly quantize output image

       %imgNonUniformQuant=nonUniformQuant...

       %  (uintl6(imgComputed),e1,e2,e3,e4);

        % Output Image

       imwrite(uint16(imgComputed),...

          strcat(′E:\matlabrll\sve\output\′,filename),′tif′);

       %imwrite(uint16(imgNonUniformQuant),...

       %  strcat(″E:\matlabrll\sve\output\″,filename),′tif′);

       clear img*;

        testcount=testcount+1

     end

      clear all;

      pack;

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  %%     RECONSTRUCT HIGH QUALITY DATA BY APPLYING    %%

  %%          COEFFICIENTS TO LOW QUALITY DATA        %%

  %%            LOW QUALITY DATA:8-BIT SVE           %%

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  function[imgHDR]=ApplyCoeffs(coeffs,...

                imgLDR,poly order,numpatterns,neigh,window_weights)

     % Some Initializations

     [rl,cl]=size(imgLDR);

      imgHDR=zeros(rl,cl);

      sneigh=sqrt(neigh);

      fsneigh=floor(sneigh/2);

      csneigh=ceil(sneigh/2);

      % Number of Data Points

      k=floor((rl-(sneigh-1))/2)*floor((cl-(sneigh-1))/2);
				
				<dp n="d61"/>
  ParameterData=zeros(k,neigh*poly_order+1);

  ParameterData(:,poly_order*neigh+1)=ones(k,l);

  % Loop over all patterns

   pattern=0;

   for pati=1:1:sqrt(numpatterns),

     for patj=1:1:sqrt(numpatterns),

       pattern=pattern+1;

       m=0;

      for i=1:1:sneigh,

         for j=1:1:sneigh,

                m=m+1;

                indi=i+pati-1;

                indj=j+patj-1;

                ParameterData(:,m)=window_weights(i,j)*...

                   double(reshape(imgLDR...

                   (indi:2:rl-(sneigh+1-indi),...

                   indj:2:cl-(sneigh+1-indj)),k,1));

         end

      end

      % Normalize by energy

      energy(:,1)=sqrt(sum(ParameterData(:,1:1:neigh).^2,2));

     avg_energy=mean(energy);

     for m=1:1:poiy_order*neigh+1,

       ParameterData(:,m)=...

           (ParameterData(:,m)-avg_energy) ./ energy;

     end

     % Loop over the Polynomial Order

     for order=1:1:poly_order-1,

       ParameterData(:,neigh*order+1:1:neigh*(order+1))=...

          ParameterData(:,(order-1)*neigh+1:1:neigh*order).*...

          ParameterData(:,1:1:neigh);

     end

     HDR_Data=(energy.*...

          (ParameterData * coeffs(:,pattern)))+avg_energy;

          imgHDR(pati+fsneigh:2:rl-(csneigh+1-pati),...

          patj+fsneigh:2:cl-(csneigh+1-patj))=...

          reshape(HDR_Data,floor((rl-(sneigh-1))/2),...

                            floor((cl-(sneigh-1))/2));

    end

  end

Claims (76)

1、一种用于得到增强的解析度数据的方法,其特征在于包含:
接收利用按某种局部相异测量样式排列的多个敏感度特征而产生的第一组数据;以及
使用某个模型来处理该第一组数据,从而产生第二组数据,该模型具有用某种学习程序确定的第一个模型参数。
2、一种如权利要求1所述的方法,其特征在于其中的多个敏感度特征包含下列之一:
多个强度敏感度特征;
多个波长敏感度特征;
多个时间范围敏感度特征;
多个偏振敏感度特征;
多个距离敏感度特征;
多个温度敏感度特征;以及
多个磁共振信号敏感度特征。
3、一种如权利要求1所述的方法,其特征在于其中的多个敏感度特征包含:
多个强度敏感度特征;以及
多个波长敏感度特征。
4、一种如权利要求1所述的方法,其特征在于其中的多个敏感度特征中的至少一个具有对下列之一的测量敏感度依赖:
电磁信号波长;以及
声学信号波长。
5、一种如权利要求1所述的方法,其特征在于其中的多个敏感度特征包含第一和第二个敏感度特征,而第一个模型参数对应于第一个敏感度特征,该模型进一步具有对应于第二个敏感度特征的第二个模型参数,第一组数据包含第一个和第二个数据值,该第一个数据值利用第一个敏感度特征来测量,该第二个数据值利用第二个敏感度特征来测量;并且其中的使用该模型的步骤包含将至少一个多项式函数应用于该第一个和第二个数据值,从而产生至少第三个数据值,该第三个数据值是第二组数据的一个成员,第一个模型参数控制将该至少一个多项式函数应用于第一个数据值,而第二个模型参数控制将该至少一个多项式函数应用于第二个数据值。
6、一种如权利要求5所述的方法,其特征在于其中的至少一个多项式函数中每一个都具有包含该第一个和第二个模型参数之一的至少一个系数。
7、一种如权利要求6所述的方法,其特征在于其中的第一和第二组数据中每一个都包含图像数据,第一个敏感度特征包含某个强度敏感度特征,而第二个敏感度特征包含某个波长敏感度特征。
8、一种如权利要求1所述的方法,其特征在于其中的第一组数据是由某种相机的图像传感器产生的图像数据。
9、一种如权利要求8所述的方法,其特征在于其中的相机包含SVE相机、SVC相机、SVEC相机之一。
10、一种用于学习某个模型以用在数据解析度增强中的方法,包含:
一个处理多幅高质量图像的图像处理步骤,该图像处理步骤包含:
将某个模拟的感测器响应函数应用于每幅高质量图像,从而产生一组训练数据,
将某个局部相异的拼图样式函数应用于这些训练数据,从而产生一组降低了质量的数据,
计算这些降低了质量的数据的一个加权规范矩阵,
将该加权规范矩阵加到一个矩阵和中,
计算这些降低了质量的数据的一个回归向量,以及
将该回归向量加到一个向量和中;
用该矩阵和来确定一个累积规范矩阵;
用该向量和来确定一个累积回归向量;以及
求解一个最少方块方程以确定一个用于产生增强的解析度数据的模型的一个系数矩阵,该最少方块方程包含第一边和第二边,第一边包含累积规范矩阵和系数矩阵的一个乘积,第二边包含累积回归向量,而系数矩阵包含一个多项式函数的系数。
11、一种如权利要求10所述的方法,其特征在于其中的图像处理步骤进一步包含在计算加权规范矩阵和计算回归向量的步骤前将这些降低了质量的数据降低品质。
12、一种用于在至少一个维度上感测信号的方法,其特征在于包含:
获取包含对第一个信号集的至少一次测量的第一个测量集,该第一个信号集包含来自第一个区域至少一个维度上的至少一个信号,该第一个测量集基于关于该第一个信号集的第一和第二个敏感度特征,第一个敏感度特征具有第一种特征类型,而第二个敏感度特征具有第二种特征类型;
获取包含对第二个信号集的至少一次测量的第二个测量集,该第二个信号集包含来自第二个区域至少一个维度上的至少一个信号,该第二个测量集基于关于该第二个信号集的第一个敏感度特征,该第二个测量集进一步基于关于该第二个信号集的第三个敏感度特征,第三个敏感度特征具有第二种特征类型,而该第三个敏感度特征不同于第二个敏感度特征;以及
获取包含对第三个信号集的至少一次测量的第三个测量集,该第三个信号集包含来自第三个区域至少一个维度上的至少一个信号,该第三个测量集基于关于该第三个信号集的第四个敏感度特征,第四个敏感度特征具有第一种特征类型,而该第四个敏感度特征不同于第一个敏感度特征。
13、一种如权利要求12所述的方法,其特征在于其中的至少一个维度包含下列之一:
一个空间维度;以及
一个时间维度。
14、一种如权利要求12所述的方法,其特征在于其中的第一种和第二种特征类型中的至少一种是对下列之一的某种相应敏感度特征依赖:
信号强度;以及
信号波长。
15、一种如权利要求12所述的方法,其特征在于其中的第一种特征类型是对信号波长的某种敏感度特征依赖,而第二种特征类型是对信号强度的某种敏感度特征依赖。
16、一种如权利要求15所述的方法,其特征在于其中的第一种敏感度特征对具有在大约绿色波长范围以外的波长的电磁辐射有降低了的敏感度。
17、一种如权利要求16所述的方法,其特征在于其中的第四种敏感度特征对具有在下列之一以外的波长的电磁辐射有降低了的敏感度:
大约红色波长范围;以及
大约蓝色波长范围。
18、一种如权利要求17所述的方法,其特征在于进一步包含使用第一、第二和第三个测量集来形成某个场景的一幅图像,该场景包含第一、第二和第三个区域。
19、一种用于在至少一个维度上测量信号的方法,其特征在于包含:
获取包含对第一个信号集的至少一次测量的第一个测量集,该第一个信号集包含来自第一个区域至少一个维度上的至少一个信号,该第一个测量集具有关于该第一个信号集的第一、第二和第三个敏感度特征,第一个敏感度特征具有第一种特征类型,第二个敏感度特征具有第二种特征类型,而第三个敏感度特征具有第三种特征类型;以及
获取包含对第二个信号集的至少一次测量的第二个测量集,该第二个信号集包含来自第二个区域至少一个维度上的至少一个信号,该第二个测量集具有关于该第二个信号集的第一个敏感度特征,该第二个测量集进一步具有关于该第二个信号集的第四和第五个敏感度特征,第四个敏感度特征具有第二种特征类型,第五个敏感度特征具有第三种特征类型,该第四个敏感度特征不同于第二个敏感度特征,而该第五个敏感度特征不同于第三个敏感度特征。
20、一种如权利要求19所述的方法,其特征在于其中的至少一个维度包含下列之一:
一个空间维度;以及
一个时间维度。
21、一种如权利要求19所述的方法,其特征在于其中的第一种、第二种和第三种特征类型中的至少一种是对下列之一的某种相应敏感度特征依赖:
信号强度;以及
信号波长。
22、一种如权利要求19所述的方法,其特征在于其中的第一种特征类型是对信号波长的某种敏感度特征依赖,而第二种和第三种特征类型中的至少一种是对信号强度的敏感度特征依赖。
23、一种如权利要求22所述的方法,其特征在于其中的第一种敏感度特征对具有在大约绿色波长范围以外的波长的电磁辐射有降低了的敏感度。
24、一种如权利要求23所述的方法,其特征在于进一步包含使用第一和第二个测量集来形成某个场景的一幅图像,该场景包含第一和第二个区域。
25、一种用于得到增强的解析度数据的设备,其特征在于包含:
数据生成器,用于利用按某种局部相异测量样式排列的多个敏感度特征而产生的第一组数据;以及
模型处理器,用于处理该第一组数据,以产生第二组数据,该模型处理器具有用某种学习程序确定的第一个模型参数。
26、一种如权利要求25所述的设备,其特征在于其中的多个敏感度特征包含下列之一:
多个强度敏感度特征;
多个波长敏感度特征;
多个时间范围敏感度特征;
多个偏振敏感度特征;
多个距离敏感度特征;
多个温度敏感度特征;以及
多个磁共振信号敏感度特征。
27、一种如权利要求25所述的设备,其特征在于其中的多个敏感度特征包含:
多个强度敏感度特征;以及
多个波长敏感度特征。
28、一种如权利要求25所述的设备,其特征在于其中的多个敏感度特征中的至少一个具有对下列之一的测量敏感度依赖:
电磁信号波长;以及
声学信号波长。
29、一种如权利要求25所述的设备,其特征在于其中的多个敏感度特征包含第一和第二个敏感度特征,而第一个模型参数对应于第一个敏感度特征,模型处理器进一步具有对应于第二个敏感度特征的第二个模型参数,第一组数据包含第一个和第二个数据值,数据生成器利用第一个敏感度特征来产生第一个数据值,数据生成器利用第二个敏感度特征来产生第二个数据值;并且其中的模型处理器将至少一个多项式函数应用于该第一个和第二个数据值,从而产生至少第三个数据值,该第三个数据值是第二组数据的一个成员,第一个模型参数控制将该至少一个多项式函数应用于第一个数据值,而第二个模型参数控制将该至少一个多项式函数应用于第二个数据值。
30、一种如权利要求29所述的设备,其特征在于其中的至少一个多项式函数中每一个都具有包含该第一个和第二个模型参数之一的至少一个系数。
31、一种如权利要求30所述的设备,其特征在于其中的第一和第二组数据中每一个都包含图像数据,第一个敏感度特征包含某个强度敏感度特征,而第二个敏感度特征包含某个波长敏感度特征。
32、一种如权利要求25所述的设备,其特征在于其中的数据生成器包含某种相机的图像传感器。
33、一种如权利要求32所述的设备,其特征在于其中的相机包含SVE相机、SVC相机、SVEC相机之一。
34、一种用于学习某个模型以用在数据解析度增强中的设备,其特征在于包含:
第一个处理器,用于处理多幅高质量图像,包含:
第二个处理器,用于将某个模拟的感测器响应函数应用于多幅高质量图像中的每一幅,从而产生一组训练数据,
第三个处理器,用于将某个局部相异的拼图样式函数应用于这些训练数据,从而产生一组降低了质量的数据,
第四个处理器,用于计算这些降低了质量的数据的一个加权规范矩阵,
第五个处理器,用于将该加权规范矩阵加到一个矩阵和中,
第六个处理器,用于计算这些降低了质量的数据的一个回归向量,以及
第七个处理器,用于将该回归向量加到一个向量和中;
第八个处理器,用于用该矩阵和来确定一个累积规范矩阵;
第九个处理器,用于用该向量和来确定一个累积回归向量;以及
第十个处理器,用于求解一个最少方块方程以确定一个用于产生增强的解析度数据的模型的一个系数矩阵,该最少方块方程包含第一边和第二边,第一边包含累积规范矩阵和系数矩阵的一个乘积,第二边包含累积回归向量,而系数矩阵包含一个多项式函数的系数。
35、一种如权利要求34所述的设备,其特征在于其中的第一个处理器进一步包含第十一个处理器,用于将这些降低了质量的数据降低品质。
36、一种信号感测设备,其特征在于包含:
第一个感测器组,包含运行来接收第一个信号集的至少一个感测器,该第一个信号集包含来自第一个区域至少一个维度上的至少一个信号,该第一个感测器组具有关于该第一个信号集的第一和第二个敏感度特征,第一个敏感度特征具有第一种特征类型,而第二个敏感度特征具有第二种特征类型;
第二个感测器组,包含运行来接收第二个信号集的至少一个感测器,该第二个信号集包含来自第二个区域至少一个维度上的至少一个信号,该第二个感测器组具有关于该第二个信号集的第一个敏感度特征,该第二个感测器组进一步具有关于该第二个信号集的第三个敏感度特征,第三个敏感度特征具有第二种特征类型,而该第三个敏感度特征不同于第二个敏感度特征;以及
第三个感测器组,包含运行来接收第三个信号集的至少一个感测器,该第三个信号集包含来自第三个区域至少一个维度上的至少一个信号,该第三个感测器组具有关于该第三个信号集的第四个敏感度特征,第四个敏感度特征具有第一种特征类型,而该第四个敏感度特征不同于第一个敏感度特征。
37、一种如权利要求36所述的设备,其特征在于其中的至少一个维度包含下列之一:
一个空间维度;以及
一个时间维度。
38、一种如权利要求36所述的设备,其特征在于其中的第一种和第二种特征类型中的至少一种是对下列之一的相应敏感度特征依赖:
信号强度;以及
信号波长。
39、一种如权利要求36所述的设备,其特征在于其中的第一种特征类型是对信号波长的某种敏感度特征依赖,而第二种特征类型是对信号强度的某种敏感度特征依赖。
40、一种如权利要求39所述的设备,其特征在于其中的第一种敏感度特征对具有在大约绿色波长范围以外的波长的电磁辐射有降低了的敏感度。
41、一种如权利要求40所述的设备,其特征在于其中的第四种敏感度特征对具有在下列之一以外的波长的电磁辐射有降低了的敏感度:
大约红色波长范围;以及
大约蓝色波长范围。
42、一种如权利要求41所述的设备,其特征在于进一步包含一个处理器,用于使用第一、第二和第三个测量集来形成某个场景的一幅图像,该场景包含第一、第二和第三个区域。
43、一种信号感测设备,其特征在于包含:
第一个感测器组,包含运行来接收第一个信号集的至少一个感测器,该第一个信号集包含来自第一个区域至少一个维度上的至少一个信号,该第一个感测器组具有关于该第一个信号集的第一、第二和第三个敏感度特征,第一个敏感度特征具有第一种特征类型,第二个敏感度特征具有第二种特征类型,而第三个敏感度特征具有第三种特征类型;以及
第二个感测器组,包含运行来接收第二个信号集的至少一个感测器,该第二个信号集包含来自第二个区域至少一个维度上的至少一个信号,该第二个感测器组具有关于该第二个信号集的第一个敏感度特征,该第二个感测器组进一步具有关于该第二个信号集的第四和第五个敏感度特征,第四个敏感度特征具有第二种特征类型,第五个敏感度特征具有第三种特征类型,该第四个敏感度特征不同于第二个敏感度特征,而该第五个敏感度特征不同于第三个敏感度特征。
44、一种如权利要求43所述的设备,其特征在于其中的至少一个维度包含下列至少一个:
一个空间维度;以及
一个时间维度。
45、一种如权利要求43所述的设备,其特征在于其中的第一种、第二种和第三种特征类型中的至少一种是对下列之一的相应敏感度特征依赖:
信号强度;以及
信号波长。
46、一种如权利要求43所述的设备,其特征在于其中的第一种特征类型是对信号波长的某种敏感度特征依赖,而第二种和第三种特征类型中的至少一种是对信号强度的某种相应敏感度特征依赖。
47、一种如权利要求46所述的设备,其特征在于其中的第一种敏感度特征对具有在大约绿色波长范围以外的波长的电磁辐射有降低了的敏感度。
48、一种如权利要求47所述的设备,其特征在于进一步包含一个处理器,用于使用第一和第二个测量集来形成某个场景的一幅图像,该场景包含第一和第二个区域。
49、一种计算机可读取媒介,其特征在于具有一组可运行来指示处理器执行下列步骤的指令:
接收利用按某种局部相异测量样式排列的多个敏感度特征而产生的第一组数据;以及
使用某个模型来处理该第一组数据,从而产生第二组数据,该模型具有用某种学习程序确定的第一个模型参数。
50、一种如权利要求49所述的计算机可读取媒介,其特征在于其中的多个敏感度特征包含至少下列之一:
多个强度敏感度特征;
多个波长敏感度特征;
多个时间范围敏感度特征;
多个偏振敏感度特征;
多个距离敏感度特征;
多个温度敏感度特征;以及
多个磁共振信号敏感度特征。
51、一种如权利要求49所述的计算机可读取媒介,其特征在于其中的多个敏感度特征包含:
多个强度敏感度特征;以及
多个波长敏感度特征。
52、一种如权利要求49所述的计算机可读取媒介,其特征在于其中的多个敏感度特征中的至少一个具有对下列之一的测量敏感度依赖:
电磁信号波长;以及
声学信号波长。
53、一种如权利要求49所述的计算机可读取媒介,其特征在于其中的多个敏感度特征包含第一和第二个敏感度特征,而第一个模型参数对应于第一个敏感度特征,该模型进一步具有对应于第二个敏感度特征的第二个模型参数,第一组数据包含第一个和第二个数据值,该第一个数据值利用第一个敏感度特征来测量,该第二个数据值利用第二个敏感度特征来测量;并且其中的使用该模型的步骤包含将至少一个多项式函数应用于该第一个和第二个数据值,从而产生至少第三个数据值,该第三个数据值是第二组数据的一个成员,第一个模型参数控制将该至少一个多项式函数应用于第一个数据值,而第二个模型参数控制将该至少一个多项式函数应用于第二个数据值。
54、一种如权利要求53所述的计算机可读取媒介,其特征在于其中的至少一个多项式函数中每一个都具有包含该第一个和第二个模型参数之一的至少一个系数。
55、一种如权利要求54所述的计算机可读取媒介,其特征在于其中的第一和第二组数据中每一个都包含图像数据,第一个敏感度特征包含某个强度敏感度特征,而第二个敏感度特征包含某个波长敏感度特征。
56、一种如权利要求49所述的计算机可读取媒介,其特征在于其中的第一组数据是由某种相机的图像传感器产生的图像数据。
57、一种如权利要求56所述的计算机可读取媒介,其特征在于其中的相机包含SVE相机、SVC相机、SVEC相机之一。
58、一种计算机可读取媒介,其特征在于具有一组可运行来指示处理器执行下列步骤的指令:
一个处理多幅高质量图像的图像处理步骤,该图像处理步骤包含:
将某个模拟的感测器响应函数应用于每幅高质量图像,从而产生一组训练数据,
将某个局部相异的拼图样式函数应用于这些训练数据,从而产生一组降低了质量的数据,
计算这些降低了质量的数据的一个加权规范矩阵,
将该加权规范矩阵加到一个矩阵和中,
计算这些降低了质量的数据的一个回归向量,以及
将该回归向量加到一个向量和中;
用该矩阵和来确定一个累积规范矩阵;
用该向量和来确定一个累积回归向量;以及
求解一个最少方块方程以确定一个用于产生增强的解析度数据的模型的一个系数矩阵,该最少方块方程包含第一边和第二边,第一边包含累积规范矩阵和系数矩阵的一个乘积,第二边包含累积回归向量,而系数矩阵包含一个多项式函数的系数。
59、一种如权利要求58所述的计算机可读取媒介,其特征在于其中的图像处理步骤进一步包含在计算加权规范矩阵和计算回归向量的步骤前将这些降低了质量的数据降低品质。
60、一种计算机可读取媒介,其特征在于具有一组可运行来指示处理器执行下列步骤的指令:
获取包含对第一个信号集的至少一次测量的第一个测量集,该第一个信号集包含来自第一个区域至少一个维度上的至少一个信号,该第一个测量集基于关于该第一个信号集的第一和第二个敏感度特征,第一个敏感度特征具有第一种特征类型,而第二个敏感度特征具有第二种特征类型;
获取包含对第二个信号集的至少一次测量的第二个测量集,该第二个信号集包含来自第二个区域至少一个维度上的至少一个信号,该第二个测量集基于关于该第二个信号集的第一个敏感度特征,该第二个测量集进一步基于关于该第二个信号集的第三个敏感度特征,第三个敏感度特征具有第二种特征类型,而该第三个敏感度特征不同于第二个敏感度特征;以及
获取包含对第三个信号集的至少一次测量的第三个测量集,该第三个信号集包含来自第三个区域至少一个维度上的至少一个信号,该第三个测量集基于关于该第三个信号集的第四个敏感度特征,第四个敏感度特征具有第一种特征类型,而该第四个敏感度特征不同于第一个敏感度特征。
61、一种如权利要求60所述的计算机可读取媒介,其特征在于其中的至少一个维度包含下列之一:
一个空间维度;以及
一个时间维度。
62、一种如权利要求60所述的计算机可读取媒介,其特征在于其中的第一种和第二种特征类型中的至少一种是对下列之一的相应敏感度特征依赖:
信号强度;以及
信号波长。
63、一种如权利要求60所述的计算机可读取媒介,其特征在于其中的第一种特征类型是对信号波长的某种敏感度特征依赖,而第二种特征类型是对信号强度的某种敏感度特征依赖。
64、一种如权利要求63所述的计算机可读取媒介,其特征在于其中的第一种敏感度特征对具有在大约绿色波长范围以外的波长的电磁辐射有降低了的敏感度。
65、一种如权利要求64所述的计算机可读取媒介,其特征在于其中的第四种敏感度特征对具有在下列之一以外的波长的电磁辐射有降低了的敏感度:
大约红色波长范围;以及
大约蓝色波长范围。
66、一种如权利要求65所述的计算机可读取媒介,其特征在于该组指令进一步运行来指示处理器使用第一、第二和第三个测量集来形成某个场景的一幅图像,该场景包含第一、第二和第三个区域。
67、一种如权利要求60所述的计算机可读取媒介,其特征在于其中的处理器和计算机可读取媒介布置在某种具有用于获得第一、第二和第三个测量集的图像传感器的相机内。
68、一种如权利要求67所述的计算机可读取媒介,其特征在于其中的相机包含SVE相机、SVC相机、SVEC相机之一。
69、一种计算机可读取媒介,其特征在于具有一组可运行来指示处理器执行下列步骤的指令:
获取包含对第一个信号集的至少一次测量的第一个测量集,该第一个信号集包含来自第一个区域至少一个维度上的至少一个信号,该第一个测量集具有关于该第一个信号集的第一、第二和第三个敏感度特征,第一个敏感度特征具有第一种特征类型,第二个敏感度特征具有第二种特征类型,而第三个敏感度特征具有第三种特征类型;以及
获取包含对第二个信号集的至少一次测量的第二个测量集,该第二个信号集包含来自第二个区域至少一个维度上的至少一个信号,该第二个测量集具有关于该第二个信号集的第一个敏感度特征,该第二个测量集进一步具有关于该第二个信号集的第四和第五个敏感度特征,第四个敏感度特征具有第二种特征类型,第五个敏感度特征具有第三种特征类型,该第四个敏感度特征不同于第二个敏感度特征,而该第五个敏感度特征不同于第三个敏感度特征。
70、一种如权利要求69所述的计算机可读取媒介,其特征在于其中的至少一个维度包含下列之一:
一个空间维度;以及
一个时间维度。
71、一种如权利要求69所述的计算机可读取媒介,其特征在于其中的第一种、第二种和第三种特征类型中的至少一种是对下列之一的某种相应敏感度特征依赖:
信号强度;以及
信号波长。
72、一种如权利要求69所述的计算机可读取媒介,其特征在于其中的第一种特征类型是对信号波长的某种敏感度特征依赖,而第二种和第三种特征类型中的至少一种是对信号强度的某种相应敏感度特征依赖。
73、一种如权利要求72所述的计算机可读取媒介,其特征在于其中的第一种敏感度特征对具有在大约绿色波长范围以外的波长的电磁辐射有降低了的敏感度。
74、一种如权利要求73所述的方法,其特征在于该组指令进一步运行来指示处理器使用第一和第二个测量集来形成某个场景的一幅图像,该场景包含第一和第二个区域。
75、一种如权利要求69所述的计算机可读取媒介,其特征在于其中的处理器和计算机可读取媒介布置在某种具有用于获得第一和第二个测量集的图像传感器的相机内。
76、一种如权利要求75所述的计算机可读取媒介,其特征在于其中的相机包含SVE相机、SVC相机、SVEC相机之一。
CNA018151043A 2000-07-06 2001-07-06 用于增强数据解析度的方法和设备 Pending CN1520580A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US21639500P 2000-07-06 2000-07-06
US60/216395 2000-07-06

Publications (1)

Publication Number Publication Date
CN1520580A true CN1520580A (zh) 2004-08-11

Family

ID=22806896

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA018151043A Pending CN1520580A (zh) 2000-07-06 2001-07-06 用于增强数据解析度的方法和设备

Country Status (5)

Country Link
JP (1) JP4234420B2 (zh)
KR (1) KR100850729B1 (zh)
CN (1) CN1520580A (zh)
AU (1) AU2001271847A1 (zh)
WO (1) WO2002005208A2 (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100425080C (zh) * 2005-05-25 2008-10-08 凌阳科技股份有限公司 贝尔影像的边缘强化方法与装置暨彩色影像撷取***
US7924315B2 (en) 2004-11-30 2011-04-12 Panasonic Corporation Image processing method, image processing apparatus, image processing program, and image file format
CN103152582A (zh) * 2007-12-07 2013-06-12 松下电器产业株式会社 图像处理装置、图像处理方法以及摄影装置
CN109284719A (zh) * 2018-09-28 2019-01-29 成都臻识科技发展有限公司 一种基于机器学习的初始数据处理方法和***
CN110189419A (zh) * 2019-05-27 2019-08-30 西南交通大学 基于广义邻域高差的车载Lidar钢轨点云提取方法
CN110770787A (zh) * 2017-06-16 2020-02-07 杜比实验室特许公司 高效端到端单层逆向显示管理编码
CN114270799A (zh) * 2019-06-13 2022-04-01 Lg伊诺特有限公司 相机装置以及相机装置的图像生成方法

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1565878A1 (en) * 2002-11-19 2005-08-24 Koninklijke Philips Electronics N.V. A unit for and method of image conversion
US20050226525A1 (en) 2004-03-31 2005-10-13 Fujitsu Limited Image magnification device and image magnification method
CN101053249B (zh) * 2005-09-09 2011-02-16 松下电器产业株式会社 图像处理方法、图像存储方法、图像处理装置及文件格式
WO2007054931A2 (en) * 2005-11-10 2007-05-18 D-Blur Technologies Ltd. Image enhancement in the mosaic domain
US7742636B2 (en) * 2006-01-26 2010-06-22 Nethra Imaging Inc. Method and apparatus for scaling down a bayer domain image
CN101803366B (zh) * 2007-07-25 2015-01-14 坎德拉微***(S)私人有限公司 用于成像***的曝光控制
JP5057389B2 (ja) 2008-03-31 2012-10-24 富士フイルム株式会社 撮像装置
US7964840B2 (en) * 2008-06-19 2011-06-21 Omnivision Technologies, Inc. High dynamic range image sensor including polarizer and microlens
EP2175632A1 (en) 2008-10-10 2010-04-14 Samsung Electronics Co., Ltd. Image processing apparatus and method
JP2010109798A (ja) * 2008-10-31 2010-05-13 Fujifilm Corp 撮像装置
CN101976435B (zh) * 2010-10-07 2012-10-24 西安电子科技大学 基于对偶约束的联合学习超分辨方法
EP3259920A1 (en) 2015-02-19 2017-12-27 Magic Pony Technology Limited Visual processing using temporal and spatial interpolation
GB201603144D0 (en) 2016-02-23 2016-04-06 Magic Pony Technology Ltd Training end-to-end video processes
WO2016156864A1 (en) 2015-03-31 2016-10-06 Magic Pony Technology Limited Training end-to-end video processes
GB201604672D0 (en) 2016-03-18 2016-05-04 Magic Pony Technology Ltd Generative methods of super resolution
EP3298579B1 (en) 2016-04-12 2021-07-21 Magic Pony Technology Limited Visual data processing using energy networks
GB201607994D0 (en) 2016-05-06 2016-06-22 Magic Pony Technology Ltd Encoder pre-analyser
US10701394B1 (en) 2016-11-10 2020-06-30 Twitter, Inc. Real-time video super-resolution with spatio-temporal networks and motion compensation
US11957515B2 (en) * 2018-02-27 2024-04-16 Koninklijke Philips N.V. Ultrasound system with a neural network for producing images from undersampled ultrasound data
CN109451249A (zh) * 2018-11-23 2019-03-08 中国科学院长春光学精密机械与物理研究所 一种提高数字域tdi成像动态范围的方法、装置及设备
CN113574887A (zh) * 2019-03-15 2021-10-29 交互数字Vc控股公司 基于低位移秩的深度神经网络压缩
KR102242939B1 (ko) * 2019-06-13 2021-04-21 엘지이노텍 주식회사 카메라 장치 및 카메라 장치의 이미지 생성 방법
KR20200142883A (ko) 2019-06-13 2020-12-23 엘지이노텍 주식회사 카메라 장치 및 카메라 장치의 이미지 생성 방법
KR102213765B1 (ko) * 2019-08-09 2021-02-08 엘지이노텍 주식회사 이미지 센서, 카메라 모듈 및 카메라 모듈을 포함하는 광학 기기
KR102428840B1 (ko) * 2019-10-16 2022-08-04 (주)아인스에스엔씨 다중 해상도 기반 모델 간의 천이 과정을 기술하는 모델을 구현하고 동작시키는 컴퓨팅 시스템
KR20210018381A (ko) * 2021-02-02 2021-02-17 엘지이노텍 주식회사 이미지 센서, 카메라 모듈 및 카메라 모듈을 포함하는 광학 기기
KR102669780B1 (ko) * 2022-09-15 2024-05-28 엘아이지넥스원 주식회사 표적 탐지 모니터링을 수행하는 온보드 전자 장치 및 방법
CN117314795B (zh) * 2023-11-30 2024-02-27 成都玖锦科技有限公司 一种利用背景数据的sar图像增强方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CH657876A5 (de) * 1982-04-28 1986-09-30 Rueti Ag Maschf Reihenfachwebmaschine mit einem webrotor.
US5475769A (en) * 1992-07-13 1995-12-12 Polaroid Corporation Method and apparatus for recovering image data through the use of a color test pattern
EP0739571A1 (en) * 1993-02-08 1996-10-30 I Sight, Inc. Color wide dynamic range camera using a charge coupled device with mosaic filter
EP0930789B1 (en) * 1998-01-20 2005-03-23 Hewlett-Packard Company, A Delaware Corporation Colour image pickup device

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7924315B2 (en) 2004-11-30 2011-04-12 Panasonic Corporation Image processing method, image processing apparatus, image processing program, and image file format
US8780213B2 (en) 2004-11-30 2014-07-15 Panasonic Corporation Image processing method, image processing apparatus, image processing program, and image file format
CN100425080C (zh) * 2005-05-25 2008-10-08 凌阳科技股份有限公司 贝尔影像的边缘强化方法与装置暨彩色影像撷取***
CN103152582A (zh) * 2007-12-07 2013-06-12 松下电器产业株式会社 图像处理装置、图像处理方法以及摄影装置
CN103152582B (zh) * 2007-12-07 2015-02-25 松下电器产业株式会社 图像处理装置、图像处理方法
CN110770787A (zh) * 2017-06-16 2020-02-07 杜比实验室特许公司 高效端到端单层逆向显示管理编码
CN110770787B (zh) * 2017-06-16 2023-04-07 杜比实验室特许公司 高效端到端单层逆向显示管理编码
CN109284719A (zh) * 2018-09-28 2019-01-29 成都臻识科技发展有限公司 一种基于机器学习的初始数据处理方法和***
CN110189419A (zh) * 2019-05-27 2019-08-30 西南交通大学 基于广义邻域高差的车载Lidar钢轨点云提取方法
CN110189419B (zh) * 2019-05-27 2022-09-16 西南交通大学 基于广义邻域高差的车载Lidar钢轨点云提取方法
CN114270799A (zh) * 2019-06-13 2022-04-01 Lg伊诺特有限公司 相机装置以及相机装置的图像生成方法
CN114270799B (zh) * 2019-06-13 2024-04-05 Lg伊诺特有限公司 相机装置以及相机装置的图像生成方法

Also Published As

Publication number Publication date
JP2004518312A (ja) 2004-06-17
AU2001271847A1 (en) 2002-01-21
KR20030020357A (ko) 2003-03-08
WO2002005208A2 (en) 2002-01-17
JP4234420B2 (ja) 2009-03-04
WO2002005208A3 (en) 2003-06-26
KR100850729B1 (ko) 2008-08-06

Similar Documents

Publication Publication Date Title
CN1520580A (zh) 用于增强数据解析度的方法和设备
Kundu et al. No-reference quality assessment of tone-mapped HDR pictures
Schwartz et al. Deepisp: Toward learning an end-to-end image processing pipeline
Rana et al. Deep tone mapping operator for high dynamic range images
US7149262B1 (en) Method and apparatus for enhancing data resolution
Solomon et al. Fundamentals of Digital Image Processing: A practical approach with examples in Matlab
Narasimhan et al. Enhancing resolution along multiple imaging dimensions using assorted pixels
CN105378538B (zh) 用于多频谱成像的自动聚焦方法和***
RU2444786C2 (ru) Устройство и способы для увеличения динамического диапазона в цифровых изображениях
CN1870715A (zh) 手抖动校正装置
CN102693538A (zh) 生成高动态范围图像的全局对准
Hernández-Cabronero et al. Mosaic-based color-transform optimization for lossy and lossy-to-lossless compression of pathology whole-slide images
US7512285B2 (en) Signal processing device and signal processing method, and program and recording medium
Singh et al. Weighted least squares based detail enhanced exposure fusion
Xu et al. Remote-sensing image usability assessment based on ResNet by combining edge and texture maps
Singh et al. Multi-exposure microscopic image fusion-based detail enhancement algorithm
Ma et al. Joint over and under exposures correction by aggregated retinex propagation for image enhancement
JP2011250013A (ja) 画質評価方法、画質評価装置、及びプログラム
CN115222592A (zh) 一种基于超分辨率网络和U-Net网络的水下图像增强方法及网络模型的训练方法
Sartor et al. Matfusion: a generative diffusion model for svbrdf capture
CN1808181A (zh) 基于贝叶斯线性估计的遥感图像融合方法
CN101232555B (zh) 图像处理方法和图像处理装置
JP2020144012A (ja) 染色画像推定器学習装置、画像処理装置、染色画像推定器学習方法、画像処理方法、染色画像推定器学習プログラム、及び、画像処理プログラム
Marenzi et al. Block matching super-resolution parallel GPU implementation for computational imaging
Singh et al. Nonsubsampled contourlet transform based tone‐mapping operator to optimize the dynamic range of diatom shells

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication