【问题标题】:Change image brightness and contrast using DCT coefficients使用 DCT 系数更改图像亮度和对比度
【发布时间】:2014-07-04 23:24:58
【问题描述】:

我正在尝试在频域中执行一些图像转换(使用 dct coeff),例如调整灰度图像的亮度和对比度。到目前为止我所知道的是,调整亮度意味着为像素强度添加偏移量,调整对比度是将每个像素乘以一个值。我的问题是这在频域中是否仍然可用?

img = image("lena.bmp")
img= double(img)-128;
blKsz = 8;
coef = blkproc(I,[block_size block_size],'dct2');

new_coef = coef - 0.3;
% IDCT
new_img = blkproc(new_coef,[block_size block_size],'idct2');
new_img = new_img+128;

当我这样做时,图像没有明显的差异,即使值有点高。但是,如果我不是按块执行,而是对完整图像的 coef 执行

coef = dct2(img); % or blKsz=512; %full image

区别很明显。

我做错了什么?是我选择相加和相乘的值(完全随机)的方式吗?我还想提一下,如果我添加一个来自 idct 的偏移量,输出中就会出现(每个块的前 3 个左上角像素与其他像素完全不同)。

我知道每个 dct 块的左上角值都有块的亮度平均值。我应该只修改这个而不修改其他值吗?块大小如何影响结果?

【问题讨论】:

  • 我不想刻薄,但我认为您需要了解 DCT 系数的重要性;例如将所有系数加 1 不会改变图像的亮度...例如,DCT 的第一个系数是多少?
  • 确实,我只知道 DCT 系数,它们根据频率存储能量。所以第一个系数代表图像中占主导地位的低频,当我们移动到右下角时,我们会找到高频部分。但是,我不知道为什么将所有系数加 1 不会改变亮度。我猜想为所有系数添加一个值会增加低频和高频,但我不明白这将如何反映在像素的强度上。我可以阅读任何文章吗? (我知道有很多关于 DCT 的书,但我读过的所有书都没有帮助我解决这个问题)。
  • 向所有频率添加一个常数基本上会模拟加性高斯白噪声,因为频域中的频谱在所有频率上都是平坦的。你真正在做的是给你的图像添加噪点,所以当你最终恢复它时......我只想说,你添加的越多,它看起来就越像垃圾。因此,添加一个常数绝对不会增加图像的亮度或对比度。
  • 至少对比一下,将所有 coeff 乘以相同的常数确实具有预期的效果。但我理解你的亮度。因此,我应该只在每个块中的第一个左上角系数中添加一个常量吗?
  • 在这种情况下,是的。为每个 DC 项添加一个常数将实现亮度的增加。亮度的增加归因于具有更多的“功率”,因此这应该可以工作....但是,我认为在频域中这样做没有意义。您可以通过获取图像并向每个像素值添加一个常数来轻松实现相同的目标。

标签: image matlab image-processing dct


【解决方案1】:

在频域中调整图像的亮度和对比度当然是可能的,但其背后的实际意义值得怀疑。主要是,我不确定你为什么要经历计算每个 DCT 块的所有计算负担。在这种特殊情况下,空间域中的对比度和亮度增强是最坏的情况O(n),其中n 是图像中的像素总数。转到频域会产生额外的计算成本。

无论如何,正如您在帖子中提到的,您可以通过向所有强度值添加一个常数来增加亮度,并且要增加对比度,您可以按一个常数因子缩放每个像素。它类似于这样的频域:

对比度增强

通过查看空间域,如果将每个像素乘以一个常数,则所有 DCT 系数也将乘以一个常数,因为 DCT 是(相对)可逆变换。因此,如果你想实现对比度增强,你可以为你拥有的每个 DCT 块取每个值并乘以这个常数。

亮度增强

通过查看空间域,如果您获取每个像素并为其添加一个常数,那么您实际上是在增加图像的整体“力量”。如果您要查看任何图像和添加到每个像素的恒定值的图像之间的频谱,对于 DCT 块,系数将是相同的除了对于 DC 值(顶部每个块的左角)。因此,如果您想增加频域中的亮度,您可以为每个 DCT 块中的每个 DC 值添加一个常数值。但是,我不确定在每个块中向 DC 项添加一个值与向空间域中的每个像素添加一个常数值之间的数值相关性是什么。我的意思是添加一个值......比如说...... 5 例如......在空间域中并不意味着如果你在每个 DC 值上添加一个 5 的值,你会得到相同的结果。亮度肯定会增加,但我不确定如何量化使用逆 DCT 后亮度会增加多少。

您应该注意的一个警告是,如果您尝试为每个 DCT 系数添加一个值,您实际上是在模拟additive white Gaussian noise。值越高,图像中引入的噪点就越多。因此,如果您采用逆 DCT,结果可能不符合您的喜好。因此,请确保将常数添加到 DC 值(即 DCT 块的左上角)


长话短说,理论上可以在频域中做到这一点,但实际上我没有看到任何意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 2012-12-03
    • 1970-01-01
    相关资源
    最近更新 更多