【CSP试题回顾】202212-3-JPEG 解码

201412-2 CCF认证考试 Z字形扫描 Python版 第一题:门禁系统 试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述   在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:   对于下面的4×4的矩阵,   1 5 3 9   3 7 5 6   9 4 6 4   7 3 1 3   对 阅读详情

CSP-202212-3-JPEG 解码

关键点:Z字扫描

在JPEG压缩中,Z字形扫描是一种将8x8块的数据按照Z字形(或之字形)顺序重新排列的过程。这样做的目的是为了将相似的数据(尤其是零值)放置在一起,从而提高后续压缩步骤的效率。

1.方法一:任意大小矩阵的Z字扫描

zScan函数实现了Z字形扫描的过程。它按照特定的顺序遍历8x8块,这个顺序开始于左上角,然后沿着块的对角线向上移动,达到边界后转向并沿着另一条对角线向下移动,依此类推。在每一步中,该函数检查是否还有待填充的系数(来自数组 m),如果有,则将当前系数填入对应的位置;如果没有更多的系数,则在当前位置填充零。该过程的关键在于管理遍历的方向和处理边界情况——例如,当扫描达到矩阵的上边界或右边界时,需要正确改变方向。

void zScan(vector<vector<int>>& M, vector<int>& m) {
    int size = 8; // 矩阵大小为8x8
    vector<int> result;
    int i = 0, j = 0, mi = 0;
    bool up = true; // 用于标识当前移动方向,初始为向上

    for (int k = 0; k < size * size; ++k) {
        if (mi < m.size())
        {
            M[i][j] = m[mi];
            mi++;
        }
        else M[i][j] = 0;

        if (up) { // 如果当前方向是向上
            if (j == size - 1) { // 如果触及右边界
                ++i; // 向下移动
                up = false; // 改变方向
            }
            else if (i == 0) { // 如果触及上边界
                ++j; // 向右移动
                up = false; // 改变方向
            }
            else { // 否则,继续向上和向右移动
                --i;
                ++j;
            }
        }
        else { // 如果当前方向是向下
            if (i == size - 1) { // 如果触及底边界
                ++j; // 向右移动
                up = true; // 改变方向
            }
            else if (j == 0) { // 如果触及左边界
                ++i; // 向下移动
                up = true; // 改变方向
            }
            else { // 否则,继续向下和向左移动
                ++i;
                --j;
            }
        }
    }
}

2.方法二:固定大小矩阵下标驱动的Z字形扫描

另一种实现Z字形扫描的方法是使用一个预定义的索引矩阵(如你所示的 idx 矩阵)。这个矩阵直接定义了从Z字形位置到矩阵线性位置的映射。在这种方法中,你不需要通过逐步遍历来确定每个元素的Z字形顺序,而是直接使用索引矩阵来查找每个元素在Z字形顺序中的位置。

int idx[8][8] = {
        {0, 1, 5, 6, 14, 15, 27, 28},
        {2, 4, 7, 13, 16, 26, 29, 42},
        {3, 8, 12, 17, 25, 30, 41, 43},
        {9, 11, 18, 24, 31, 40, 44, 53},
        {10, 19, 23, 32, 39, 45, 52, 54},
        {20, 22, 33, 38, 46, 51, 55, 60},
        {21, 34, 37, 47, 50, 56, 59, 61},
        {35, 36, 48, 49, 57, 58, 62, 63}
    };
  
void zScanByIndex(vector<vector<int>>& M, vector<int>& m) {
    for (int i = 0; i < 8; i++) { // 填充M矩阵,使用idx矩阵中的值作为m向量的索引
        for (int j = 0; j < 8; j++) {
            if (idx[i][j] < m.size()) { // 检查idx[i][j]是否在m向量的大小范围内
                M[i][j] = m[idx[i][j]];
            } else {
                M[i][j] = 0; // 如果索引超出了m的大小,就将M的当前元素设置为0
            }
        }
    }
}

解题思路

这段代码回答了JPEG压缩的关键步骤:Z字形扫描、量化和离散余弦变换。这个过程有助于理解JPEG压缩如何减少图像数据的大小,同时保留了相对较高的图像质量。代码中每一步都对应JPEG压缩的一部分。

