[ISP]DCT离散余弦变换及C++代码demo

news2025/3/14 11:28:29

1.基本定义

离散余弦变换(DCT for Discrete Cosine Transform)

DCT(Discrete Cosine Transform,离散余弦变换)是一种常用的信号处理技术,广泛应用于图像处理、音频处理、视频压缩等领域。DCT将一个信号或数据序列从时域(或空域)转换为频域,可以有效地提取信号的频域特征,实现信号的压缩和特征提取。

DCT与傅里叶变换类似,但DCT仅使用实数部分,因此更适合于处理实际信号。DCT将信号分解为一系列余弦函数的加权和这些余弦函数的频率从低到高排列,能够较好地捕捉信号的频域特征

在图像处理中,DCT常用于JPEG图像压缩算法中,将图像分块进行DCT变换,然后通过量化和熵编码实现图像的压缩。在音频处理中,DCT也被用于音频压缩和音频特征提取。此外,DCT还可以应用于数据压缩、信号处理、模式识别等领域。

总的来说,DCT是一种重要的信号处理技术,具有广泛的应用领域,能够帮助我们理解信号的频域特征、实现信号的压缩和特征提取。

2.demo实现代码

#include <iostream>
#include <opencv2/opencv.hpp>

void dctImage(cv::Mat& image) {
    cv::Mat imageFloat;
    image.convertTo(imageFloat, CV_32F); // 转换为32位浮点数

    cv::Mat channels[3];
    cv::split(imageFloat, channels); // 将图像拆分为RGB通道

    for (int i = 0; i < 3; ++i) {
        cv::dct(channels[i], channels[i]); // 对每个通道应用DCT
    }

    //可选,低频滤波处理
    int cutofffreq = 10;//截止频率
    for (int i = 0; i < 3; i++)
    {
        for (int row = 0; row < channels[i].rows; ++row) {
            for (int col = 0; col < channels[i].cols; col++)
            {
                if (row > cutofffreq || col > cutofffreq) {
                    channels[i].at<float>(row, col) = 0;//高频部分置零
                }
            }
        }
    }
    for (int i = 0; i < 3; ++i) {
        cv::idct(channels[i], channels[i]); // 对每个通道应用逆DCT
    }

    cv::merge(channels, 3, imageFloat); // 合并RGB通道

    imageFloat.convertTo(image, CV_8U); // 转换回8位图像
}

int main() {
    cv::Mat image = cv::imread("F:/2024/ISP_Cpp/1.DCTdemo/ISPcpp_0.jpg"); // 读取RGB图像

    if (image.empty()) {
        std::cerr << "Error: Unable to read image file." << std::endl;
        return -1;
    }

    dctImage(image); // 应用DCT处理图像
    cv::Mat resizedImage;
    cv::resize(image, resizedImage, cv::Size(), 0.5, 0.5);//调整图像大小

    //cv::imshow("DCT Image", resizedImage); // 显示处理后的图像
    cv::imwrite("F:/2024/ISP_Cpp/1.DCTdemo/processed_image.jpg", resizedImage);
    cv::waitKey(0);

    return 0;
}

3.DCT 去高频效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1495180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新JVM面试题(持续更新)

JVM 1 为什么需要JVM&#xff0c;不要JVM可以吗&#xff1f; JVM可以帮助我们屏蔽底层的操作系统 一次编译&#xff0c;到处运行 JVM可以运行Class文件 2 JDK&#xff0c;JRE以及JVM的关系 3 我们的编译器到底干了什么事&#xff1f; 仅仅是将我们的 .java 文件转换成了 .c…

数据库系列之:什么是 SAP HANA?

数据库系列之&#xff1a;什么是 SAP HANA&#xff1f; 一、什么是 SAP HANA&#xff1f;二、什么是内存数据库&#xff1f;三、SAP HANA 有多快&#xff1f;四、SAP HANA 的十大优势五、SAP HANA 架构六、数据库设计七、数据库管理八、应用开发九、高级分析十、数据虚拟化 一、…

原生IP是什么?如何获取海外原生IP?

一、什么是原生IP 原生IP地址是互联网服务提供商&#xff08;ISP&#xff09;直接分配给用户的真实IP地址&#xff0c;无需代理或转发。这类IP的注册国家与IP所在服务器的注册地相符。这种IP地址直接与用户的设备或网络关联&#xff0c;不会被任何中间服务器或代理转发或隐藏。…

后台组件-语言包

<groupId>org.qlm</groupId><artifactId>qlm-language</artifactId><version>1.0-SNAPSHOT</version> 平台提供多语言支持&#xff0c;以上为语言包&#xff0c;提供后台多语言支持。首批实现&#xff1a; public class LanguageConstan…

【深度学习笔记】优化算法——梯度下降

梯度下降 &#x1f3f7;sec_gd 尽管梯度下降&#xff08;gradient descent&#xff09;很少直接用于深度学习&#xff0c; 但了解它是理解下一节随机梯度下降算法的关键。 例如&#xff0c;由于学习率过大&#xff0c;优化问题可能会发散&#xff0c;这种现象早已在梯度下降中…

@RequestBody

