我正在尝试用java对块大小为8X8的图像执行DCT。在对第一个块执行DCT之后,我得到了第一个值"372"。在对整个图像执行DCT后,我将这些值写入PNG灰度图像。图像内的值自动更改。灰度图像将不会存储大于255的值。大于255(例如372(的值会发生什么情况?
在信息丢失后无法获取原始图像,因此需要:
- 执行DCT或其他
- 从整个图像中查找
min,max
值 - 更改范围,使任何
pixel(x,y)=(255*(pixel(x,y)-min))/(max-min)
+/-1
或一些如果要夹紧到正确的范围
在这之后,你会失去绝对值,但相对变化会保持在
- 出于某些目的,这就足够了吗
- 如果需要恢复原始图像
- 则需要将最小值、最大值编码到某个位置的
png
- 所以添加伪扫描线并将CCD_ 5编码为最初的几个像素
那么恢复就很容易了:
- 读取
png
图像 - 解码最小值、最大值
- 恢复原始动态范围
pixel(x,y)=min+(((max-min)*pixel(x,y))/255)
+/-1
或一些如果要夹紧到正确的范围
- 执行IDCT或其他