DCT变换(JAVA)
来源:互联网 发布:淘宝如何改最低折扣 编辑:程序博客网 时间:2024/06/06 02:17
对图像划分为8*8的像素块并进行DCT变换
经过上一篇博文(http://blog.csdn.net/qq_29859497/article/details/72860023)将一张图片进行转换颜色空间并将各个通道进行分离后,我们可以取得各个通道如亮度Y、饱和度Cb、色度Cr通道,对他们进行DCT变换处理。
DCT变换在当前的图像分析已经压缩领域有着极为广大的用途,我们常见的JPEG静态图像编码以及MJPEG、MPEG动态编码等标准中都使用了DCT变换。相应公式可自行百度~
DCT变换(JAVA):
public static double[][] DCTconvertion(double[][] f) { int sizeX = f.length; int sizeY = f[0].length; double[][] F = new double[sizeX][sizeY]; int u, v, x, y; for(int xx = 0; xx < sizeX; xx += 8){ for(int yy = 0; yy < sizeY; yy += 8){ for(int u1 = xx; u1 < xx + 8; u1++){ u = u1 - xx; for(int v1 = yy; v1 < yy + 8; v1++){ v = v1 - yy; double subSum = 0.0; for(int x1 = xx; x1 < xx + 8; x1++){ x = x1 - xx; for(int y1 = yy; y1 < yy + 8; y1++){ y = y1 - yy; subSum += Math.cos(((2.0*x + 1.0)*u*Math.PI)/(16.0)) * Math.cos(((2.0*y + 1.0)*v*Math.PI)/(16.0)) * f[x1][y1];; } } F[u1][v1] = Math.max(Math.min(((Cfunc(u) * Cfunc(v)) / 4.0) * subSum, 1024.0), -1024.0); } } } } return F;}
可用一个二维数组保存DCT变换后的数据,当然可以在控制台将数据打印出来,打印二维数组printArray方法:
public static void printArray(int[][] F){ int X = F.length; int Y = F[0].length; for(int y = 0; y < Y; y++){ for(int x = 0; x < X; x++){ System.out.print(F[x][y] + " "); System.out.print("\t"); } System.out.println(""); } System.out.println(""); }
运行效果如下图:
(o゜▽゜)o☆[BINGO!]这里是小屋,欢迎戳(o゜▽゜)o☆[BINGO!]
阅读全文
2 0
- DCT变换(JAVA)
- DCT变换(matlab)
- 离散余弦变换(DCT)
- DCT变换-笔记(草稿)
- 图像变换(离散余弦变换DCT)
- DCT变换
- DCT变换
- DCT变换
- DCT变换
- dct变换
- DCT变换
- DCT变换
- dct变换
- DCT变换
- DCT变换
- DCT变换
- 4*4整数快速变换(包括DCT变换量化以及反DCT变换反量化)
- 关于离散余弦变换(DCT)---转载
- HTML之动画
- Do you feel like we do? Stanford psychologists examine how culture can guide giving
- 课堂笔记_纹理基本思想和应用
- DOM一些方法
- 数据压缩原理与应用 实验五 JPEG 原理分析及 JPEG 解码器的调试
- DCT变换(JAVA)
- 什么是a[href*=#]:not([href=#])
- JAVA异常及处理
- “师创杯”山东理工大学第九届ACM程序设计竞赛 正式赛 G.打字【Dp+贪心】水题
- Hello World
- ARC 075E Meaningful Mean 枚举+树状数组
- Multi-Programming-6 CountDown latches
- Content-disposition下载头部响应
- jenkins