目录 概述 深入细节 案例 RequestBody与前端传过来的json数据的匹配规则 指定模型中的属性对应什么key 用Valid校验RequestBody的参数 根据RequestBody的内容来区分使用哪个资源 概述 RequestBody主要用来接收前端传递给后端的json字符串中的数据(请求体中的数据)而最常…

AI资讯2024-03-06|超越GPT-4的大模型一夜来袭,霸主之位花落谁家

全球最强大模型一夜易主&#xff0c;GPT-4时代终结 新一代AI模型Claude 3系列的登场&#xff0c;如同一场风暴席卷AI领域。GPT-4被迅速抛入阴影&#xff0c;Anthropic的最新力作完胜天下&#xff0c;以无可匹敌之势彰显其强大。Claude 3在多模态和语言能力方面都凌驾于GPT-4之上…

Mendix 开发实践指南|Mendix 环境搭建

在上一篇文章中&#xff0c;我们深入探讨了Mendix平台的一些关键概念&#xff0c;从而获得了对Mendix模型驱动设计哲学的清晰理解。随着这些核心理念的掌握&#xff0c;我们自然会产生一系列实践层面的问题&#xff0c;尤其是关于如何开始使用Mendix进行开发的细节。 本篇文章…

【力扣 - 无重复字符的最长字符串】

题目描述 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2: 输入: s "bbbbb" 输出: 1 …

2024年最新Android面试精讲,面试题附答案

一. 开发背景 想要成为一名优秀的Android开发&#xff0c;你需要一份完备的知识体系&#xff0c;在这里&#xff0c;让我们一起成长为自己所想的那样。 Android 相关 1. Android 之 SharedPreferences 内部原理浅析 2. Android 源码分析-消息队列和 Looper 3. Android 源码分析…

状压dp详解,棋盘式、集合型,OJ详解

文章目录 零、引例-小国王1.问题描述2.暴力枚举3.多维dp4.维度压缩 一、状压dp1.认识状压dp2.棋盘式(基于连通性)2.1小国王2.1.1题目链接2.1.2思路分析2.1.3AC代码 2.2玉米田2.2.1题目链接2.2.2思路分析2.2.3AC代码 2.3炮兵阵地2.3.1题目链接2.3.2思路分析2.3.3AC代码 2.4蒙德里…

网络、网络协议模型、UDP编程——计算机网络——day01

今天来到了网络编程&#xff0c;主要讲了网络、网络协议模型以及UDP编程 网络 网络主要是进行&#xff1a;数据传输和数据共享 网络协议模型 OSI协议模型应用层 实际发送的数据表示层 发送的数据是否加密会话层 是否建立会话连接传…

激光炸弹c++

题目 输入样例&#xff1a; 2 1 0 0 1 1 1 1输出样例&#xff1a; 1 思路 由题知本题要求某个区间内数的和&#xff0c;联想到二维前缀和。我们可以先使用二维前缀和模板计算各区间的价值。然后枚举以某点为右下角&#xff0c;大小为R*R的正方形价值&#xff0c;取最大值。 …

06 - 镜像管理之:基础知识

1 了解镜像 Docker镜像是一个特殊的文件系统&#xff0c;除了提供容器运行时所需的程序、库、资源、配置等文件外&#xff0c;还包含了一些为运行时准备的一些配置参数&#xff08;如匿名卷、环境变量、用户等&#xff09;。 但注意&#xff0c; 镜像不包含任何动态数据&#…

【DataRoom】- 基于VUE的开源的大屏可视化设计器

【DataRoom】- 基于VUE的开源的大屏可视化设计器 DataRoom是一款基于SpringBoot、MyBatisPlus、Vue、ElementUI、G2Plot、Echarts等技术栈的大屏设计器&#xff0c;具备大屏设计、预览能力&#xff0c;支持MySQL、Oracle、PostgreSQL、SQLServer、ElasticSearch、JSON、JS、HTT…

springcloud:3.7测试线程池服务隔离

服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用&#xff1a;http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http://t…

Dubbo的线程模型

1 线程模型概述 Dubbo默认的底层网络通信使用的是Netty。 服务提供方NettyServer使用两级线程池&#xff0c;其EventLoopGroup&#xff08;boss&#xff09;主要用来接收客户端的连接请求&#xff0c;并把完成TCP三次握手的连接分发给EventLoopGroup&#xff08;worker&#…

【音视频开发好书推荐】RTC程序设计:实时音视频权威指南

目录 1、WebRTC概述2、好书推荐3、本书内容4、本书特色5、作者简介6、谁适合看这本书 1、WebRTC概述 WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个由Google发起的实时音视频通讯C开源库&#xff0c;其提供了音视频采集、编码、网络传输&#xff0c;解码显…

【考研数学】基础660太难了?一个办法搞定660

觉得题目太难&#xff0c;大概率是题目超出了自己当前的水平 题型没见过&#xff0c;或者太复杂&#xff0c;属于跳级学习了&#xff0c;正确的思路就是回归到自己的水平线&#xff0c;题目略难即可。 这样做题的话&#xff0c;大部分题目涉及的点不会超出自己的能力范围&…

【详识JAVA语言】String 类1

String类的重要性 在C语言中已经涉及到字符串了&#xff0c;但是在C语言中要表示字符串只能使用字符数组或者字符指针&#xff0c;可以使用标准库提 供的字符串系列函数完成大部分操作&#xff0c;但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想&#xff0c;而…