如何使用 24 块色卡估计和应用色彩校正矩阵?

2023-12-06

我有一个 24 块色卡,我正在尝试使用所述色卡估计捕获图像的颜色校正矩阵。我已经手动估计了CCM使用least squares方法,但它没有产生理想的结果。有些图像在应用后会出现奇怪的阴影CCM.
我仔细检查了我的代码,但没有发现任何问题。我正在寻找任何基于 opencv/matlab 或任何开源实现,在其中我可以提供捕获的颜色值和实际颜色值,并且它可以为我计算和应用 CCM,以确保我的实现是否有问题或至少有问题平方方法不是很有效。

注意:我之前没有对图像应用任何线性化 应用CCM。请建议任何可以快速完成此操作的资源 已测试。

PS:以下是我用来估计和应用颜色校正矩阵 (CCM) 的 MATLAB 代码

% calc 3x3 correction matrix
ccm = MactAll * MrawAll' * inv(MrawAll * MrawAll') % MactAll is the 3x24 matirx of actual color card values and MrawAll is the 3x24 matrix of captured color card values

这是我将 CCM 应用于图像的方法

[my, mx, mc] = size(imageRGB);  % rows, columns, colors (3) % 
imageRGB = reshape(imageRGB,my*mx,mc); 
correctedRGB = imageRGB*ccm;  
correctedRGB = min(correctedRGB,1);  correctedRGB = max(correctedRGB,0);  % Place limits on output.

correctedRGB = reshape(correctedRGB, my, mx, mc); 
correctedRGB = uint8(correctedRGB*255);

这是我的结果:

Original Image enter image description here

校正图像

enter image description here


您正在使用的色彩校正模型在这里有很好的描述:

https://www.informatik.hu-berlin.de/de/forschung/gebiete/viscom/thesis/final/Stuienarbeit_Behringer_201308.pdf

