OpenCV 和像 Adob​​e Photoshop 一样的锐化遮罩

2023-12-30

我正在尝试像 Adob​​e Photoshop 中那样实现模糊遮罩。我在互联网上收集了很多信息,但我不确定我是否遗漏了一些东西。这是代码:

void unsharpMask( cv::Mat* img, double amount, double radius, double threshold ) {

// create blurred img
cv::Mat img32F, imgBlur32F, imgHighContrast32F, imgDiff32F, unsharpMas32F, colDelta32F, compRes, compRes32F, prod;
double r = 1.5;
img->convertTo( img32F, CV_32F );
cv::GaussianBlur( img32F, imgBlur32F, cv::Size(0,0), radius );
cv::subtract( img32F, imgBlur32F, unsharpMas32F );
// increase contrast( original, amount percent ) 
imgHighContrast32F = img32F * amount / 100.0f;
cv::subtract( imgHighContrast32F, img32F, imgDiff32F );
unsharpMas32F /= 255.0f;
cv::multiply( unsharpMas32F, imgDiff32F, colDelta32F );
cv::compare( cv::abs( colDelta32F ), threshold, compRes, cv::CMP_GT );
compRes.convertTo( compRes32F, CV_32F );

cv::multiply( compRes32F, colDelta32F, prod );
cv::add( img32F, prod, img32F );

img32F.convertTo( *img, CV_8U );
}

目前我正在使用灰度图像进行测试。如果我在 Photoshop 中尝试完全相同的参数,我会得到更好的结果。我自己的代码会产生嘈杂的图像。我究竟做错了什么。

第二个问题是,如何在 RGB 图像上应用锐化遮罩?我是否必须对 3 个通道中的每一个通道进行锐化,或者在其他色彩空间中会更好吗?这些事情在 Photoshop 中是如何完成的呢?

感谢您的帮助!


我也在尝试复制 Photoshop 的 Unsharp Mask。 让我们暂时忽略阈值。

我将向您展示如何使用其高斯模糊复制 Photoshop Unsharp Mask。

假设O是原始图像层。

创建一个新图层 GB,它是在 O 上应用的高斯模糊。
创建一个 O - GB 的新图层(使用“应用图像”)。
通过反转 GB - invGB 创建一个新层。
使用 Image Apply 创建一个新图层 O + invGB。
创建一个新层,它是前一层的反转,即 inv(O + invGB)。
创建一个新层 O + (O - GB) - inv(O + invGB)。

当您在 Photoshop 中执行此操作时,您将获得锐化蒙版的完美再现。

如果您进行数学计算,回想一下 inv(L) = 1 - L,您将得到USM 锐化为 USM(O) = 3O - 2B。

然而,当我直接在 MATLAB 中执行此操作时,我无法得到 Photoshop 的结果。

希望有人能知道确切的数学。

Update

OK,
我想到了。
在 Photoshop 中 USM(O) = O + (2 * (数量 / 100) * (O - GB))
其中 GB 是 O 的高斯模糊版本。

然而,为了复制 Photoshop 的结果,您必须执行上述步骤,并将每个步骤的结果剪裁为 [0, 1],就像在 Photoshop 中所做的那样。

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

OpenCV 和像 Adob​​e Photoshop 一样的锐化遮罩 的相关文章

