续:《DCT变换的应用》 http://t.csdn.cn/h1KmE

在DCT图像变换完成后,需要把数据从高频到低频频域强度信号进行筛选等操作,为了方便算法进行操作,最好转化为一个一维的数据,而如果每一行都从左到右写入到一维数据表中,会导致高频和低频频域信号混杂在整个表不同的部位,不方便进行霍夫曼编码等操作。

因此,zigzag扫描算法就派上用场了,也就是按照图上顺序,从左上到右下写成一维数据。

另外,它还有一个额外的好处,就是以此方式把二维数据转换为一维数据后,并不需要知道原来二维数据的边长,一维数据可以以同样的规则重新填充为降维前的大小。

要顺利实现一个算法,要先清晰描述问题和现象,才方便找到规律,然后用程序语言描述。顺便也作为自己的一种推理能力训练。

分析图上规律,我认为可以分为两个部分进行数据写入:

1、图像分为两个部分,以包含最左下到最右上的对角线的部分为左三角形,右下部分则为右三角形:

2、左三角形部分写入规律,除(0,0)外,x方向游标x∈(1, 3, 5,7……)都是从当前点往左下移动,也就是x--(x>=0),y++;y方向游标y∈(2, 4, 6……)则是从当前点往右上,即x++,y--(y>=0)

3、右三角形部分写入规律,x方向游标x∈(1, 3, 5,7……)都是从当前点往右上移动,也就是x++(x<8),y--;右侧y方向游标y∈(2, 4, 6……)则是从当前点往左下,即x--,y++(y<8)

规律总结完毕,检查无漏,开始编写代码:

