数码相机处理Raw数据的完整流程——利用MATLAB和Dcraw处理RAW
4997
15
|
[1 楼] stevenkoh
[泡菜]
19-8-6 18:31
谈了一些“色彩管理链路”的,发现很多网友对色彩管理的基本概念缺乏认识,这也是“色彩管理”混乱的主因。我这里对最核心的“RAW文件不包含色彩”做一个梳理,懂得了这个抽象概念,才是真正能懂得“色彩管理”各个抽象概念的基础。
我曾经稍微解释了一下“数码相机RAW文件生成色彩流程”,但下面这个贴是更详细的解释。非常有参考价值。 -------------------------------------------- 利用 MATLAB 和 Dcraw 处理数码相机 Raw 文件的完整流程 源自:https://capbone.com/process-raw-data-using-matlab-and-dcraw/ 这篇文章要说的当然不是如何用 PS、LightRoom 来处理 Raw 文件,而是一种更加彻底、数据化的办法 -- 利用 MATLAB 直接处理数码相机的 CFA(Color Filter Array) 数据。 接触过摄影的人都知道,对于数码相机来说 Raw Data 是原始的、未被处理的数据,相比 JPEG,Raw 文件记录了更多的场景信息,保留了更宽广的色域以及动态范围,也留下了更为自由的后期处理空间。Raw Data 只是一种图像数据的封装形式而并不是一种文件格式,不同厂商的相机一般都拥有自己的 Raw Data 格式,比如常见的 *.CR2、*.NEF、*.ARW、*.ORF(Olympus)、*.RAF(Fuji)、*.DNG(Adobe、Leica)等。 对于大部分人来说,处理 Raw Data 的软件不外乎就那么几种,Camera Raw、LightRoom、Aperture、DxO 以及各厂商自带的处理软件。这些软件虽然通过图形界面提供了简洁易懂的处理流程,但是遗憾的是它们能导出的都并非真正意义上的 “Raw Data”,即传感器直接记录的、与照度成线性关系的第一手数据。对于摄影、媒体、艺术领域,这些软件已经足够强大,但是在图像处理、计算机视觉等研究领域,我们需要的是把照片中的信息转换为能够通过数字来定量表示的形式,或者通过一些公式、算法直接对图像(或图像的某一部分)进行处理,再或者对两张图片之间的差别进行量化表示,这时候 LightRoom 这些软件就显得有些无能为力了。 这篇文章要讲的就是如何通过 MATLAB 对 Raw Data 进行处理并从中提取出我们想要的图像信息,这是一种我所了解的最彻底、最根本的获取相机传感器原始信息的方法,并且这些信息都是以数字的形式记录下来,可以很方便地在此基础上进行图像的存储、传输或者进一步操作。实际上 MATLAB 本身就提供了非常强大的图像处理功能,正所谓 “普通青年处理图片用 PS,文艺青年处理图片用 LightRoom,2B 青年处理图片用 MATLAB ”。 由于各家相机厂商对 Raw Data 采取了不同的封装方式,MATLAB 并不能一一识别这些文件格式,因此我们需要先利用 Dcraw 将不同扩展名的文件转换为 MATLAB 能够读取的图片格式 -- tiff。Dcraw 是一种 Raw Data 解析方案,它能够识别市面上大部分的相机型号,并将相应的 Raw 文件导出为 tiff 或 PGM/PPM/PAM 格式文件。事实上 Dcraw 本身就可以算作一种 Raw Data 的处理程序,它拥有白平衡设置、伽马校正、色彩空间转换、去马赛克、亮度调节等一系列功能,并且提供了 C 源代码,让用户可以在任何操作系统上对其进行编译。关于 Dcraw 更详细的设置可以在其官方文档或这个博客中查看,这里我们仅仅把它作为 Raw Data 到 tiff 的一种媒介,而不对图像做任何的处理 -- 把所有的操作都留到 MATLAB 里。 目录 .Dcraw 的预处理 .线性处理(Linearization) .白平衡校正(White Balancing) .色彩插值(Demosaicking) .色彩空间转换(Color Space Conversion) .亮度校正与伽马校正(Brightness and Gamma Correction) 0. Dcraw 的预处理 以下操作以 Windows 平台为例,使用的相机为 Nikon D3X。为了简化流程,我们使用 Dcraw 现成的可执行文件(http://www.centrostudiprogressofotografico.it/en/dcraw/)而不在本地对其编译。一般将这个 Dcraw.exe 文件放在 C:\windows 路径下,这样可以直接从运行(Win + R)中执行。在运行中输入 cmd 进入命令行窗口,这时已经可以直接调用 Dcraw,或者输入 dcraw 查看相关的一些命令。 ![]() dcraw -4 -T -D -v pathfilename 其中 pathfilename 为图像的绝对路径,比如 E:\photosimg1.NEF 这样。这里的 -T 表示将图像以 tiff 格式导出,-D 表示不对图像做任何的彩色插值和亮度调节(彩色插值的问题后面会提到),-v 表示在 Dcraw 处理结束后在屏幕上显示相关信息(这一步有没有都无所谓),而 -4 等价于 -6 -W -g 1 1,即表示导出的图像为16位(而不是常见的 JPEG 的8位 )、不进行任何白平衡校正、不进行任何伽马校正。在一些需要获取拍照时白平衡设置的场合也可以使用 -6 -w -g 1 1 -T -D 这样的参数组合,但这里我们使用 -4 -T -D 就好。各参数的意义在上面提到的官方文档页面中有详细的说明。 ![]() ![]() ![]() 大家都知道一般民用的数码相机只有一块 CMOS 或 CCD(这里不谈 3CCD 或 Foveon X3),而无论是 CMOS 还是 CCD,都只对照射在它们有效面积之上的光通量敏感,并且产生与该光通量成正比的电流作为输出。这个输出实际上是由光源的光谱功率分布(SPD)、物体表面反射比以及相机传感器灵敏度共同作用的关于波长的一个积分结果。由于这是一个对整个可见光波段的关于波长的积分,显然不能够表示任何色彩信息。正因为这一点,目前消费级相机的传感器都是不具备任何颜色感知能力的,照片中所有色彩的信息实际上都是软件处理后的结果。正因为这点,我们一般不可能得到一张真正“未经处理过”的彩色图像。既然传感器只能感受光的“强度”而非“色彩”,我们就需要在传感器之前放置一些透过率满足一定波长条件的滤光片,使得经过这些滤光片后作用在传感器上的光信号只是某一波长范围内的积分形式(比如500 ~ 600nm),而非整个可见光波段(380 ~ 780nm)。实现这个功能最常见的滤光片就是拜耳滤镜,如下图所示。 ![]() 但是我们现在希望把这一步骤留到 MATLAB 中进行,所以在 Dcraw 中选用 -D 参数使得插值先不被执行,这也是为什么上面得到的 tiff 图像仅仅是灰度图像 -- 因为它只记录了光强度信息,而不包含任何颜色信息。 这时可以在 MATLAB 中打开这幅灰度图像了。由于各个像素上记录的光强度是一个标量,这幅图像相当于一个 m × n 的矩阵,其中 m 和 n 分别为 CMOS 纵向和横向的像素数。 raw = double(imread('img1.tiff')); 现在终于可以开始在 MATLAB 中对相机传感器的原始数据进行处理了。整个处理过程大概遵循以下步骤: ![]() 1. 线性处理(Linearization) 出于节省数据存储空间的目的,一些厂商(例如尼康和索尼)的 Raw Data 并不完全与像素点上的照度呈线性关系,而是会在编码上做一些处理,比如非线性压缩等。不过这里我们不需要担心这个问题,因为之前在 Dcraw 中使用 -4 参数时就已经解决了这个问题。我们只要确保各个像素的数值是分布在 14-bit(虽然 Dcraw 中的 -4 参数将图像设为16位,但其最大值仍然为 214?1=16383)能够储存的范围之间即可,一般为 0 ~ 16383,并将超出这个区间的数值给拉回区间中。再将这些数值归一化至 0~1 区间中。 black = 0; saturation = 16383; lin_bayer = (raw-black)/(saturation-black); % 归一化至[0,1]; lin_bayer = max(0,min(lin_bayer,1)); % 确保没有大于1或小于0的数据; 要说明的是,我这里使用的 black = 0 以及 saturation = 16383 仅仅是针对 D3x 而言,不同厂家的相机,或者同一厂家不同型号的相机都可能不同。如果第一次使用某台相机不知道这两个参数,可以使用 dcraw -v -T 命令来查看,然后记下这两个数值供日后使用。要注意的是在命令行中每执行一次 dcraw 的命令,所生成的 tiff 文件都会覆盖掉原来的 tiff 文件,因此建议将原始的 Raw 文件先复制到另外一个路径下在执行 dcraw -v -T 命令。 下图中我使用的 Nikon D3x 和 SONY A7 就拥有完全不同的 black 和 saturation 值(索尼的 Raw 被压缩到了坑爹的12位...),因此在 MATLAB 中处理 A7 的图片时我就需要将上面的代码改为 black = 128 以及 saturation = 4095。 ![]() ![]() 其实将这一步叫作白平衡校正也并不是很恰当,因为这并不是指利用各种白平衡算法对图片的色调进行修复的那个白平衡校正,而仅仅是对 RGB 三通道乘上不同的增益系数,以补偿因为三种滤波片具有不同光谱灵敏度带来的影响。如果不考虑图像亮度(亮度的处理我们放在后面),将 R 通道乘以2并保持 G 通道不变,或者将 G 通道乘以0.5并保持 R 通道不变,这两种方式对画面颜色变化的影响是等效的。因此我们通常将 G 通道的增益系数固定为1,仅仅考虑 R 和 B 的系数。关于这两个系数具体数值应该取多少,则取决于相机的型号以及拍摄时使用的白平衡参数。实际上,在相机的白平衡设置里选择不同场景,就是在调整这两个增益系数。如果想还原为拍摄时使用的白平衡设置,可以在 Dcraw 中使用 -w -v 参数,这时屏幕上会显示出当时所使用的 R、B 通道的增益系数。 ![]() 得到了 R、B 通道的增益后,我们需要将相应的像素值乘上这个系数。前面说过,不同相机具有不同的拜耳滤镜排列方式,因此需要根据实际情况进行增益系数的乘法。这里我使用的是相机拍摄时的白平衡参数,即 r_multiplier = 2.433594 和 b_multiplier = 1.347656。 wb_multipliers = [2.433594, 1, 1.347656]; % for particular condition, from dcraw; mask = wbmask(size(lin_bayer,1),size(lin_bayer,2),wb_multipliers,'rggb'); balanced_bayer = lin_bayer .* mask; 上面代码中的 wbmask 函数就是根据实际拜耳滤镜的排列生成对应的掩板: function colormask = wbmask(m,n,wbmults,align) % COLORMASK = wbmask(M,N,WBMULTS,ALIGN) % Makes a white-balance multiplicative mask for an image of size m-by-n % with RGB while balance multipliers WBMULTS = [R_scale G_scale B_scale]. % ALIGN is string indicating Bayer arrangement: 'rggb','gbrg','grbg','bggr' colormask = wbmults(2) * ones(m,n); % Initialize to all green values; switch align case 'rggb' colormask(1:2:end,1:2:end) = wbmults(1); % r colormask(2:2:end,2:2:end) = wbmults(3); % b case 'bggr' colormask(2:2:end,2:2:end) = wbmults(1); % r colormask(1:2:end,1:2:end) = wbmults(3); % b case 'grbg' colormask(1:2:end,2:2:end) = wbmults(1); % r colormask(2:2:end,1:2:end) = wbmults(3); % b case 'gbrg' colormask(2:2:end,1:2:end) = wbmults(1); % r colormask(1:2:end,2:2:end) = wbmults(3); % b end end 完成白平衡调整后的图像如下。由于 R 和 B 通道都乘以了大于1的数,图像的平均亮度较上一张略有提高了。 ![]() 上文提到的插值步骤在这一步中实现,经过色彩插值之后原来的灰度图像就成为了一幅三通道的彩色图像。空间插值有非常多的方法,这里为了方便我们使用 MATLAB 内置的 Demosaic 函数,它能够直接把单通道的灰度图像转换为三通道的彩色图像。由于 Demosaic 函数的输入必须为 uint8 或 uint16 类型,我们需要把原来的 double 型先转换为 uint16 型。注意这里的 'rggb' 应该根据相机的具体情况而调整。 temp = uint16(balanced_bayer/max(balanced_bayer( ) * (2^16-1));lin_rgb = double(demosaic(temp,'rggb'))/(2^16-1); 完成这一步之后我们就得到了最原始的彩色信息。一些应用中所需要的就是这幅图像的数据,可以使用 imwrite 函数将其保存在硬盘中。后续的色彩空间转换、Gamma 校正等步骤视情况决定是否需要执行。色彩插值后得到的图像如下: ![]() 关于色彩空间这里不作过多介绍,举一个最简单的例子,同样一幅图像文件分别在两台显示器上显示,其各个像素的 RGB 值肯定是一样的,但是人眼看上去往往都存在细微的颜色偏差,这就是因为 RGB 色彩空间是设备相关的(Devices-Dependent),而任何两台显示器的 RGB 色彩空间一般都不会完全相同。具体的解释参考 Wiki。为了使一幅图片在各种显示设备上有尽量一致的视觉效果,我们就需要一个设备无关(Devices-Independent)的色彩空间作为传递媒介。目前在电子设备中用的最多的设备无关的色彩空间(有时也称绝对色彩空间)就是 sRGB 和 AdobeRGB。如果在 Dcraw 中使用了色彩插值,则自动包含了一个色彩空间变换的过程。Dcraw 先将相机相关的 RGB 空间转换至 XYZ 空间,然后再从 XYZ 转换到 sRGB 作为输出。在 MATLAB 中我们将这两个步骤合二为一。下面我将与相机相关的 RGB 色彩空间称作 Camera。对于大部分相机,我们可以得到从 XYZ 空间到相机相关空间的变换关系,即已知 XYZ-to-Camera。而作为两种绝对色彩空间,sRGB-to-XYZ 也是固定的。根据矩阵运算法则,我们可以得到从相机相关空间到 sRGB 空间的变换关系: AsRGB←Camera=(ACamera←XYZ?AXYZ←sRGB)?1 不同相机的 Camera 不同,因此我们必须获得适合自己相机的 ACamera←XYZ。在 Dcraw 官网提供的 c 文件中收集了市面上大多数相机的 ACamera←XYZ,可以在 dcraw.c 中的 adobe_coeff 函数下找到,并且这个数据库是定期更新的。adobe_coeff 函数下的数字是 ACamera←XYZ 中各元素乘以10000后逐行排列的数值, ![]() 据线性代数的知识,要满足上式,矩阵 ACamera←sRGB 的每一行元素之和必须为1,因此在 MATLAB 中我们必须再加上一个步骤,将 ACamera←sRGB 各行归一化为1。色彩空间变换的代码如下。注意矩阵 XYZ2Cam 请根据自己使用的相机型号进行修改。 sRGB2XYZ = [0.4124564 0.3575761 0.1804375;0.2126729 0.7151522 0.0721750;0.0193339 0.1191920 0.9503041]; % sRGB2XYZ is an unchanged standard XYZ2Cam = [7171 -1986 -648;-8085 15555 2718;-2170 2512 7457]/10000; % Here XYZ2Cam is only for Nikon D3X, can be found in adobe_coeff in dcraw.c sRGB2Cam = XYZ2Cam * sRGB2XYZ; sRGB2Cam = sRGB2Cam./ repmat(sum(sRGB2Cam,2),1,3); % normalize each rows of sRGB2Cam to 1 Cam2sRGB = (sRGB2Cam)^-1; lin_srgb = apply_cmatrix(lin_rgb, Cam2sRGB); lin_srgb = max(0,min(lin_srgb,1)); % Always keep image clipped b/w 0-1 其中 apply_cmatrix 函数就是把我们得到的 AsRGB←Camera 应用到原图像的各个通道上: function corrected = apply_cmatrix(im,cmatrix) % Applies CMATRIX to RGB input IM. Finds the appropriate weighting of the % old color planes to form the new color planes, equivalent to but much % more efficient than applying a matrix transformation to each pixel. if size(im,3) ~=3 error('Apply cmatrix to RGB image only.'); end r = cmatrix(1,1) * im(:,:,1)+cmatrix(1,2) * im(:,:,2)+cmatrix(1,3) * im(:,:,3); g = cmatrix(2,1) * im(:,:,1)+cmatrix(2,2) * im(:,:,2)+cmatrix(2,3) * im(:,:,3); b = cmatrix(3,1) * im(:,:,1)+cmatrix(3,2) * im(:,:,2)+cmatrix(3,3) * im(:,:,3); corrected = cat(3,r,g,b); 经过色彩空间变换后的图像如下,可以看出相比变换之前的图像,各个彩色色块饱和度明显增加,而白色色块颜色保持不变。 ![]() 对于大部分处于研究目的的图像处理流程,这一步不建议执行。在这一步之前,我们得到的图像仍然是与拍摄场景呈线性的,而线性数据往往才是对分析图像有帮助的。但是为了得到更好的显示效果,亮度与 Gamma 校正通常是必不可少的。如果对最后输出的图像存有异议,强烈建议首先返回到这一步中来寻找问题。根据经验,一张图像的平均亮度是像素最大值的四分之一时我们认为它是亮度合适的(注意这条法则仅仅是一个经验公式,并不适用于所有场景,例如一张夜景图像中平均亮度往往会很小)。因此我们调整全局亮度使其符合这一假设 grayim = rgb2gray(lin_srgb); % Consider only gray channel grayscale = 0.25/mean(grayim( );bright_srgb = min(1,lin_srgb * grayscale); % Always keep image value less than 1 接下来是 Gamma 校正。Gamma 曲线是图像、信号处理领域使用最为广泛的非线性处理,我们最容易见到的就是 Photoshop 中的“曲线”功能,如果将曲线拉成 y=xγ 的形状,就相当于对图像做了一次 Gamma 校正。Gamma 校正是一个很大的话题,这里不具体介绍,可以参考 Wiki 。在 sRGB 的官方文档中使用的是 γ=12.4,并在函数值较小的部分应用了小范围的线性函数。但是现在大多数平台(Windows,Mac)都使用了 γ=12.2 的曲线,因此这里我们也使用 2.2 作为参数,并且不考虑局部的线性化。如果需要精确的 sRGB 标准的校正函数,可以查看其官方文档。 nl_srgb = bright_srgb.^(1/2.2); 经过亮度校正和 Gamma 校正后的图像如下。由于使用的 Gamma 曲线是一条凸函数,相当于把图像暗部的细节展宽,因此得到的图像要比校正前更亮。 ![]() 下面换一张比较生活化的图片,再对整个流程做一个展示。 ![]() ![]() ![]() ![]() ![]() ![]() ![]() References Rob Sumner, Department of Electrical Engineering, UC Santa Cruz, Reading RAW files into MATLAB and Displaying Them, http://www.rcsumner.net/raw_guide/ Dave Coffin, Manpage of dcraw, https://www.cybercom.net/~dcoffin/dcraw/dcraw.1.html Guillermo Luijk, Dcraw Tutorial, http://www.guillermoluijk.com/tutorial/dcraw/index_en.htm Charles Poynton, Gamma FAQ - Frequently-Asked Questions about Gamma, http://www.poynton.com/GammaFAQ.html |
|
[16 楼] tarus
[泡菜]
24-12-3 22:42
色彩管理砖家2019 发表于 2024-12-03 15:18 |
|
[15 楼] 色彩管理砖家2019
[泡菜]
24-12-3 15:18
tarus 发表于 2024-12-01 23:37 如果大家基于讲数学,哪怕高数/线代,都讲得清楚。只有一个规则,讲数学! 讲数学,那么就是 RAW vs TIFF。tif文件也可以附带icc文件。dcraw -h 能把CFA整列四个像素组合一个像素,那么也没有什么马赛卡/反马赛克的争论。 ![]() 真的要讲清问题,是可以讲得清的,再困难也讲得清,色温讲得清、白平衡讲得清、色适应也讲得清。今天我讲不清,明天也有人会讲清。因为色彩科学的本质是让计算机处理色彩,计算机只能基于逻辑和数学,不存在感觉,比如道德、色彩、味觉、情感、智能....。所有的这一切,所以存在一个指定(assignment)的概念。这就是一层窗户纸,一点就破。 但计算机用的逻辑和数学是一元的,存在对与错的。我不信理科生不懂这个,因为文科生、艺术生也懂这个。正因为理科生懂这个,所以故意的搅扰,妨碍普通人的理解,这就是troll(搅Shi棍)。所以,理科生才是最害怕数学的人,因为他们懂才害怕。但是害怕却不敬畏数学,敬畏科学。所以理科生才要讲“颜色其实是哲学”。 因为数学阻碍他们装叉了。所以,凡是用数学装叉的,是被会数学反噬的。因为总归存在数学比你好的人,这个我从小就见过。 |
|
[14 楼] 色彩管理砖家2019
[泡菜]
24-12-3 14:44
![]() RAW怎么处理颜色,都非常成熟了。 老实说,文科生、艺术生不理解RAW没有颜色,是情有可原的,我从来不与之争论。但所谓理科生,学过线代高数,仍然拒绝这个观点。这并不简单,并不是技术问题、数学问题、科学思维..... 而是心里问题。一辈子不理解,达不到这个认识高度,那就留个遗憾吧。大部分也是如此。 |
|
[13 楼] 1400700226
[泡菜]
20-9-25 07:17
stevenkoh 发表于 2020-8-7 09:07 ?RAW怎么不包含色彩了?您把leica m monochrome解出彩色我看看? |
|
[12 楼] qiujueqin
[泡菜]
20-9-24 22:58
rivershaw 发表于 2020-7-29 15:11 你说的dcraw犯的错误,和图中红线标注的内容有什么联系? 另外,color matrix是由两类颜色观察者的光谱灵敏度函数之间的线性变换决定的,和白点有什么关系? |
|
[11 楼] rivershaw
[泡菜]
20-8-7 09:27
stevenkoh 发表于 2020-8-7 09:07 人都会犯错误,发现不了错误,改正不了错误,才是真正悲哀的事情。 ![]() 顺便说一下,6楼那个帖子,是我不小心发错了,我一般不到别人的地盘惹事。 |
|
[10 楼] stevenkoh
[泡菜]
20-8-7 09:07
您老还是错了,人家(dcraw作者Dave Coffin)理解的“色彩”概念和您不一样,我们都认可“RAW文件不包含色彩”。你说他色彩转换矩阵错误,可人家根本不在乎这个东西,你可以灵活运用参数跳过这个步骤都可以。本身就是RAW,因为RAW的RGB数据是为摄影师认可的RGB色彩服务的,色彩的问题人说了算,一定是摄影师和客户开心就好。用了RAW,你爱怎么拉就怎么拉。默认的不喜欢没关系啊,都是可逆无损操作。
你扯这些大部分读者看不懂的公式,还不就想说“RAW有色彩的”的嘛,你觉得有就有喽,你开心就好嘛 ![]() 至少我和林老师、Andrew Rodney、Dave Coffin一样,都认为“RAW文件不包含色彩”。我和他们都一样,我们为此而涉及的数码资产不是自己的自娱自乐,而是别人和客户的商业和技术环境。你的东西,你爱怎么弄就怎么弄,还是这句,开心就好。 最后重要的话再说他个三遍, RAW文件不包含色彩 RAW文件不包含色彩 RAW文件不包含色彩 ![]() 本帖最后由 stevenkoh 于 2020-8-7 09:14 编辑 |
|
[9 楼] rivershaw
[泡菜]
20-8-7 08:37
stevenkoh 发表于 2020-8-7 08:29 1、不管谁说的,正确的就是正确的,错误的就是错误的,科学是可以重复验证的。 2、正因为有了源代码,才能肯定算法出错了,对吧?!算法出错也不丢人,谁都有犯错的可能。只有你那样看不出别人的错误,把别人的错误当成信仰崇拜,还死不认错,才丢人,对吧?! ![]() |
|
[8 楼] stevenkoh
[泡菜]
20-8-7 08:29
rivershaw 发表于 2020-7-29 15:11 老师啊,你活得太累了,休息一下。先理解“RAW文件不包含色彩”这个基本理念。我发这个贴,就是说明这个事情。无论表述有啥瑕疵,但这个基本理念是没错的。虽然这是一个摄影界的常识,但我对此的深入理解是基于 1.林诒洪老师,他的色度学理论。 2.Andrew Rodney,《The role of working spaces in Adobe applications 全家桶色彩空间选择指南》(管链:https://www.adobe.com/digitalimag/pdfs/phscs2ip_colspace.pdf) 3.Dave Coffin,你挺看不上的dcraw作者,不过人家公开了源码,欢迎指正。u Can u Up 您的理论和上述三个不一样啊。 最后再更新一下修改后的源文地址,https://ridiqulous.com/process-raw-data-using-matlab-and-dcraw/ 本帖最后由 stevenkoh 于 2020-8-7 08:46 编辑 |
|
[7 楼] rivershaw
[泡菜]
20-7-29 15:11
stevenkoh 发表于 2020-7-14 09:12 我们来看看@stevenkoh同学极力推荐的,无限相信的dcraw,犯了哪些基本原理性错误,可以对照Adobe DNG协议。 1、混淆了非线性压缩编码、解码,与线性RAW数据的关系。 2、愚蠢透顶的白平衡算法,连作者都不好意说是白平衡算法。 2、不断“实时更新”的ColorMatrix!但不知道从相机取出的ColorMatrix是与白平衡有关系的,白点不同,ColorMatrix是不同的,好意思叫色彩空间转换吗? 谙熟色彩管理,深受林老师熏陶,自称“专业人士”的@stevenkoh同学,迷信这些愚蠢、错误的东西,自己的智商是否堪忧?! |
|
[6 楼] 钝刀wyh
[泡菜]
20-7-14 17:09
太累
本帖由 色影无忌论坛小程序 发布 |
|
[5 楼] lowdutch
[泡菜]
20-7-14 10:53
建议楼主再读个图像处理的博士学位,然后完美匹配MATLAB软件:即,高智商之人使用高智商软件
|
|
[4 楼] stevenkoh
[泡菜]
20-7-14 10:05
抱歉,笔误。我们谈的“颜色”,是B和C
B.JPG/TIFF文件内的RGB数据, C.显卡缓存区/OS各类图像数据的RGB数据(各位搞Driver开发,游戏引擎开发) stevenkoh 发表于 2020-7-14 09:12 |
|
[3 楼] stevenkoh
[泡菜]
20-7-14 09:12
源地址修改了,更新一下:
《利用 MATLAB 和 Dcraw 处理数码相机 Raw 文件的完整流程》:https://ridiqulous.com/process-raw-data-using-matlab-and-dcraw/ 其实吧,“色彩空间”的定义就是想要和“设备无关”(具体是否做到另论),大家在一个可定义的相同的平台上讨论同一件事情。而“色彩”,特别是数码影像的“色彩”是基于“人的认知”,而不是设备。这话很拗口,但就是“色彩管理”最基本的理论基石。简单说,我们不管精度、位宽等等数学概念。我们就说RGB。 A.相机CMOS的RGB RAW数据, B.JPG/TIFF文件内的RGB数据, C.显卡缓存区的RGB数据(各位搞Driver开发,游戏引擎开发) D.显示器的RGB驱动数据(Firmware) E.校色仪的RGB数据。 虽然大家都叫RGB数据,但“定义”和概念是不同的。如果搞不清“数据”和“色彩”的区别,那么是走到死胡同了,因为连“色彩”都认知模糊,谈何“色彩管理”?我们讲的"颜色",是B和D。其他的,留给苦逼的工程师吧。 所以很简单,RAW是数据文件,不是颜色文件,RAW无法显示,遑论打印?对真正的摄影师来说,如果你的RAW提供了颜色,那就不是RAW了。把RAW比作天文望远镜,更好理解。 科普视频链接:数据到颜色,给太空照片上色:为什么要上色呢?又是如何操作的呢? 最后再强调普及一下:当面面基的可以使用广色域,不见面的可靠传递只有sRGB。 |
|
[2 楼] nikoo123
[泡菜]
19-8-6 21:29
你這是校正,不包含處理??
本帖由IOS客户端发布 |










) * (2^16-1));