随机推荐

  • 基于另一个更新的列更新列

    我的问题与单个更新语句中的更新顺序有关 我观察到 当我使用 a 设置变量时SELECT声明 变量是按顺序设置的 例如 SELECT Test1 2 Test2 Test1 1 在此刻 Test1将2 and Test2将3因为集合操作是按顺
  • std::pair<> 的默认构造函数是否将基本类型(int 等)设置为零?

    写完后 std pair
  • Android 浏览器应用程序对 URL 的最大长度有限制吗?

    有谁知道 Android 浏览器在 GET URL 中接受的字符数是否有最大限制 我假设任何限制都会转化为其他基于 WebKit 的浏览器 例如 iPhone 等 但如果有人有不同的了解 对此进行澄清也很好 None
  • Webpack 在编译 TypeScript 代码失败时导致 gulp watch 崩溃

    我正在运行一个 gulp watch 任务 它正在编译我的前端应用程序 当我遇到打字稿错误时 只是因为我太早点击保存 整个过程崩溃 我必须手动重新启动它 我希望 webpack 和 typescript 编译器只报告错误 只要它们在监视模式
  • 是否可以在 BigQuery 中将外部表转换为本机表?

    我已经从 Google Cloud Storage 创建了一个表 文件路径以 gs 开头 即使尝试多次后 我也无法将其创建为本机 我只有在将表选项设置为本机后才成功 后来我就可以成功查询到这个表了 但是 我需要执行以下操作 向表中添加一列
  • s3可容纳的最大连接数

    我正在学习亚马逊网络服务 我只是想知道 Amazon S3 在不崩溃的情况下可以同时保持的最大连接数 大约 是多少 理论上这是无限的 为了实现这一目标 他们使用了他们在此处解释的分区方案 http docs aws amazon com A
  • Xcode 无法读取当前工作目录中项目特定的 .lldbinit

    我想设置项目特定的 lldbinit 文件 以便 所有内容 都处于版本控制之下 并且可以在新计算机中轻松设置 然而似乎我只能读取 lldbinit 文件而不是任何 git project lldbinit 文件 LLDB手册说 lldb 将
  • Twitter4j。通过#hashtag进行查询和过滤帖子

    我正在尝试将 Twitter 使用 Twitter4j 集成到我的 Android 应用程序中 但我有一些顾虑 问题 我想检索具有特定 hashtag 的推文 例如 sxbsw2011 这是我当前正在使用的代码 Query query ne
  • 从绝对路径中提取相对路径

    这是一个看似简单的问题 但我很难以干净的方式完成它 我有一个文件路径如下 这个 是 一个 绝对 路径 到 我的 文件的 位置 我需要的是从上面给定的路径中提取 of my file 因为这是我的相对路径 我的想法如下 String abso
  • 需要解释一下保存分区表的kdb/q脚本

    我试图从以下位置理解这段代码 https code kx com q kb loading from large files 自己定制它 例如按小时 分钟 滴答数等分区 cat fs q d Q extension of Q dpft to
  • 如何在 Go 中使用不记名令牌发出请求

    我需要向 API 发出 GET 请求 并在授权请求中包含不记名令牌 我怎样才能在 Go 中做到这一点 我有以下代码 但没有成功 package main import io ioutil log net http func main url
  • 如何定义自定义源集而不在 Gradle 中显式定义其路径?

    说明书上是这么写的 IE 那src sourceSet java是 给定源集的 Java 源 的默认路径 如何利用这个 假设我想创建源集demo 我可以写吗 sourceSets demo java srcDir src demo java
  • 如何使用 Firestore 获取当前登录用户的文档? [复制]

    这个问题在这里已经有答案了 我的 Firestore 中有这个结构 我希望登录的用户能够获取所有图像 URL 以及与该用户 ID 关联的其他字段 例如名称 价格和描述 此信息将被加载到 recyclerView 中 这是项目模型 packa
  • 计算点向量的平均值

    我在 OpenCV 中有一个二维点的向量 std vector
  • 如何在 jquery ui 对话框中提交表单并显示其响应

    你好 我正在使用 jquery ui 对话框并尝试使用 ajax 提交表单并显示其响应 直到表单对话框和 ajax 请求其工作正常 但不知道如何在同一对话框中显示其响应 任何建议都会帮助我 假设您有以下标记 div style displa
  • 如何禁用漂亮照片?

    我现在如何启用prettyphoto 但问题是如何禁用 这里我启用了 PrettyPhoto document ready function a rel prettyPhoto prettyPhoto social tools false
  • Facebook 访问令牌无法扩展

    我正在使用 facebook android sdk 我刚刚从 github 下载了它 我了解访问令牌仅在非常有限的时间内有效 并且每次应用程序启动时都需要按照文档中的描述进行扩展 https developers facebook com
  • UIPickerView 辅助功能 VoiceOver 问题

    启用 VoiceOver 后 无论我们滑动到哪一行 UIPickerView 的画外音始终显示 Item 1 of TotalNumberOfItems 以编程方式 所有元素都会使用正确的选定索引进行更新 但 VoiceOver 始终显示
  • 如何从 C# 中的类访问表单方法和控件?

    我正在开发一个 C 程序 现在我有一个Form和几节课 我希望能够访问一些Form控件 例如TextBox 来自我的班级 当我尝试更改文本中的文本时TextBox从我的课堂上我收到以下错误 非静态字段 方法或属性 Project Form1
  • OpenCV 和像 Adob​​e Photoshop 一样的锐化遮罩

    我正在尝试像 Adob e Photoshop 中那样实现模糊遮罩 我在互联网上收集了很多信息 但我不确定我是否遗漏了一些东西 这是代码 void unsharpMask cv Mat img double amount double ra