1.初始化和数据输入

代码开始时,创建了几个二维数组来存储量化矩阵 Q、初始块 M、变换后的块 M1,以及其他变量 n 和 T:

  • vector<vector<int>>Q(8, vector<int>(8)): 8x8的量化矩阵。
  • vector<vector<int>>M(8, vector<int>(8)): 存储初始的8x8块,或是在Z字扫描后存储系数。
  • vector<vector<double>>M1(8, vector<double>(8)): 存储离散余弦变换(DCT)后的数据。

main 函数中读取这些值,其中 Q 是量化矩阵,n 是Z字形扫描输入系数的数量,T 是用户选择的压缩步骤标识。

2.Z字形扫描

zScan 函数将一维数组 m (这是按Z字形顺序排列的系数)填入8x8块 M 中。这模仿了JPEG编码过程中将量化后的DCT系数按Z字形排列的过程,这一步骤有助于后续的编码效率,因为它通常会将许多零值放置在块的末尾。

3.量化

multiply 函数通过将8x8的DCT系数块 M 与量化矩阵 Q 逐元素相乘,来实现量化过程。在实际JPEG压缩中,这会降低图像的质量,但同时大大减少所需的数据量。

4.离散余弦变换(DCT)

discreteCos 函数计算了DCT的逆过程,将量化后的系数转换回像素值。这里使用的是二维DCT公式,通常用于JPEG的解码过程。函数计算了8x8块中每个位置的值,根据DCT的公式,使用cosine函数根据频率变化的系数。

5.最终阶段和显示结果

在main函数的最后部分,根据用户选择的处理阶段(通过变量 T 控制),程序可以仅执行Z字形扫描、执行扫描和量化或执行全部步骤(包括DCT)。最终,display函数用于输出处理后的8x8块,显示压缩过程中的中间或最终结果。

完整代码

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;

vector<vector<int>>Q(8, vector<int>(8));
vector<vector<int>>M(8, vector<int>(8));
vector<vector<double>>M1(8, vector<double>(8));
int n, T;

// Z字扫描如果大小是固定的,可以直接存下标矩阵
void zScan(vector<vector<int>>& M, vector<int>& m) {
    int size = 8; // 矩阵大小为8x8
    vector<int> result;
    int i = 0, j = 0, mi = 0;
    bool up = true; // 用于标识当前移动方向,初始为向上

    for (int k = 0; k < size * size; ++k) {
        if (mi < m.size())
        {
            M[i][j] = m[mi];
            mi++;
        }
        else M[i][j] = 0;

        if (up) { // 如果当前方向是向上
            if (j == size - 1) { // 如果触及右边界
                ++i; // 向下移动
                up = false; // 改变方向
            }
            else if (i == 0) { // 如果触及上边界
                ++j; // 向右移动
                up = false; // 改变方向
            }
            else { // 否则,继续向上和向右移动
                --i;
                ++j;
            }
        }
        else { // 如果当前方向是向下
            if (i == size - 1) { // 如果触及底边界
                ++j; // 向右移动
                up = true; // 改变方向
            }
            else if (j == 0) { // 如果触及左边界
                ++i; // 向下移动
                up = true; // 改变方向
            }
            else { // 否则,继续向下和向左移动
                ++i;
                --j;
            }
        }
    }
}

void multiply(vector<vector<int>>& M, vector<vector<int>>& Q) {
    for (size_t i = 0; i < 8; i++)
    {
        for (size_t j = 0; j < 8; j++)
        {
            M[i][j] *= Q[i][j];
        }
    }
}

double pai = acos(-1);

double alpha(int u) {
    if (u == 0)return sqrt(0.5);
    return 1;
}

double discreteCos(vector<vector<int>>& M, int i, int j) {
    double MM = 0;
    for (size_t u = 0; u < 8.0; u++) {
        for (size_t v = 0; v < 8.0; v++) {
            MM += alpha(u) * alpha(v) * M[u][v] * cos((pai / 8.0) * (i + 0.5) * u) * cos((pai / 8.0) * (j + 0.5) * v);
        }
    }
    MM = MM / 4;
    return MM; 
}

