Gimp 的“Color to Alpha”功能背后的算法是什么?

2023-11-24

对于那些还不熟悉 Gimp 的“Color to Alpha”功能的人,以下是 Gimp 文档中的页面:颜色到 Alpha。它做得非常好,我很想知道 Gimp 在颜色处理方面到底是如何做到的,无论颜色可能处于哪个颜色空间。非常感谢您的任何提示。

EDIT 1:根据像素与关键颜色(您在“颜色到 Alpha”对话框中选择的颜色)的相似性来生成像素的透明度信息,就像一些人在出于某种原因删除他的答案之前建议的那样,听起来像是一个很好的见解,但我假设它比那更复杂。假设我们估计颜色相似度的单位范围是 0.0 到 1.0,并且我们有一个像素,其颜色例如为 0.4,类似于白色(就像您在“颜色到”中选择白色一样) Alpha”对话框),因此像素的 alpha 值为 0.6,那么当生成的像素在 alpha 为 0.6 的白色背景上显示时,如何改变像素的实际颜色来补偿亮度/光度/饱和度的松散?

EDIT 2:实际上是更新:与第一次编辑相关的子问题已在如何在不改变结果颜色的情况下改变像素的 alpha?但这可能不是完整的故事,因为 Gimp 的“颜色到 Alpha”功能的源代码中发生的事情并不那么简单,并且似乎基于特定的算法而不是公式。


我看了一下源代码,它的核心是 colortoalpha 函数。参数*a1到*a4分别是输入/输出红、绿、蓝和alpha,c1到c3是制作alpha的颜色。

当您将两种颜色 c1 和 c2 与特定的 alpha a (0 ≤ a ≤ 1) 组合时,结果为

y = a * c1 + (1-a) * c2

这里我们做相反的操作:我们知道最终结果 y 和背景颜色 c2,并想算出 c1 和 a。由于这是一个未指定的方程,因此有无限多个解。然而,范围 0 ≤ c1 ≤ 255 和 0 ≤ a ≤ 1 增加了解的范围。

Gimp 插件的工作方式是,对于每个像素,它最小化 alpha 值(即最大化透明度)。相反,这意味着对于每个不完全透明的结果像素(即不完全是背景颜色),RGB 分量之一是 0 或 255。

这会生成一个图像,当覆盖在指定颜色的顶部时,将生成原始图像(没有舍入误差)并且每个像素具有最大透明度。

值得注意的是,整个过程是在 RGB 颜色空间中完成的,但也可以在其他颜色空间中执行,只要组合操作是在相同的颜色空间中完成即可。

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

