数字图像处理之低通滤波器实现原理及方法(Matlab)

2023-11-08

1.傅里叶变换与频域

 

        在之前的文中,我们已经进行过一些基本的图像处理。比如,使用低通滤波可以将图像模糊,也有些许降噪的作用。这些都是在空间域内进行的滤波处理,这个处理主要是依靠卷积来进行计算的。首先,从连续的一维卷积入手,如下所示。

       将上式进行傅里叶变换,可以得到如下结果。

        从这个式子,我们可以得到一个重要的结论。也就是,函数卷积的傅里叶变换所得到的结果,是函数的傅里叶变换的乘积。再将其总结得简单易懂一些,有如下结论。

        在将其扩展到二维的形况下,假设尺寸为MxN的图像,如下关系是成立的。

       其实到这,基本的原理就明了的。我们所看到的图像,均为空间域内的表现形式,我们无法辨识出频域内的图像。要进行频域内的滤波器处理,首先就需要进行傅里叶变换,然后直接进行滤波处理,最后再用反傅里叶变换倒回到空间域内。

       到此,已经可以开始空间域内的滤波处理了。但是,还有一点需要注意的地方。使用某个一维信号来举例子,一维信号的傅里叶变换是以2π为周期的函数。所以,我们常常使用的范围[-π,π]来表示这个信号的傅里叶变换,如下所示。

        这样做的好处是,靠近0的成分就是低频,靠近-π与π的成分就表示高频。而对于图像而言,在Matlab中,我们使用fft2()这个函数来求取图像的傅里叶变换。

 

[plain] view plain copy

  CODE_ico.pnguploading.4e448015.gif正在上传…重新上传取消在CODE上查看代码片ico_fork.svguploading.4e448015.gif正在上传…重新上传取消派生到我的代码片

  1. g = fft2(f);     

        上面这个代码求取的,其实是范围[0,π]内的傅里叶变换。为了方便理解,下图画出了本行代码所求取的图像的傅里叶变换的范围(右)和与其等效的一维傅里叶变换的范围(左)。

 

       很显然,这并不是希望的范围,下面这个代码可以求取[0,2π]内的傅里叶变换。

 

[plain] view plain copy

  CODE_ico.pnguploading.4e448015.gif正在上传…重新上传取消在CODE上查看代码片ico_fork.svguploading.4e448015.gif正在上传…重新上传取消派生到我的代码片

  1. P = 2*M;  
  2. Q = 2*N;  
  3. F = fft2(f,P,Q);  

       下图画出了本行代码所求取的图像的傅里叶变换的范围(右)和与其等效的一维傅里叶变换的范围(左)。所得到的图像F(u,v)的尺寸为PxQ。

 

         我们需要对其移动一下,如下图所示,我们需要的是粉色范围的区域。

下面,从数学上分析一下,如何获得这个部分的频谱。对于傅里叶变换,有如下性质。

这个特性称为平移特性,粉色部分的频谱,将带入上式,我们可以得到如下式子。

为次,我们已经得到了粉色范围的频谱。越靠近傅里叶频谱图像中间的成分,代表了低频成分。其Matlab代码如下所示。

 

[plain] view plain copy

  CODE_ico.pnguploading.4e448015.gif正在上传…重新上传取消在CODE上查看代码片ico_fork.svguploading.4e448015.gif正在上传…重新上传取消派生到我的代码片

  1. [M,N] = size(f);  
  2. P = 2*M;  
  3. Q = 2*N;  
  4. fc = zeros(M,N);  
  5.   
  6. for x = 1:1:M  
  7.     for y = 1:1:N  
  8.         fc(x,y) = f(x,y) * (-1)^(x+y);  
  9.     end  
  10. end  
  11.   
  12. F = fft2(fc,P,Q);  

 

        代码所得到的结果,如下图所示。

        接下来,我们总结一下频域滤波的步骤:

        ①:先将图像做频域内的水平移动,然后求原图像f(x,y)的DFT,得到其图像的傅里叶谱F(u,v)。

        ②:与频域滤波器做乘积,

        ③:求取G(u,v)的IDFT,然后再将图像做频域内的水平移动(移动回去),其结果可能存在寄生的虚数,此时忽略即可。

        ④:这里使用ifft2函数进行IDFT变换,得到的图像的尺寸为PxQ。切取左上角的MxN的图像,就能得到结果了。

 

        2.低通滤波器

        2.1理想的低通滤波器

 

       其中,D0表示通带的半径。D(u,v)的计算方式也就是两点间的距离,很简单就能得到。

       使用低通滤波器所得到的结果如下所示。低通滤波器滤除了高频成分,所以使得图像模糊。由于理想低通滤波器的过度特性过于急峻,所以会产生了振铃现象。

         

 

        2.2巴特沃斯低通滤波器

 

       同样的,D0表示通带的半径,n表示的是巴特沃斯滤波器的次数。随着次数的增加,振铃现象会越来越明显。

 

   

       2.3高斯低通滤波器

       D0表示通带的半径。高斯滤波器的过度特性非常平坦,因此是不会产生振铃现象的。

 

       3.实现代码

 

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 

