zoukankan      html  css  js  c++  java
  • Spark DCT 离散余弦变换

    package com.home.spark.ml
    
    import org.apache.spark.SparkConf
    import org.apache.spark.ml.feature.DCT
    import org.apache.spark.ml.linalg.Vectors
    import org.apache.spark.sql.SparkSession
    
    /**
      * @Description: Discrete Cosine Transform (DCT)
      * 离散余弦变换将时域中长度为N的实值序列转换为频域中另一个长度为N的实值序列。
      * 离散余弦变换(DCT for Discrete Cosine Transform)是与傅里叶变换相关的一种变换,它与离散傅里叶变换类似,但是只使用实数。
      *
      * 这种变化经常被信号处理和图像处理使用,用于对信号和图像(包括静止图像和运动图像)进行有损压缩。
      * 在压缩算法中,现将输入图像划分为8*8或16*16的图像块,对每个图像块作DCT变换;然后舍弃高频的系数,
      * 并对余下的系数进行量化以进一步减少数据量;最后使用无失真编码来完成压缩任务。解压缩时首先对每个图像块作DCT反变换,然后将图像拼接成一副完整的图像。
      * 大多数自然信号(包括声音和图像)的能量都集中在余弦变换后的低频部分。
      * 由于人眼对于细节信息不是很敏感,因此信息含量更少的高频部分可以直接去掉,从而在后续的压缩操作中获得较高的压缩比。
      **/
    object Ex_DCT {
      def main(args: Array[String]): Unit = {
        val conf: SparkConf = new SparkConf(true).setMaster("local[2]").setAppName("spark ml")
        val spark = SparkSession.builder().config(conf).getOrCreate()
    
        val data = Seq(
          Vectors.dense(0.0, 1.0, -2.0, 3.0),
          Vectors.dense(-1.0, 2.0, 4.0, -7.0),
          Vectors.dense(14.0, -2.0, -5.0, 1.0))
    
        val df = spark.createDataFrame(data.map(Tuple1.apply)).toDF("features")
    
        val dct = new DCT()
          .setInputCol("features")
          .setOutputCol("featuresDCT")
          .setInverse(false)
    
        val result = dct.transform(df)
        result.show(false)
    
        spark.stop()
      }
    }
  • 相关阅读:
    linux下进度条的简单实现
    简单vim配置
    Linux下find指令
    Python学习笔记十三_操作数据库
    Python学习笔记十二_常用模块
    Python学习笔记十一_函数返回多值、列表生成式、循环多变量、入参格式声明
    Python学习笔记十_模块、第三方模块安装、模块导入
    Python函数及json练习_双色球
    Python函数及json练习_商品管理
    Python json练习_读写文件函数
  • 原文地址:https://www.cnblogs.com/asker009/p/12200236.html
Copyright © 2011-2022 走看看