- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我目前被困在图片视频项目上。
问题:
我正在从 UE4 中提取图片,由于一个错误,在屏幕截图的渲染过程中并未考虑所有灯光。输出是 HDR 图像。我想获得更好的亮度,因为导出的图片很暗,就像第一次曝光一样。
使用 UE4 中的“曝光偏差”参数,我能够真正获得场景的良好亮度,但无法将此参数应用于屏幕截图渲染:
尝试:
使用 Tonemapper 算法(特别是 cv::TonemapDrago
)我能够获得更好的图像结果:
就我而言,色调映射算法的主要问题是因为全局亮度根据区域的亮度而改变:在第二张图像中,窗口添加了大量光线,因此算法降低了所有亮度以调整意思是。在渲染的视频中,光线变化非常残酷。
我试过改变brightness和饱和没有成功。我修改了 TonemapDrago
的代码尝试对某些 steps 使用常量的算法。
问题:
我想从 HDR 图像中“选择曝光时间”。色调图基于同一图像的多个曝光时间,对我而言并不有趣。
欢迎任何其他想法。
编辑:
CV::Mat 深度为 5,类型为 CV_32FC3
cout << mat.step
给我19200
这是我用来尝试解决问题的 2 个示例:
编辑 2:
无法使用 gimp 打开 .HDR 图片,使用“explosure blend”插件进行事件。我能够使用 Photoshop 获得足够好的结果。知道背后的算法吗? OpenCV 的 6 种色调图算法中的任何一种都允许选择曝光校正。
编辑 3:
我遵循了这个 tuto 中的算法解释对于 openGL,它将此 C+ 代码提供给我:
cv::Mat exposureTonemap (cv::Mat m, float gamma = 2.2, float exposure = 1)
{
// Exposure tone mapping
cv::Mat exp;
cv::exp( (-m) * exposure, exp );
cv::Mat mapped = cv::Vec3f(1.0) - exp;
// Gamma correction
cv::pow(exp, 1.0f / gamma, exp);
cv::imshow("exposure tonemap", exp );
cv::waitKey();
return exp;
}
在我的 .HDR 图片上应用此算法,即使对 Gamma 和曝光进行了 1 和 1 的校正,我也得到了非常明亮的结果:
阅读代码,有问题,因为 1 和 1 作为参数不应该修改图片。修复了,答案已发布。非常感谢@user3896254(Ge 在评论中也看到了)
最佳答案
考虑使用 Retinex .它使用单个图像作为输入并包含在 GIMP 中,因此很容易玩弄,此外您还可以获得它的源代码(或者自己制作,这很简单)。由于您使用的是渲染图而不是照片 - 没有噪音,理论上您可以根据需要调整颜色。
但是正如@mark-ransom 已经说过的,您可能无法从呈现的输出中恢复信息。你说你有 HDR 图像作为渲染输出,但我不确定你的意思。它是单个 RGB 图像吗?每个 channel 的颜色深度是多少?我已尝试将 retinex 应用于您的样本,但显然它看起来不太好,因为压缩和保存前应用的范围有限。如果您的输出具有高范围且未压缩 - 您将获得更好的结果。
编辑:我已经在你的输入上尝试了 retinex,但结果不是很好——图像的明亮部分(灯/ window )在它们周围引入了难看的暗光晕。
在这种情况下,简单的色调映射和 Gamma 校正看起来好多了。你的代码几乎没问题,你只是有一点错字:而不是 cv::pow(exp, 1.0f/gamma, exp);
你应该有 v::pow(mapped, 1.0f/gamma, exp);
我弄乱了你的代码,注意到这种色调映射似乎降低了色彩饱和度。为了克服这个问题,我只在 HSV 图像的 V channel 上执行它。自己比较结果(左 - 全空间色调映射,右 - 仅 V): 注意地板颜色、 window 中的天空和通过这种方法保留下来的淡黄色光色。
为了完整起见,这里是完整的代码:
#include <opencv2/opencv.hpp>
using namespace cv;
Mat1f exposureTonemap (Mat1f m, float gamma = 2.2, float exposure = 1) {
// Exposure tone mapping
Mat1f exp;
cv::exp( (-m) * exposure, exp );
Mat1f mapped = 1.0f - exp;
// Gamma correction
cv::pow(mapped, 1.0f / gamma, mapped);
return mapped;
}
Mat3f hsvExposureTonemap(Mat &a) {
Mat3f hsvComb;
cvtColor(a, hsvComb, COLOR_RGB2HSV);
Mat1f hsv[3];
split(hsvComb, hsv);
hsv[2] = exposureTonemap(hsv[2], 2.2, 10);
merge(hsv, 3, hsvComb);
Mat rgb;
cvtColor(hsvComb, rgb, COLOR_HSV2RGB);
return rgb;
}
int main() {
Mat a = imread("first.HDR", -1);
Mat b = imread("withwindow.HDR", -1);
imshow("a", hsvExposureTonemap(a));
imshow("b", hsvExposureTonemap(b));
waitKey();
return 0;
}
关于c++ - 从 HDR 图像中选择亮度(曝光),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34278390/
我无法理解 HDR Histogram 的基本概念: The HDR Histogram maintains a fixed cost in both space and time. A Histog
您知道如果图像足够亮或曝光过度,每种颜色最终会变成白色吗?我正在尝试找出一个函数来执行此操作,以逼真且令人愉悦的方式应用于生成的 HDR 图像(我猜是使用理想化的相机性能作为引用)。 我想要获得的算法
最近受朋友的委托,想自己实现Matlab里的一个HDR转LDR的函数,函数名是tonemapfarbman,乘着十一假期,稍微浏览下这个函数,并做了一点C++的实现和优化。 为了看到这个函数
我对高动态范围 (HDR) 图像有一些疑问。首先,有人可以告诉我这些图像是如何存储的,我的意思是采用哪种格式?每个像素有多少位? 其次,是否可以以每像素(每 channel )8 位的常用图像格式(如
当我将此加载项部署到 MS Word 应用程序时,我必须多次单击该按钮才能最终使 hdr.insertOoxml() 成功运行。有时不得不点击这个功能超过 4 次(见下面的代码)。虽然,这似乎在 Wo
我正在开展一个使用 HDR 传感器的项目。 我们正在读取每张图像 4 个“图像”-> 4 个不同的曝光时间。 “混合”这 4 张图像以获得具有最高可能动态范围的输出图像的最佳方式是什么? 有没有像 O
我正在尝试在 OpenGL 中实现 HDR。 这是我制作 HDR 帧缓冲区的方式: glGenFramebuffers(1, &framebuffer); glBindFramebuffer(GL_F
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 8 年前。
我正在将我的 webgl 延迟渲染器转换为使用高动态范围的渲染器。我从网上的各种来源阅读了很多有关该主题的内容,并且有一些问题希望能够得到澄清。我完成的大部分阅读内容都涉及 HDR 图像渲染,但我的问
我需要打开 .hdr 文件并对其进行处理,但 imageIO 不支持该格式。 问题是我需要尽可能减少信息丢失:32bpc 是完美的,16 就可以了,少了 16 就不行了。 我想到了 3 种可能的解决方
默认情况下,Arcore/Sceneform 使用房间作为 HDR 环境图像。我该如何更换它? Default HDR Room 最佳答案 目前无法设置自己的环境贴图。如果您想跟踪开发,请跟踪此功能请
我正在使用 FCam 拍照,现在没有修改,照片与智能手机相机相当。 FCam 宣传 HDR 和低光性能,但我没有看到任何在拍照时如何使用它的示例。 如何拍摄 HDR 照片?根据我使用 SLR 的经验,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
关闭。 这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年
我做了什么:- 我尝试启用stabilization 和HDR 但它不起作用。我认为我走对了路。当我尝试检查当前设备是否支持稳定时和 HDR 在这两种情况下我在所有设备中都只有错误的情况。 如果下面的
我目前被困在图片视频项目上。 问题: 我正在从 UE4 中提取图片,由于一个错误,在屏幕截图的渲染过程中并未考虑所有灯光。输出是 HDR 图像。我想获得更好的亮度,因为导出的图片很暗,就像第一次曝光一
我使用 AVFoundation 框架来创建自定义相机应用程序。 是否可以为自定义相机应用使用 HDR 拍摄照片,即 HDR 是否暴露在相机 api 中? 最佳答案 有同样的问题并在this中找到了答
我想通过 AVFoundation 和/或 CoreImage 获得实时和后处理的 HDR 效果。我假设一旦捕捉到全帧静止图像,使用 CoreImage 就相对容易,但是有人知道如何使用 AVCapt
有人知道可用于使用 Camera2 API 实现 HDR+ Auto 的文档吗?我找不到任何使用它的示例。 Open Camera 使用 HDR,但不使用 HDR+ Auto。 最佳答案 HDR+ A
据小米电视官方消息,小米电视4S 75英寸今日到手价3999元。小米电视4S 75英寸于去年11月发布,采用4K超高清屏幕与金属机身,内置小爱同学。 外观设计方面,小米电视4S 75英寸采用窄
我是一名优秀的程序员,十分优秀!