close all;

clear all;

%% ---------Butterworth Lowpass Filters (Fre. Domain)------------

f = imread('characters_test_pattern.tif');

f = mat2gray(f,[0 255]);

[M,N] = size(f);

P = 2*M;

Q = 2*N;

fc = zeros(M,N);

for x = 1:1:M

for y = 1:1:N

fc(x,y) = f(x,y) * (-1)^(x+y);

end

end

F = fft2(fc,P,Q);

H_1 = zeros(P,Q);

H_2 = zeros(P,Q);

for x = (-P/2):1:(P/2)-1

for y = (-Q/2):1:(Q/2)-1

D = (x^2 + y^2)^(0.5);

D_0 = 100;

H_1(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D/D_0)^2);

H_2(x+(P/2)+1,y+(Q/2)+1) = 1/(1+(D/D_0)^6);

end

end

G_1 = H_1 .* F;

G_2 = H_2 .* F;

g_1 = real(ifft2(G_1));

g_1 = g_1(1:1:M,1:1:N);

g_2 = real(ifft2(G_2));

g_2 = g_2(1:1:M,1:1:N);

for x = 1:1:M

for y = 1:1:N

g_1(x,y) = g_1(x,y) * (-1)^(x+y);

g_2(x,y) = g_2(x,y) * (-1)^(x+y);

end

end

%% -----show-------

figure();

subplot(1,2,1);

imshow(f,[0 1]);

xlabel('a).Original Image');

subplot(1,2,2);

imshow(log(1 + abs(F)),[ ]);

xlabel('b).Fourier spectrum of a');

figure();

subplot(1,2,1);

imshow(H_1,[0 1]);

xlabel('c)Butterworth Lowpass (D_{0}=100,n=1)');

subplot(1,2,2);

h = mesh(1:20:P,1:20:Q,H_1(1:20:P,1:20:Q));

set(h,'EdgeColor','k');

axis([0 P 0 Q 0 1]);

xlabel('u');ylabel('v');

zlabel('|H(u,v)|');

figure();

subplot(1,2,1);

imshow(log(1 + abs(G_1)),[ ]);

xlabel('d).Result of filtering using c');

subplot(1,2,2);

imshow(g_1,[0 1]);

xlabel('e).Result image');

figure();

subplot(1,2,1);

imshow(H_2,[0 1]);

xlabel('f).Butterworth Lowpass (D_{0}=100,n=3)');

subplot(1,2,2);

h = mesh(1:20:P,1:20:Q,H_2(1:20:P,1:20:Q));

set(h,'EdgeColor','k');

axis([0 P 0 Q 0 1]);

xlabel('u');ylabel('v');

zlabel('|H(u,v)|');

figure();

subplot(1,2,1);

imshow(log(1 + abs(G_2)),[ ]);

xlabel('g).Result of filtering using e');

subplot(1,2,2);

imshow(g_2,[0 1]);

xlabel('h).Result image');

 来自CODE的代码片

Butterworth_Lowpass_Filters.m

   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 

close all;

clear all;

clc;

%% ---------Gaussian Lowpass Filters (Fre. Domain)------------

f = imread('characters_test_pattern.tif');

f = mat2gray(f,[0 255]);

[M,N] = size(f);

P = 2*M;

Q = 2*N;

fc = zeros(M,N);

for x = 1:1:M

for y = 1:1:N

fc(x,y) = f(x,y) * (-1)^(x+y);

end

end

F = fft2(fc,P,Q);

H_1 = zeros(P,Q);

H_2 = zeros(P,Q);

for x = (-P/2):1:(P/2)-1

for y = (-Q/2):1:(Q/2)-1

D = (x^2 + y^2)^(0.5);

D_0 = 60;