void display(vector<vector<int>>& M) {
    for (auto& it : M) {
        for (auto& jt : it) {
            cout << jt << " ";
        }
        cout << endl;
    }
}

int main() {
    for (auto& it : Q) {
        for (auto& jt : it) {
            cin >> jt;
        }
    }
    cin >> n >> T;
    vector<int>m(n);
    for (size_t i = 0; i < n; i++)
    {
        cin >> m[i];
    }

    zScan(M, m);
    if (T == 0)
    {
        display(M);
        return 0;
    }

    multiply(M, Q);
    if (T == 1)
    {
        display(M);
        return 0;
    }

    for (size_t i = 0; i < M.size(); i++)
    {
        for (size_t j = 0; j < M[i].size(); j++)
        {
            M1[i][j] = discreteCos(M, i, j);
        }
    }

    for (size_t i = 0; i < M.size(); i++)
    {
        for (size_t j = 0; j < M[i].size(); j++)
        {
            M[i][j] = round(M1[i][j] + 128);
            if (M[i][j] > 255) M[i][j] = 255;
            if (M[i][j] < 0) M[i][j] = 0;
        }
    }

    display(M);
    return 0;
}

请添加图片描述

从原始数据到农学模型:DJI M3M/P4M多光谱影像全链路处理实战 本文详细介绍了使用DJI M3M/P4M多光谱无人机进行农学建模的全链路流程。核心在于强调辐射标定的首要性,它将原始DN值转换为具有物理意义的反射率,是确保后续植被指数计算与模型反演准确性的基石。文章通过大疆智图和Pix4Dfields的实战演示,手把手指导完成数据处理、影像镶嵌及光谱信息提取,最终构建从光谱指数到叶面积指数等关键农学参数的反演模型,实现精准农业分析。 阅读详情

相关推荐

ifix5.8连接ab plc的点-通过rslinx

以ifix连接ab plc的点为例 1.先在rslinx上把plc的点导出为opc server 2.使用opc power tool 作为opc client 去连接 3.保存到项目的PDB文件夹下面,并且以节点名命名。 也可以不以节点名命名,系统自动会生成一个以节点名命名的这种文件,就显得很乱。 同时,项目的PDB目录下面必须还得拷过来一个de...

中国智造2025 4114

Z字母扫描(偏移量数组)

偏移量数组

m0_72542983的博客 382

从CentOS迁移到openEuler 24.03 LTS:手把手教你部署Java+MySQL+Redis+Nginx全栈环境

本文详细指导如何从CentOS迁移到openEuler 24.03 LTS,并部署Java+MySQL+Redis+Nginx全栈环境。涵盖系统配置、软件安装、性能优化及环境验证,助力企业级用户高效完成服务器迁移与部署。

weixin_26938645的博客 389

【CCF】Z字形扫描

1)当元素个数为偶数时,要输出的数组元素从上一条斜边的末端变换到下一条斜边的始端,y(即纵坐标)保持不变,++x(即横坐标);1)当元素个数为偶数时,要输出的数组元素从上一条斜边的末端变换到下一条斜边的始端,x(即横坐标)保持不变,++y(即纵坐标);当times(即当前斜线上元素的个数)%2 == 0时,说明为偶数,此时dx = 1,dy = -1,符合上面的规律。(3)斜线上元素个数为偶数时,输出元素的方向应向左下角移动,位移量为dx = 1,dy = -1。(2)斜线上元素个数从1到n,再从n到1。

m0_74758366的博客 639

VMware Converter 6.2.0保姆级教程:从物理机到ESXi主机的完整迁移指南(含常见错误排查)

本文提供VMware Converter 6.2.0从物理机迁移至ESXi主机的完整保姆级教程。详细解析了迁移前的环境规划、核心转换过程步骤、版本差异对比,并重点针对代理安装失败、任务卡顿、虚拟机无法启动等常见错误提供了实战排查与解决方案,确保P2V迁移顺利进行。

sam99的博客 380

从入门到精通:激光器恒流驱动电路的设计与选型指南