package com.cjztest.aboutJPEG;public class Ziggan {public static void main(String[] args) {int mGrayPixels[] = {80,60,34,10,5,1,94,0,56,30,5,4,1,86,0,0,23,6,3,1,80,0,0,0,15,2,1,75,0,0,0,0,1,1,75,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};/* * 左三角形部分:* 设向左下方前进为正方向,x轴起始点,1,3,5,7* 右上为正方向:y起始点:2,4,6* */    int matrixLen = 8;//先塞入第一个数int result[] = new int[matrixLen * matrixLen];result[0] = mGrayPixels[0];int resultOffset = 1;//开始遍历for (int offset = 1; offset < matrixLen; offset ++) {if (offset % 2 != 0) { //x起点for (int x = offset, y = 0; x >= 0; x--, y++) {result[resultOffset++] = mGrayPixels[x + y * matrixLen];}} else { //y起点for (int y = offset, x = 0; y >= 0; y--, x++) {result[resultOffset++] = mGrayPixels[x + y * matrixLen];}}}/*右三角形部分:* */for (int offset = 1; offset < matrixLen; offset ++) {if (offset % 2 != 0) { //x起点for (int x = offset, y = 7; x < matrixLen; x++, y--) {result[resultOffset++] = mGrayPixels[x + y * matrixLen];}} else  { //y起点for (int y = offset, x = 7; y < matrixLen; y++, x--) {result[resultOffset++] = mGrayPixels[x + y * matrixLen];}}}//读取结果for (int i = 0; i < matrixLen * matrixLen; i++) {System.out.print(result[i] + ", ");if ((i + 1) % matrixLen == 0) {System.out.println();}}}}

运行结果:

80, 60, 56, 23, 30, 34, 10, 5,

6, 15, 1, 2, 3, 4, 5, 1,

1, 1, 1, 1, 1, 0, 0, 75,

75, 80, 86, 94, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0,

源码:

src/com/cjztest/aboutJPEG/Ziggan.java · lvlv/JavaPractice - 码云 - 开源中国 (gitee.com)

JPEG图像压缩探索_zigzag扫描(原创)相关推荐

  1. JPEG图像压缩探索_DCT变换的应用

    目录 为什么写这篇文章: 一.傅里叶变换简介 二.DCT是什么 三.DCT在图像有损压缩中的应用 1.图像有损压缩的依据点: 2.使用DCT进行图像有损压缩的具体操作: 3.使用IDCT进行图像解压缩 ...

  2. 基于DCT变换的JPEG图像压缩原理

    1.为什么要进行图像压缩 众所周知,当今人类社会具有三大支柱,即物质.能量.信息.当下已由物质过渡到信息,从农业现代化到工业现代化,再到当今的信息化时代.信息具有通用性.抽象性.无限性.其通用性表现在 ...

  3. 基于DCT变换的JPEG图像压缩

    基于DCT变换的JPEG图像压缩 摘 要:图像和视频通常在计算机中表示会占用非常大的空间,而出于节省硬盘空间的考虑,往往要进行压缩.而随着网络的发展,图像压缩技术越来越被人所重视.DCT变换是图像压缩 ...

  4. 基于DCT变换的JPEG图像压缩原理与JPEG2000编解码原理

    目录 参考文章 基于DCT变换的JPEG图像压缩原理 图像数据压缩 图像处理 为什么可以进行图像压缩? 颜色空间转换 RGB CMY HSV/HSI/HSB/HSL YUV/YCbCr YCbCr与R ...

  5. 令人拍案叫绝的JPEG图像压缩原理

    作者 | Jack Sigmoid  编辑 | 3D视觉开发者社区 前言 从事各行各业的大佬们,我相信,你们对图像格式是不陌生的,有很多种图像格式,比如,png,jpeg等等,但是你发现,同一张图片, ...

  6. JPEG图像压缩解压算法——C++实现

    兹于2017年11月,应<多媒体技术基础>课程实验的要求,本人就基于JPEG图像压缩解压算法做了较为深入的理解,用C++语言实现JPEG图像压缩解压算法. JPEG图像压缩解压算法 一.实 ...

  7. Baumer工业相机堡盟相机如何使用JPEG图像压缩功能(LXT.JP系列相机图像压缩功能的使用和优点以及行业应用)(C#)

    项目场景 Baumer工业相机堡盟相机是一种高性能.高质量的工业相机,可用于各种应用场景,如物体检测.计数和识别.运动分析和图像处理. Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分 ...

  8. 压缩减小图像大小技巧:8个最佳 JPEG 图像压缩软件

    如果您必须压缩以减小特定图像的大小,Jpeg 图像压缩软件可能会有很大用处.您无需自己动手,只需将图像上传到各种软件,等待工作完成即可.然而,大多数人通常对他们应该选择哪种软件感到困惑,因为可供选择的 ...

  9. 程序员看的JPEG图像压缩介绍(多图慎入)

    目录 1.介绍 2.数据压缩的前提 3.基于DCT的JPEG压缩编码流程 3.1 色相转换 3.2 区块切割与采样 3.3 离散余弦变换 3.4 DCT量化过程 3.5 Z字型编码过程 3.6 DC系 ...

最新文章

  1. matlab game of life,模拟器cellular auotomata元胞自动机 matlab
  2. mycat mysql 主从切换_Mycat读写分离与主从切换
  3. phpstorm PHP language level无法选择
  4. 必备知识:大数据处理应遵循的原则
  5. 删除 java代码中所有的注释
  6. 【CCCC】L2-004 这是二叉搜索树吗? (25分),二叉搜索树前序遍历
  7. 背包问题回溯法c语言程序,C语言回溯法解决背包问题
  8. 全国省市县oracle,最新行政区划 省市区三级 街道乡镇四级 社区/村五级 每月更新(2021年4月版)...
  9. html网页设计字体变色,网页制作怎么改变字体颜色
  10. 4根网线水晶头接法(8根只接4根即可通讯)
  11. maya镜像模型但不改变点序 对称操作
  12. 图形算法:圆形生成算法
  13. gaussDB200 单节点安装
  14. DDR3 MIG上板测试记录
  15. OneNote for windows10卸载及重装
  16. AWS攻略——Peering连接VPC
  17. jQuery伪类选择器
  18. oracle 的dba users表,oracle DBA 常用表和视图
  19. 华为和字节,终于被时代驱赶到了同一条赛道上
  20. AI 助力垃圾分类(百度云API接口+摄像头实现)

热门文章

  1. 信号强度 android,一种获取手机信号强度的方法
  2. 海康摄像头字符叠加详解
  3. 华为OD面试——机试算法
  4. 阿里云ECS部署Docker
  5. vue-seamless-scroll 从入坑到放弃
  6. 微信小程序:多功能图片处理器
  7. 如何将md文件转换为html
  8. unity接入讯飞AIUI(Windows SDK)
  9. 爬取知乎神回复 | 上次笑死人,这次继续笑~
  10. IDEA java类文件左下角出现橙红色的圆形小标识