H_1(x+(P/2)+1,y+(Q/2)+1) = exp(-(D*D)/(2*D_0*D_0));

D_0 = 160;

H_2(x+(P/2)+1,y+(Q/2)+1) = exp(-(D*D)/(2*D_0*D_0));

end

end

G_1 = H_1 .* F;

G_2 = H_2 .* F;

g_1 = real(ifft2(G_1));

g_1 = g_1(1:1:M,1:1:N);

g_2 = real(ifft2(G_2));

g_2 = g_2(1:1:M,1:1:N);

for x = 1:1:M

for y = 1:1:N

g_1(x,y) = g_1(x,y) * (-1)^(x+y);

g_2(x,y) = g_2(x,y) * (-1)^(x+y);

end

end

%% -----show-------

close all;

figure();

subplot(1,2,1);

imshow(f,[0 1]);

xlabel('a).Original Image');

subplot(1,2,2);

imshow(log(1 + abs(F)),[ ]);

xlabel('b).Fourier spectrum of a');

figure();

subplot(1,2,1);

imshow(H_1,[0 1]);

xlabel('c)Gaussian Lowpass (D_{0}=60)');

subplot(1,2,2);

h = mesh(1:20:P,1:20:Q,H_1(1:20:P,1:20:Q));

set(h,'EdgeColor','k');

axis([0 P 0 Q 0 1]);

xlabel('u');ylabel('v');

zlabel('|H(u,v)|');

figure();

subplot(1,2,1);

imshow(log(1 + abs(G_1)),[ ]);

xlabel('d).Result of filtering using c');

subplot(1,2,2);

imshow(g_1,[0 1]);

xlabel('e).Result image');

figure();

subplot(1,2,1);

imshow(H_2,[0 1]);

xlabel('f).Gaussian Lowpass (D_{0}=160)');

subplot(1,2,2);

h = mesh(1:20:P,1:20:Q,H_2(1:20:P,1:20:Q));

set(h,'EdgeColor','k');

axis([0 P 0 Q 0 1]);

xlabel('u');ylabel('v');

zlabel('|H(u,v)|');

figure();

subplot(1,2,1);

imshow(log(1 + abs(G_2)),[ ]);

xlabel('g).Result of filtering using e');

subplot(1,2,2);

imshow(g_2,[0 1]);

xlabel('h).Result image');

 来自CODE的代码片

Gaussian_Lowpass_Filters.m

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 

close all;

clear all;

%% ---------Ideal Lowpass Filters (Fre. Domain)------------

f = imread('characters_test_pattern.tif');

f = mat2gray(f,[0 255]);

[M,N] = size(f);

P = 2*M;

Q = 2*N;

fc = zeros(M,N);

for x = 1:1:M

for y = 1:1:N

fc(x,y) = f(x,y) * (-1)^(x+y);

end

end

F = fft2(fc,P,Q);

H_1 = zeros(P,Q);

H_2 = zeros(P,Q);

for x = (-P/2):1:(P/2)-1

for y = (-Q/2):1:(Q/2)-1

D = (x^2 + y^2)^(0.5);

if(D <= 60) H_1(x+(P/2)+1,y+(Q/2)+1) = 1; end

if(D <= 160) H_2(x+(P/2)+1,y+(Q/2)+1) = 1; end

end

end

G_1 = H_1 .* F;

G_2 = H_2 .* F;

g_1 = real(ifft2(G_1));

g_1 = g_1(1:1:M,1:1:N);

g_2 = real(ifft2(G_2));

g_2 = g_2(1:1:M,1:1:N);

for x = 1:1:M

for y = 1:1:N

g_1(x,y) = g_1(x,y) * (-1)^(x+y);

g_2(x,y) = g_2(x,y) * (-1)^(x+y);

end

end

%% -----show-------

figure();

subplot(1,2,1);

imshow(f,[0 1]);

xlabel('a).Original Image');

subplot(1,2,2);

imshow(log(1 + abs(F)),[ ]);

xlabel('b).Fourier spectrum of a');

figure();

subplot(1,2,1);

imshow(H_1,[0 1]);

xlabel('c).Ideal Lowpass filter(D=60)');

subplot(1,2,2);

h = mesh(1:20:P,1:20:Q,H_1(1:20:P,1:20:Q));

set(h,'EdgeColor','k');

axis([0 P 0 Q 0 1]);

xlabel('u');ylabel('v');

zlabel('|H(u,v)|');

figure();

subplot(1,2,1);

imshow(log(1 + abs(G_1)),[ ]);