本文深入解析了激光器恒流驱动电路的设计与选型。文章从基础电路原理讲起,对比了简易恒流源与高精度运放反馈方案的优劣,并重点阐述了如何为不同功率与精度要求的激光器项目选择合适的恒流驱动方案,强调了恒流源对于保障激光器稳定工作、防止热失控及延长寿命的核心作用。

grafana6viz的博客 711

Z字形扫描 (遍历搜索)

以下是自己语言整理的笔记。这是一道搜索题,扩大数组规模,看完整搜索路线是一种解题思路。

2401_87338545的博客 777

YOLO26改进 - C3k2 | C3k2 融合 ARConv 自适应矩形卷积:动态调整卷积核形状与采样点 | CVPR 2025

本文介绍了将自适应矩形卷积(ARConv)模块与YOLO26相结合的方法。ARConv是针对遥感图像全色锐化任务设计的创新卷积模块,可自适应调整卷积核形状与采样点数量,解决传统卷积刚性限制,实现高效特征提取。其工作流程包括学习卷积核高度和宽度、选择采样点数量、生成采样图、卷积实现与空间自适应增强。我们将集成ARConv的C3k2_ARConv模块引入YOLO26,对相关代码进行修改和注册,并配置了YOLO26 - C3k2_ARConv.yaml文件。实验脚本显示,该结合方式应用于目标检测任务。

魔改工程师的博客 496

2014-12-02 Z字形扫描 ccf

2014 12 02 Z字形扫描 对角线扫描

wuxian__的博客 285

手把手教你YOLOv8/YOLOv11分割训练自己数据集和推理,并教你使用Labelme工具标注数据(附分割网络结构图)

YOLOv8-seg 和 YOLOv11-seg 都是一种高效实例分割算法,实例分割模型的输出是一组勾勒出图像中每个物体的遮罩或轮廓,以及每个物体的类标签和置信度分数。当你不仅需要知道物体在图像中的位置,还需要知道它们的具体形状时,实例分割就非常有用了,功能非常强大,可以应对各种视觉任务。 YOLOv11-seg 则在 YOLOv8-seg 基础上进一步魔改了模型架构,相对分割速度可能更快,其他指标性能有待测试。实例分割可以用于自动驾驶、医疗图像处理、智能农业监控等领域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 4475

c#【保姆级教程】基于System.Text.Json 支持多态类型序列化! 手把手教你实现一个通用的 PolymorphicJsonConverter!

我们需要自己实现一个继承自的转换器,在序列化时记录具体类型,在反序列化时根据类型标识还原成正确的子类对象。public abstract class WorkStepBase { /* 抽象方法等 */ }public class Person : WorkStepBase { /* 实现 */ }public class Product : WorkStepBase { /* 实现 */ }特性说明✅ 自动发现子类无需手动维护类型列表,自动扫描程序集✅ 类名映射。

一个编程的同学 425

Z字形扫描

Z字形扫描 在图像编码的算法中,需要将一个给定的方形矩阵进行 Z 字形扫描(Zigzag Scan)。 给定一个 n×n 的矩阵,Z 字形扫描的过程如下图所示: zig.png 对于下面的 4×4 的矩阵, 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 对其进行 Z 字形扫描后得到长度为 16 的序列:1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3。 请实现一个 Z 字形扫描的程序,给定一个 n×n 的矩阵,输出对这个矩阵进行 Z 字形扫描的结果。 输入格式 输入的第一行包

TomCruisePro的博客 3004

【CloudCompare】Windows源码编译CloudCompare

本文详细介绍了在Windows环境下编译安装CloudCompare V2.12.0的过程。首先配置了PCL 1.14.1、CMake 3.30.6和QT 5.14.2开发环境,使用Visual Studio 2022工具集。然后下载源码并通过CMake进行配置,特别注意勾选PLUGIN_STANDARD_QPCL以支持PCD文件加载。最后在VS2022中编译安装,并指出Debug模式下可能遇到的VTK库后缀问题,需添加CMAKE_DEBUG_POSTFIX变量解决。整个流程涵盖了从环境搭建到最终编译成功的

yijiujiusan的博客 486

