我正在尝试在频域中执行一些图像转换(使用 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 块的左上角值具有块的亮度平均值。我应该只修改这个而不修改其他值吗?块大小如何影响结果?