gpt4 book ai didi

c++ - 如何使用 OpenCV 在高度压缩的图像中添加 "dequantize"宏 block ?

转载 作者:太空宇宙 更新时间:2023-11-03 22:56:36 24 4
gpt4 key购买 nike

给定一个高度压缩的图像(非特定格式),存在各种大小和形状的图像 block ,其中所有像素都具有完全相同的值。

例如:

Highly compressed image with "macro blocking"

我的目标是“智能地”将这些 block 平滑成渐变,从而产生更平滑、更自然的图像。我已经看到了可能适用的绘画内技术(例如热扩散),但我不完全确定如何根据我的目的调整它们。我目前正在编写自己的函数来执行此操作(详情如下)。 OpenCV(或其他地方)中是否已经有可以执行此过程的 C++ 函数?如果不是,是否有与我使用的方法不同的方法可能产生更好/更快的结果?

[注意:我所有的图像在处理之前都被转换为 float 。]

我目前的想法是测试一个像素是否与其相邻像素相同。如果是这样,我开始从像素位置开始搜索并向外搜索,直到找到一个不相同的邻居。不幸的是,这要求我使用整个图像而不是滑动内核。我不会在此处包括搜索代码,因为它很长且重复。但它本质上涉及测试当前像素左侧的一列、上方的一行、右侧的一列和下方的一行,并在我向外工作时扩展它们。像这样:

  13 14 15 16 17
12 3 4 5 18
11 2 x 6 19
10 1 7 8 20
9 22 23 24 21

获取目标后,会额外考虑搜索范围较大但欧氏距离较小的目标。

如果色差在可接受的范围内,我再计算最近的不相同邻居的欧氏距离,并根据欧氏距离和两个不相同像素之间的色差计算一个像素值。我还使用用户设置的 sigma 值来影响渐变的衰减。

output_value = current_pixel_value - ((current_pixel_value-test_pixel_value)/(euclidean_distance*sigma));

此方法工作“正常”,但在具有巨大宏 block 的图像中速度较慢,并且输出仍然具有“带状”外观。 (参见墙壁、地板等的“白色”部分)。

结果: "Dequantized" result image

最佳答案

论文Advanced Video Debanding由 Gary Baugh 等人撰写。做你为过度压缩的视频做的事情。底层算法也应该适用于静止图像。也许有帮助。

关于c++ - 如何使用 OpenCV 在高度压缩的图像中添加 "dequantize"宏 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29020057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com