Gimp 的“Color to Alpha”功能背后的算法是什么? 的相关文章

  • 为什么这个 R ggplot2 代码会显示一个空白的显示设备?

    虽然 SO 通常不用于帮助解决错误 但这个显示了特别简单且特别烦人的行为 如果你是一个ggplot2用户 您可以在 10 秒或更短的时间内重现它 正如这个 GitHub 问题 ggplot gtable 创建空白显示 https githu
  • 如何使用网格分割图像并保留透明度边界框

    我有一些 png 图像 我想将其分成几个部分 例如按网格或大小 但每个部分应具有与原始图像相同的边界框 透明度 Example 将图像分成两部分 原来的 200 89 Output 部分 1 png 200 89 第2部分 png 200
  • 如何使用边缘和内部镶嵌因子完成三角形面片镶嵌?

    I am just learning tessellation and i came across with below example for triangle patch tessellation but i am not sure h
  • 探索java图像处理的好资源[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我是图像处理领域的新手 请推荐一些好的资源 书籍和网络链接 来学习 Java 中的图像处理 最适合隐写术分析 适合初学者和高级水平 我看过
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • 氡变换线检测

    我正在尝试检测灰度图像中的线条 为此 我在 MATLAB 中使用 Radon 变换 我的 m 文件的示例如下所示 我可以使用此代码检测多行 我还使用线条的移位和旋转属性来绘制线条 但是 我不明白在获取rho和theta值后如何获取检测线的起
  • 为什么这个 gif 的持续时间似乎是 0 毫秒?如何找到真实的持续时间?

    我正在尝试从动画 gif 文件中获取持续时间和帧数 以便计算 gif 的平均帧速率 然后将其转换为视频 我最近在测试过程中看到了这张图片 它似乎让一切都相信它的持续时间为 0 毫秒 为什么 如何找到真实的持续时间 到目前为止我已经尝试过 e
  • 霍夫变换检测和删除线

    我想使用霍夫变换检测图像中的线条 但是我不想绘制线条 而是想删除原始图像中检测到的每条线条 image imread image jpg image im2bw image BW edge image canny imshow BW fig
  • 为什么这个基本的 imagejpeg() resizer 返回黑色图像?

    EDIT 感谢您的所有回答 特别是 Mailerdaimon 他注意到我没有在imagecopyresampled功能 我不再得到黑色图像 但我仍然得到一些黑色部分 所以我认为我的比例公式应该更新 如果我上传横向图像 新图像的高度小于 17
  • 什么是稀疏体素八叉树?

    我读了很多关于稀疏体素八叉树在未来图形引擎中的潜在用途的文章 但是我一直无法找到有关它们的技术信息 我理解体素是什么 但是我不知道稀疏体素八叉树是什么 或者它们如何比现在使用的多边形技术更有效 有人可以解释或指出我对此的解释吗 这是一个关于
  • 修改 GGplot2 对象

    然而 我很好奇 是否可以添加任何特定的图例或将哪个物种对应于观察到的预期绘图中 以分别知道它是哪个圆圈 我目前使用的是一个名为 finches 的假数据集 该包称为 cooccurr 它创建一个 ggplot 对象 我很好奇如何实际编辑它以
  • 为什么 OpenGL 有远裁剪平面,以及使用什么惯用法来处理这个问题?

    我一直在学习 OpenGL 持续困扰我的一个话题是远裁剪平面 虽然我可以理解近剪裁平面和侧剪裁平面 它们永远不会产生任何实际效果 因为它们之外的对象无论如何都不会被渲染 背后的推理 但远剪裁平面似乎只是一个烦恼 由于 OpenGL 背后的人
  • 用于测量图像中弯管长度的特征检测技术

    我有数百张来自荧光显微镜实验的 DNA 纳米管图像 我想使用图像处理以自动方式测量管长度的分布 这是显微镜图像示例 我尝试了一些使用 python 和 skimage 的特征提取方法 我尝试过使用 Canny 边缘检测 它成功地创建了每个纳
  • 如何用PHP进行有向图绘制?

    我正在寻找一种在 PHP 中绘制有向图的方法 如http upload wikimedia org wikipedia commons 0 08 Directed acirclic graph png http upload wikimed
  • 图形未在 JLayeredPane 中显示(java swing)

    我正在尝试根据用户输入逐步构建图像 我想做的是创建一堆图形并将它们添加为图层 但是我遇到了一些问题 因为它们不会显示 这是我正在使用的代码 public class ClassA protected final static int dim
  • 比较两个直方图

    对于一个小型项目 我需要将一张图像与另一张图像进行比较 以确定图像是否大致相同 这些图像很小 宽度从 25 到 100 像素不等 这些图像应该具有相同的图片数据 但略有不同 因此简单的像素相等检查不起作用 考虑以下两种可能的情况 博物馆中的
  • 使用faceting()时如何连接geom_point()和geom_line?

    我有一个问题 但我在互联网上没有找到任何相关信息 我很高兴得到一些提示 我有一个数据集 其中 x 轴是离散的 但我想将这些点相互连接 我可以做到 我的问题是当我添加分面选项时 我无法再将这些点相互链接起来 我找到了一个替代方案 但看起来不太
  • iOS:从非图像数据生成图像(Godus,如风景)

    所以看到图像后Godus http www kickstarter com projects 22cans project godus我想知道如何生成简单的 非交互式的 2D 图像 with 不同高度或层数的颜色不同就像下面的图片一样 我只
  • 设置设备默认图形参数

    我经常喜欢在 IDE 中使用浅色文本和深色背景颜色主题 当我在 R 中绘制某些内容时 绘图的默认颜色方案是白色背景上的黑色文本 边框 点 我试图默认更改此设置 最好是默认从 R 调用的特定设备 X11cairo RStudioGD 同时保留
  • 在 .NET 中旋转 JPEG,质量损失最小

    我正在尝试支持从 ASP NET MVC 旋转 JPEG 图像 以 90 度增量 我正在尝试使用System Drawing GDI 但是我遇到了问题 我尝试使用Image RotateFlip http msdn microsoft co

随机推荐

  • 如何在 Swift 中比较两个字典?

    有没有一种简单的方法可以比较两个 String AnyObject Swift 中的字典 因为它不接受 操作员 通过比较两个字典 我的意思是检查它们是否具有相同的精确键 并且对于每个键 它们是否具有相同的值 正如 Hot Licks 已经提
  • 计算垂直于 3D 中第三个向量的两个向量

    是什么最好 最快 如何计算垂直于第三个向量 X 并且彼此垂直的两个向量 这就是我现在计算这个向量的方式 HELPER unit vector that is NOT parallel to X x axis normalize X y ax
  • Python 多处理导致许多僵尸进程

    我一直在使用一组工作人员来实现 python 的多处理库 我实现了以下代码 import main1 t1 time time p Pool cores result p map main1 client list client if re
  • Python 列表作为变量名称[重复]

    这个问题在这里已经有答案了 我一直在使用 Python 并且我有这个需要制定的列表 基本上 我在多维数组中输入一个游戏列表 然后对于每个游戏 它将根据第一个条目创建 3 个变量 制作的数组 Applist Apple red circle
  • AutoHotkey 中的功能键叫什么?

    I have a key labelled Fn in blue letters at the bottom of my Windows 7 keyboard I want to trigger my AutoHotkey script w
  • 在 Java 中对阿拉伯语单词进行排序

    我有一个阿拉伯语单词列表 我想对其进行排序 我已经尝试了具有不同语言环境的标准 Collat or 例如英语或法语 但没有太大希望 我什至创建了自己的 RuleBasedCollat or 但无济于事 显然 默认排序依赖于 unicode
  • python 集合的哈希如何工作[重复]

    这个问题在这里已经有答案了 我完全熟悉哈希表和哈希的工作原理 但我试图完全理解O 1 完全来自 set1 s t print x in set1 print s in set1 set2 s print s in set2 我被告知要检查是
  • 具有初始数据的 docker postgres 不会在提交时保留

    我在 Docker 环境中创建了一个 Rails 应用程序 它链接到一个 postgres 实例 我编辑了 postgres 容器添加初始数据 通过从 Rails 应用程序运行 rake db setup 现在我提交了 postgres 数
  • SELECT 然后立即删除 mysql 记录

    我有一个 PHP 脚本 它运行 SELECT 查询 然后立即删除记录 有多个机器正在 ping 同一个 php 文件并从同一个表中获取数据 每台远程机器都运行一个 cron 作业 我的问题是 有时它无法足够快地删除 因为某些机器在同一时间执
  • 如何从 FileReader() 获取路径目录?

    您好 我有这些代码来读取用户上传的文件 function readURL input if input files input files 0 var reader new FileReader reader onload function
  • 如何通过单击 HTML 中的图像来展开图像

    我的 html 页面中有一个图像 img src http s3 media1 ak yelpcdn com bphoto sMONYSiLUQEvooJ5hZh0Sw l jpg alt width 200 height 150 如何通过
  • 如何在不阻塞主线程的情况下使用 Qt-Dbus 绑定

    我的目标是使用创建一个库Qt 的 DBus 绑定 我尝试创建一个 Qt 应用程序而不启动QEventLoop 由提供QCoreApplication类 在主线程中 这是一个简约的应用程序示例 使用 QT 4 6 2 版本工作正常 但使用 Q
  • 从 Pandas 中的字符串中提取 int

    假设我有一个数据框df as A B 1 V2 3 W42 1 S03 2 T02 3 U71 我想要一个新专栏 要么在它的末尾df或更换色谱柱B与它 因为它并不重要 只从列中提取 intB 这就是我想要的专栏C看起来像 C 2 42 3
  • 强制转换为 typeof(self)

    是否有可能创建一个类别 扩展 最终返回一个转换为的对象instancetype 我有一个类别来加载 SKS 文件 但由于该类别适用于SKNode然后所有其他子类都喜欢SKScene or SKEmitterNode等 也会采用它 所以我只是
  • 除法返回零

    这个简单的计算返回零 我无法弄清楚 decimal share 18 58 100 您在这里使用整数 尝试对计算中的所有数字使用小数 decimal share 18m 58m 100m
  • 创建您自己的自定义适配器时,getView() 方法如何工作?

    我的问题是 LayoutInflater到底有什么作用呢 为什么我读过的所有文章都首先检查convertview 是否为空 当它为 null 时意味着什么 当它不为 null 时又意味着什么 该方法接受的父参数是什么 1 The Layou
  • Outlook 筛选项目 - 获取一周范围内的所有定期约会

    我试图在 Outlook 中获取一周范围内的所有约会 但重复发生的约会没有显示 这是代码 var outlook new Microsoft Office Interop Outlook Application var calendar o
  • 有没有带有观察点的免费 python 调试器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 pdb 和 winpdb 似乎都缺少这个基本的 对我来说 功能 我看到一些建议 WingIDE 有它 但我更喜欢免费的解决方案 如果我必须付费 我更
  • Alamofire 4.0 证书无效问题

    我正在尝试通过 https 为我的 iOS 应用程序使用 Web 服务 Web 服务器使用自签名证书 使用 Web 服务时 我收到错误 证书无效 失败 错误域 NSURLErrorDomain代码 1202 该服务器的证书无效 您可能正在连
  • Gimp 的“Color to Alpha”功能背后的算法是什么?

    对于那些还不熟悉 Gimp 的 Color to Alpha 功能的人 以下是 Gimp 文档中的页面 颜色到 Alpha 它做得非常好 我很想知道 Gimp 在颜色处理方面到底是如何做到的 无论颜色可能处于哪个颜色空间 非常感谢您的任何提