CCF-CSP真题《202212-3 JPEG 解码》思路+python,c++满分题解

本文为大家提供了《202212-3 JPEG 解码》的解题代码,希望对你有帮助~~

weixin_53919192的博客 7538

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Z字扫描 C语言

//问题描述 //在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个m×n的矩阵,Z字形扫描的过程如下图所示。 // //对于下面给出的4×4的矩阵: //1 5 3 9 //3 7 5 6 //9 4 6 4 //7 3 1 3 //对其进行Z字形扫描后得到长度为16的序列如下所示: //1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3 //请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。 // //输入说明

NiceAsiv的博客 3587

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Z字形扫描在OpenGL上的实现

通过观察可以发现,扫描位置移动方向共有四种,即左->右,上->下,左上->右下,左下->右上,故我们定义flag变量表示当前扫描方向。当扫描至正方形矩阵最外围的一圈时,扫描方向发生改变,可通过flag当前值与当前扫描位置判断下一次扫描位置移动方向。的矩阵,Z字形扫描的过程如下图所示(4x4, 5x5)。仿照着该代码格式,实现OpenGL上Z字形扫描。在图像编码的算法中,需要将一个给定的方形。当扫描总次数i > n*n时,停止扫描。

m0_70538541的博客 711

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Z字形扫描C语言

在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个m×n的矩阵,Z字形扫描的过程如下图所示。数据的第一行为整数n(n

Lz318318的博客 985

第28次csp认证--JPEG 解码

模拟

Codingzyk的博客 883

第28次csp认证T3 JPEG 解码解析

第28次csp认证T3 JPEG 解码解析

Sunnyztg的博客 1103

CSP-202212-3--->JPEG解码

CSP刷题记录~

weixin_51954774的博客 916

CSP-202212-3-JPEG解码

这题是近几次最简单的大模拟了,唯一难点就是数据的Z字型扫描,懒得找规律可以直接打表,也很快。这种大模拟题问题背景基本不用看,直接从问题描述开始,句子翻译成代码。

Galaxy 402

202212-3 JPEG 解码

题目整体思路还是比较简单的,也没有用到什么算法,只是我的办法需要稍微注意下边界。最大的难点应该是转化那个公式。四舍五入:round()

qq_51274372的博客 204

z字形扫描

z字形扫描 类别 数组 时间限制 1S 内存限制 256Kb 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个m×n的矩阵,Z字形扫描的过程如下图所示。 对于下面给出的4×4的矩阵: 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 对其进行Z字形扫描后得到长度为16的序列如下所示: 1 5 3 9 7 3 9 5 4 7...

Claice的博客 1248

寒假每日一题题解(2.16)Z字形扫描(模拟)

Z字形扫描(模拟) 在图像编码的算法中,需要将一个给定的方形矩阵进行 Z 字形扫描(Zigzag Scan)。 给定一个 n×n 的矩阵,Z 字形扫描的过程如下图所示: 对于下面的 4×4 的矩阵, 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 对其进行 Z 字形扫描后得到长度为 16 的序列:1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3。 请实现一个 Z 字形扫描的程序,给定一个 n×n 的矩阵,输出对这个矩阵进行 Z 字形扫描的结果。 输入格式 输入的第一行包含一

qq_49666427的博客 766

CCF Z字形扫描

Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述   在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:  对于下面的4×4的矩阵,  1 5 3 9  3 7 5 6  9 4 6 4  7 3 1 3  ...

weixin_30448603的博客 1058

201412-2 Z字形扫描【Python(自己写的,有点啰嗦)&& C语言(老师写的,简洁,分享一下)】

这道题按照一般的想法确实可以做出来,只是有些不完美,就是会运行超时,对于此,我们可以找一下规律,就可以解决了!老师写的那个更精炼,她把上三角和下三角(其实按照线性代数并非上下三角矩阵)用一种情况写下来了,而且没用太多的规律

weixin_64633079的博客 1097
上一篇: 【CSP试题回顾】202312-2-因子化简
下一篇: 【CSP试题回顾】202309-1-坐标变换(其一)
LOST P
博客等级 码龄5年 1770粉丝 303原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值