xlabel('d).Result of filtering using c');

subplot(1,2,2);

imshow(g_1,[0 1]);

xlabel('e).Result image');

figure();

subplot(1,2,1);

imshow(H_2,[0 1]);

xlabel('f).Ideal Lowpass filter(D=160)');

subplot(1,2,2);

h = mesh(1:20:P,1:20:Q,H_2(1:20:P,1:20:Q));

set(h,'EdgeColor','k');

axis([0 P 0 Q 0 1]);

xlabel('u');ylabel('v');

zlabel('|H(u,v)|');

figure();

subplot(1,2,1);

imshow(log(1 + abs(G_2)),[ ]);

xlabel('g).Result of filtering using e');

subplot(1,2,2);

imshow(g_2,[0 1]);

xlabel('h).Result image');

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数字图像处理之低通滤波器实现原理及方法(Matlab) 的相关文章

  • latex±号_latex中数学符号

    latex中数学符号 常见数学中的特殊符号 缺失 latex中符号3610 9 alpha alfa 阿耳法 beta beta 贝塔 gamma gamma 伽马 deta delta 德耳塔 epsilon epsilon 艾普西隆 z
  • console.writeline($“{}{}“);

    console writeline 作用是将 内容当做表达式 例如 class MyClass public int val 20 class Program static void MyMethod MyClass f1 int f2 f
  • python字典和集合属于无序序列吗_python-序列、集合及字典

    组合数据类型 1 集合类型 集合是多种元素的无序组合 元素独一性 集合用大括号 表示 元素用 分隔 用set函数建立 A set python123 p y t h o n 1 2 3 集合操作符 集合有四种基础运算方法 并 交 差 补 S
  • 关于pads生产文件的导出

    1 solder mask solder mask 是阻焊层出的是负片 它的设置一般如图所示 这个是一般常规设置 如果器件焊盘已经专门做了阻焊焊盘 则可以按如图所示设置 如果选择top层焊盘 设备设置可以选择缩放为4 如果选择solder
  • EVE-NG网卡桥接,带您走进更高级的实验

    原帖地址 http www mamicode com info detail 1819599 html 一 给EVE NG添加虚拟的物理网卡 不管什么样的网卡 方法都类似 为什么说是虚拟的物理网卡呢 这个VMnet1网卡本身就是虚拟出来的
  • 一篇文章让你了解大数据挖掘技术

    大数据如果想要产生价值 对它的处理过程无疑是非常重要的 其中大数据分析和大数据挖掘就是最重要的两部分 在前几期的科普中 小编已经为大家介绍了大数据分析的相关情况 本期小编就为大家讲解大数据挖掘技术 让大家轻轻松松弄懂什么是大数据挖掘技术 什
  • 01 Datafountain_云状识别_top1

    01 Datafountain 云状识别 top1 摘要 1 云状识别算法总体思路和架构 2 云状识别算法具体实现过程 2 1 图像增强 2 2 多图像尺寸训练 2 3 选用densenet161预训练模型进行fine tune 2 4 差
  • Kotlin-Retrofit2和Rxjava2的网络封装,展示Github的用户信息

    目录 开始 1 先添加依赖 2 封装请求类 3 RESTful API请求响应的处理 4 线程与生命周期 5 使用 效果如下 开始 1 先添加依赖 Retrofit相关 implementation com squareup okhttp3
  • git did not exit cleanly (exit code 128) 的解决办法

    问题描述 在新建一个空的本地git仓库后 打算将远程仓库中的代码Pull到本地时异常 具体异常内容如下 git exe pull progress v no rebase origin masterPOST git upload pack
  • CRC-16校验原理

    1 循环校验码 CRC码 是数据通信领域中最常用的一种差错校验码 其特征是信息字段和校验字段的长度可以任意选定 2 生成CRC码的基本原理 任意一个由二进制位串组成的代码都可以和一个系数仅为 0 和 1 取值的多项式一一对应 例如 代码10
  • 【LeetCode】349. 两个数组的交集

    题目 给定两个数组 编写一个函数来计算它们的交集 示例 1 输入 nums1 1 2 2 1 nums2 2 2 输出 2 示例 2 输入 nums1 4 9 5 nums2 9 4 9 8 4 输出 9 4 说明 输出结果中的每个元素一定
  • Go语言面试题--基础语法(14)

    文章目录 1 切片 a b c 的长度和容量分别是多少 2 下面代码中 A B 两处应该怎么修改才能顺利编译 3 下面代码输出什么 1 切片 a b c 的长度和容量分别是多少 func main s 3 int 1 2 3 a s 0 b
  • 【科普向】谁都能看懂的CRC(循环冗余校验)原理

    CRC原理 简介 CRC基本原理 模二运算 二进制系数多项式 CRC算法 示例 CRC算法的数学描述 常用CRC版本 CRC算法的编程实现 简介 循环冗余校验 Cyclic Redundancy Check CRC 是一种根据网络数据包或计
  • MySQL - MySQL 8.0(二)基本操作:用户

    文章目录 前言 查看当前登录用户 一 创建用户 1 语法介绍 2 创建 dbadmin 用户 仅做了解 二 授予和撤销用户的访问权限 1 授予权限 2 检查授权 3 撤销权限 题外话 修改 mysql user 表 三 修改密码 身份验证插
  • 浅显易懂的GCC使用教程——初级篇

    浅显易懂的GCC使用教程 初级篇 2018 12 17天气暖 属于冬日里出太阳 最近在学习使用gvim 想着抛弃对IDE的依赖同时也是想了解编译的过程 但除了学习gvim繁多的指令外还得先学习使用gcc编译程序 这篇文章将会用浅显易懂的方式
  • [IDEA] 异常 Configuration is still incorrect. Do you want to edit it again? Error: module not specifie

    在Idea打开项目出现 Configuration is still incorrect Do you want to edit it again 的错误提示 点Edit 出现 Error module not specifie 问题 产生
  • el-input使用clearable,:title,MessageBox弹框外部关闭,el-Dropdown 下拉菜单详细举例,el-table的show-overflow-tooltip是什么?

    近期在工作中改测试提出的一些bug 有时候同样一个bug却忘了上一次怎么改的 特此总结分享 1 关于el input使用clearable属性即可得到一个可清空的输入框 2 由于clearable属性引发的一个小bug 如例图 蓝色部分后面
  • OpenCV:判断读取图片是否成功

    摘要 当用imread 读取图片时 如果图片路径错了 或者图片名称 又或者后缀格式错误 程序都会报错 基于这个问题 有时候我们不知道是读取图片失败而报错 会误以为是其它行代码出错了 所以 经常读取图片后 会进行判断图片是否读取成功 如果读出
  • iOS-对于把图片渲染成蓝色的修改方法

    在之前开发的过程中 遇到过这样一个小问题 给button设置一张图片 图片是灰色 美工做的图肯定没有问题 给button设置图片的方法也很简单 一句代码搞定 但是运行的时候却发现 图片无缘无故变成了蓝色 后来自己研究了一下发现 在给一些控件
  • cuDNN下载

    cuDNN下载网址 https developer nvidia com rdp cudnn download 按顺序点击可以看到与cuda相对应版本 点击对应cuda版本的cuDNN下载 例如CUDA11 4对应的版本