这也可以在c++ opencv 中完成。你必须确定方程:

 [p1' p2' ... pn' ] = M * [ p1 p2 ... pn]
         P'         = M *        P

其中 p1',...pn' 是所需值(如果在 XYZ 颜色空间中则更好),p1,...pn 是检测到的实际值,M 是 3x3 变换矩阵。

您可以按如下方式解决该系统:

M = P * P'.inv(CV_SVD)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 24 块色卡估计和应用色彩校正矩阵? 的相关文章

  • 如何创建关键点来计算 SIFT?

    我正在使用 OpenCV Python 我已经使用确定角点cv2 cornerHarris 输出的类型为dst 我需要计算角点的 SIFT 特征 输入到sift compute 必须是以下类型KeyPoint 我不知道如何使用cv2 Key
  • tesseract Remove_Reference Visual Studio 2012 项目中的不明确符号

    我将更详细地描述我的情况 我正在使用 C OpenCV Tesseect 构建一个车牌识别系统 但是当我编译代码时 它返回给我一堆错误模糊引用 所以我检查了代码的所有行 我在这个小组中搜索了解决方案 并尝试了几种但没有成功 问题 error
  • 确定时间序列数据的 SOM(自组织映射)中的集群成员资格

    我也在做一个需要对时间序列数据进行聚类的项目 我正在使用在 MATLAB 中运行的 SOM 工具箱进行聚类 但遇到了以下问题 我们如何确定哪些数据属于哪个集群 SOM从数据集中随机选择数据样本 并为每个数据样本找到BMU 据我所知 SOM算
  • 找不到 tbb.dll

    我在 opencv 2 3 中使用 cvCanny 函数 它编译得很好 但在执行时出现错误 提示 tbb dll 未找到 这个dll有什么用处 在哪里可以找到这个 thanks 它是英特尔的一部分线程构建块 http threadingbu
  • 我如何知道在 python 中使用 OpenCV 检测到的白色区域的位置?

    例如 在这段代码中 我过滤了视频源以显示白色区域 我如何知道他们的位置 坐标 x y import cv2 import numpy as np cap cv2 VideoCapture 0 while 1 frame cap read h
  • 将曲线图案与图像边缘匹配

    我有一个要搜索沿其边缘的曲线的目标图像和一个包含该曲线的模板图像 我需要实现的是在目标图像中找到模板图像中的曲线的最佳匹配 并根据分数来判断是否匹配 这还包括曲线的旋转和大小调整 目标图像可以是 Canny Edge 检测器的输出 如果这能
  • 分析手绘流程图

    我正在尝试检测手绘图中的对象和文本 我的目标是能够 解析 类似的东西this https hlksow dm1 livefilestore com y2pWx IR9GGEpEPKUClCy0Ukpr7ymPXxcMsMFbPkjwOxgF
  • 使用 mle() 估计自定义分布的参数

    我有以下代码 我希望估计自定义分布的参数 有关分发的更多详细信息 https stackoverflow com q 56522903 4930944 然后使用估计的参数 我想看看估计的 PDF 是否类似于给定数据的分布 它应该与给定数据的
  • 如何对函数的输出使用索引? [复制]

    这个问题在这里已经有答案了 可能的重复 如何索引函数返回的 MATLAB 数组而不先将其分配给局部变量 https stackoverflow com questions 3627107 how can i index a matlab a
  • 错误:超出了程序允许的最大变量大小。使用 sub2ind 时

    请建议如何解决这个问题 nNodes 50400 adj sparse nNodes nNodes adj sub2ind nNodes nNodes ind ind 1 1 ind is a vector of indices Maxim
  • Matlab 中“end”的语义是什么?

    常见的是使用end关键字作为在 Matlab 中访问或扩展数组的快捷方式 如 gt gt x 1 2 3 gt gt x 1 end 1 ans 1 2 gt gt x end 1 4 x 1 2 3 4 然而 我惊讶地发现以下也有效 gt
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub
  • OpenCV 和 QT 之间的集成

    我对 QT 和 OpenCV 开发完全是新手 一般来说是 C 我想使用 OpenCV 开发一个应用程序并使用 Qt 创建其界面 我不明白的是 如何整合这两个部分 我的意思是 为了开发 java 我只使用 eclipse 它为我提供了 JFr
  • 将arm_compute::Image 转换为cv::Mat

    我有很多基于 open cv 的代码 但是 Arm 计算库可以通过多种方式提高性能 因此我想将一些 arm 计算库代码集成到我的项目中 有没有人尝试过在两个相应的图像结构之间进行转换 如果是这样 你做了什么 或者有没有一种方法可以共享指向底
  • 如何通过删除移动物体来从多张图像中获取背景?

    我用固定相机拍摄了同一场景的多张图像 其中有移动的物体 我不明白如何在 Python 中使用这些图像通过删除所有移动对象来检索背景图像 任何帮助 将不胜感激 谢谢 下面附有图片 在这种情况下 我希望最终的图像没有任何人参与其中 image1
  • Python 2.7.3 + OpenCV 2.4 旋转窗口后不适合图像

    我正在尝试将图像旋转一定角度 然后将其显示在窗口中 我的想法是旋转 然后在新窗口中显示它 并使用根据旧宽度和高度计算出的新窗口宽度和高度 new width x cos angle y sin angle new height y cos
  • imresize - 试图理解双三次插值

    我试图理解这个功能 function weights indices contributions in length out length scale kernel kernel width antialiasing if scale lt
  • 检测图像中的特定对象,即使用 opencv 进行图像分割

    我必须选择 iPhone 上图像中可见的任何特定对象 基本上我的项目是根据我的触摸来分割图像对象 我遵循的方法是首先检测图像的轮廓 然后根据手指触摸选择特定序列 有没有其他方法更强大 因为我必须在视频帧上运行它 我在该项目中使用 OpenC
  • python中matlab find函数的替换

    我正在尝试寻找合适的python函数来替代matlabfind在我的脚本和一些谷歌搜索中我看到np where 大多数时候都能解决目的 但在双重条件的情况下 我有不同的输出 有人可以告诉我这种方法有什么问题以及如何继续吗 示例代码和差异如下
  • Matlab/Octave 加法,丢失精度数字

    在 Matlab octave 中 当我添加两个数字时 我会丢失一些数字 gt gt gt 23 0 0 65850 ans 23 659 我如何取回双倍23 65850 数字正在四舍五入only用于显示目的 看看format如果您想更改它

随机推荐

  • 如何在R中写出具有不同文件名的多个文件

    我有一个大文件 gt 10000 行数据 我想按 ID 写出一个单独的文件 我有 50 个唯一的 ID 名称 我想要为每个名称创建一个单独的文本文件 这是我到目前为止所得到的 但我不断收到错误 我的ID实际上是字符串 如果我能用该字符串命名
  • 使用 sqlalchemy 和 mysql unix 时间戳定义表

    背景 MySQL 中有多种存储日期的方法 作为字符串 例如 2009 年 9 月 9 日 作为使用函数 UNIX TIMESTAMP 的整数 这被认为是传统的 UNIX 时间表示 您知道自纪元加 减闰秒以来的秒数 作为MySQL TIMES
  • HTML5发布及修改时间

    我想包括一篇文章的发表和修改时间 我查看了文档 但找不到有关此的信息 到目前为止 我得到了这个
  • QFile::flush() 与 QFile::close()

    我正在类中实现一个方法 它将数据从 TableView 对象写入 CSV 文件 然而 当程序运行时 程序以非常慢的速度 3或4秒 将数据写入USB驱动器上的文件 但在系统的内部驱动器上运行良好 这是因为我在写入文件后没有使用flush 或c
  • 如何在 Android Gridview 中设置替代行颜色?

    如何在网格视图中设置替代行颜色 我搜索了很多关于如何设置网格视图行颜色的教程 但没有关于网格视图行颜色的信息 我得到的列表视图仅具有替代行颜色 我需要交替行应该是白色和黑色 在这里我包括我的代码 请帮我 这是 Java 类 public c
  • 正则表达式用逗号替换客户评论中的一些点

    我需要写一个正则表达式来替换 with 在一些患者对药物的评论中 他们应该在提到副作用后使用逗号 但其中一些使用了点 例如 text the drug side effects are night mare nausea night swe
  • 透明地记录下载的最佳方式?

    我有一个个人项目 已经上线一段时间了 我一直通过这样做来记录下载量 当用户单击下载链接时 它会点击一个 PHP 脚本 该脚本将一些信息写入表中 写入数据后 脚本将返回实际文件的路径 然后 用户可以将文件保存到硬盘上 就像下载任何其他文件一样
  • ListViewAnimations 库导致顶级异常

    我正在尝试将此库嵌入到我的 Android 项目中 正如他们的 wiki 中所说 我做了很少的事情 添加了 gradle 编译行compile com nhaarman listviewanimations library 2 6 0 然后
  • 新的 iOS 应用程序与 Facebook Graph api v2.0 作斗争

    我是应用程序开发新手 我一直在构建一个社交 iOS 应用程序 需要发送 Facebook 邀请才能加入该应用程序 昨天发布的 Facebook Graph API 2 0 似乎对如何邀请尚未参与游戏的人提出了更严格的要求 我正在尝试激活 m
  • 如何使设备顶部面板(状态栏)与flutter中的AppBar具有相同的背景颜色?

    如何使设备顶部面板 状态栏 与flutter中的AppBar具有相同的背景颜色 设备顶部面板的颜色始终比 AppBar 背景颜色深 多谢 在 iOS 上 这已经是事实了 在 Android 上 添加以下内容onCreate in MainA
  • Apache RewriteRule 用于删除任何域名上的端口

    我有一台具有一个 IP 地址的虚拟服务器 为几个不同的站点提供服务 其中之一带有 SSL 证书 我需要在第二个域上添加 SSL 证书供我自己私人使用 由于我只有一个 IP 地址 所以我将其添加到端口 8080 上 这很好用 我现在的问题是
  • 为什么flink容器vcore大小始终为1

    我在yarn上运行flink 更准确地说是在AWS EMRyarn集群中 我阅读了flink文档和源代码 默认情况下 对于每个任务管理器容器 当从yarn请求资源时 flink将请求每个任务管理器的插槽数量作为vcore的数量 而且我也从源
  • 如何在R中将二进制小数转换为十进制小数?

    我需要编写一个函数 将二进制小数转换为 R 中的十进制小数 f 0 001 0 125 我做了什么 我搜索了R包中的相关函数 DescTools BinToDec 0 001 NA DescTools BinToDec 0 001 NA b
  • React Ionic 5:如何将对象从App组件传递到Tab组件

    我使用 Ionic 5 选项卡模板创建了一个 Ionic React 应用程序 我想将一个对象从应用程序组件传递到选项卡组件 有什么办法可以做到吗 Tab1 和 Tab2 是我的选项卡组件 Note 我希望这个对象在两个选项卡组件中使用两种
  • 扫描直到新行

    我想读取输入的所有文本 直到输入新行字符 这是我的代码 int i 0 char ch MAX printf Enter the text n while true scanf c ch i if ch i n break i 但当我尝试执
  • Clang 3.7.0 抱怨类不是字面意思,因为它不是聚合并且没有 constexpr 构造函数

    以下代码在 GCC 4 9 3 和 VC 19 00 23506 中编译良好 但在 Clang 3 7 0 中给出这些错误 错误 constexpr 函数的返回类型 Foo 不是文字类型 注意 Foo 不是字面意思 因为它不是聚合并且没有
  • C++ 中的向量初始化

    我在代码中使用向量 导致错误的行如下 vector
  • 如何使用 Vbscript 重写和写入文本文件

    我使用以下 VBscript 在 commonapplicationdatafolder 中创建了一个文本文件 list txt 我正在显示一些 通过写入文本文件来获取变量 strlist 的值 Const Value H23 Const
  • 使用 NSXMLParser initWithStream:未收到解析器委托方法

    我正在解决的基本问题是使用NSStream用于解析传入的增量 XML 数据的类 数据从来都不是完整的 XML 文档 但我希望根据套接字可以读取的数据量以增量块的形式接收和处理它 查看文档NSXMLParser 看起来像initWithStr
  • 如何使用 24 块色卡估计和应用色彩校正矩阵?

    我有一个 24 块色卡 我正在尝试使用所述色卡估计捕获图像的颜色校正矩阵 我已经手动估计了CCM使用least squares方法 但它没有产生理想的结果 有些图像在应用后会出现奇怪的阴影CCM 我仔细检查了我的代码 但没有发现任何问题 我