随机推荐

  • C语言入门初识(中)

    C语言入门初识 中 常量 常量的分类 1 字面常量 2 const修饰的常变量 3 define 定义的标识符常量 4 枚举常量 字符串 转义字符 注释 字符串 C常用格式转换说明符 转义字符 注释 选择语句与循环语句 选择语句 循环语句
  • 第四次作业

    作业要求 https edu cnblogs com campus hljkj CS201801 homework 2523 预习 1 数组视频全看了 2 学到了一维数组和二维数组 如何定义使用数组 3 数组的排序 不能熟练使用二维数组 只
  • 微信小程序 七天签到组件

    组件效果 组件gitee地址 https gitee com liu bao yi sign in 使用 1 将dk calendar文件夹放进components文件夹内 2 页面json文件引入该组件 usingComponents d
  • 【深入理解Kafka系列】第五章 日志存储

    前几章已经讲解了kafka的基本知识 我们已经能较好的用kafka来完成基本的开发任务 接下来了解一下内部的一些细节 便于知道相关的原理 本章主要讲kafka日志存储相关的知识 1 文件目录布局 回顾之前所学的知识 Kafka 中的消息是以
  • 在ESP32/ESP8266上使用MicroPython利用MQTT发布BME280传感器数据(温度,湿度和压力)

    了解如何使用MicroPython对ESP32或ESP8266板进行编程 以通过MQTT将BME280传感器读数 温度 湿度和压力 发布到支持MQTT或任何MQTT客户端的任何平台 例如 我们将传感器读数发布到Node RED仪表板 注意
  • 神州交换机路由器AC和AP基本配置

    交换机部分 两层和三层交换机清除所有配置的命令 Set default 清除配置 Write 保存 Reload 重启 交换机打开网站管理 http 两层 config ip http server config Web user xxx
  • 51单片机 LCD1602

    LCD1602 H ifndef LCD1602 H define LCD1602 H 用户调用函数 void LCD Init void LCD ShowChar unsigned char Line unsigned char Colu
  • 【解决方案】PicGo图片上传失败问题【少走弯路】

    解决方案 PicGo图片上传失败问题 少走弯路 1 检查Server设置 选择PicGo设置 选择设置Server 确认设置监听端口为 36677 如果没有问题的话可以尝试关闭 退出APP 再开启Server 未能解决再继续操作 2 检查阿
  • Android:手把手带你了解实用的Android Jetpack

    转自 https blog csdn net carson ho article details 104243841 前言 在2018年 Google I O 大会上发布了一系列辅助Android开发者开发的实用工具集合 Jetpack 今
  • Unity制作简单动画效果

    需求 制作一段门旋转的动画 效果如下 解决办法 1 在Unity中点击Window gt Animation gt Animation 调出Animation面板 如下 2 为了让门的轴心在门边上以便于制作门绕门边旋转的效果 需要先新建一个
  • Rust交叉编译开发环境的搭建

    为嵌入式开发引入新的编程语言 对于嵌入式系统软件和应用软件的开发而言 编程语言的重要性次于整体的软件架构设计的重要性 不过仍有必要谨慎地选择编程语言 因为这涉及开发效率 软件性能 以及团队成员的技术能力 譬如 若整个嵌入式软件的绝大数组件是
  • 蓝桥杯 分数统计---递归

    题目 1500 蓝桥杯 算法提高VIP 分数统计 时间限制 1Sec 内存限制 128MB 提交 1541 解决 727 题目描述 给定一个百分制成绩T 将其划分为如下五个等级之一 90100为A 8089为B 7079为C 6069为D
  • Spring MVC参数的传递与接收

    SpringMVC主要做的就两方面的操作 在Controller接收从jsp传递过来的数据 把Controller的数据传递到jsp页面 将Controller里边的数据传到jsp 其返回值有三种类型 ModelAndView void S
  • Swift3.0学习之CollectionView的简单使用

    1 设置layout let layout UICollectionViewFlowLayout layout itemSize CGSize width 60 height 80 设置item尺寸 layout minimumLineSp
  • Python学习笔记(零)————Python简介及基础

    目录 1 查看 Python 版本 2 脚本文件 3 Python3 简介 4 Python 发展历史 5 Python 特点 6 Python 应用 7 Python环境搭建 1 查看 Python 版本 我们可以在命令窗口 Window
  • Docker入门(安装、换阿里源及配置阿里云镜像加速)

    文章目录 一 Docker 概述 1 1 Docker 为什么出现 1 2 Docker 的历史 1 3 聊聊 Docker 1 4 Docker 能干嘛 二 Docker 安装 2 1 Docker 的基本组成 2 2 安装 Docker
  • warning: array subscript is above array bounds

    问题描述 warning array subscript is above array bounds Warray bounds 数组下标使用越界 需检查数组的使用 下标是否正确 warning pointer targets in pas
  • 网页链接区块链wallet_WAX云钱包解决了区块链的最后难题

    点击蓝字 关注我们 区块链的最后的难题已被解决 我用过很多区块链 dApps 有些很神奇 有些则不然 但是几乎所有这些dApp都是有限制的 因为当新用户上线时 很难和这些应用程序磨合得好 现在登录 dApp 就像用制作复杂的鲁布 戈德堡机械
  • Oracle安装教程及PL/SQL Developer下载安装及使用

    作为按照各种教程安装了5 6次Oracle数据库的人来说 不得不把之前踩过的坑都总结一下 1 首先 请下载Oracle 11g和plsql PL SQL Developer 这里给出百度云网盘下载链接 只需要下载解压就行了 链接 https
  • 数字图像处理之低通滤波器实现原理及方法(Matlab)

    1 傅里叶变换与频域 在之前的文中 我们已经进行过一些基本的图像处理 比如 使用低通滤波可以将图像模糊 也有些许降噪的作用 这些都是在空间域内进行的滤波处理 这个处理主要是依靠卷积来进行计算的 首先 从连续的一维卷积入手 如下所示 将上式进