419 Matching Annotations
  1. Nov 2020
    1. 在深度学习中,我们可以使用神经网络图直观地表现模型结构。

      Q:为什么需要神经网络图?<br> A:在深度学习中,我们可以使用神经网络图直观地表现模型结构。

    2. 其中常数 1212 \frac 1 2<math><semantics><mrow><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow><annotation encoding="application/x-tex">\frac 1 2</annotation></semantics></math>21​ 使对平方项求导后的常数系数为1,这样在形式上稍微简单一些。

      这句话解释了为什么平方差函数前面的系数有1/2。

    3. 接下来我们需要通过数据来寻找特定的模型参数值,使模型在数据上的误差尽可能小。

      训练模型的意义

  2. Oct 2020
    1. 更可能的情况是未知位置的错误,所以第一步是找出它们。Berlekamp-Massey算法(通常简称为BM算法)用来计算错误定位多项式。然后我们只需要计算这个(错误定位)多项式的零点(译注:应该就是指多项式的根),这标志了错误的位置。

      纠正错误的第一步是找到错误,大体流程是: 1)使用BM算法来计算错误定位多项式; 2)计算该多项式的零点就能标志这个错误的位置了。

    2. 其他有用的数学属性(例如分布率)也仍然有效。(基于这些操作的元素集合)被称为一个有限域(finite field),或者叫伽罗华域(Galois field)。

      有限域的定义

    3. 译注:由于最后的加法是异或(模2加),因此系数为偶数的项都消去了。

      在伽罗华域中,这个性质很重要。

    4. 10100110111

      11位

    5. 000111101011001

      15位

    1. RS码属于循环码 的一种,它的编码过程就是用它的信息多项式除以校验码生成多项式 求出校验位的过程。

      RS码的基本原理

    2. 伽罗华域

      伽罗华域的关键:<br> 1)构造多项式;<br> 2)模运算表;<br> 3)GF()域与二进制代码对照表;<br> 4)伽罗华域(GF()域)中的运算。

    1. 文章的核心思想很简单,就是他假定一幅合理的图像应该所有像素的平均值应该是0.5左右(归一化后的),所以那么自动伽马校正的伽马值就要使得目标图像向这个目标前进。

      研究Gamma校正算法的原因

    1. 图像处理界双线性插值算法的优化

      双线性插值的算法优化的方法有: 1)合并共有运算; 2)定点化。

    2. 三个方面考虑

      定点化要考虑的3个因素:精度,是否溢出,使用移位代替乘除。

    3. 在数学上,双线性插值算法可以看成是两个变量间的线性插值的延伸。执行该过程的关键思路是先在一个方向上执行线性插值,然后再在另外一个方向上插值。

      数学原理

    4. 在图像处理中,双线性插值算法的使用频率相当高,比如在图像的缩放中,在所有的扭曲算法中,都可以利用该算法改进处理的视觉效果。

      应用场景:图像缩放和图像扭曲等。

  3. Sep 2020
    1. Convert those binary numbers into decimal

      输入的数据转成二进制就如下所示。

    2. Generate Powers of 2 using Byte-Wise Modulo 100011101

      本小节介绍了在GF(256)上的计算。

    3. Understand Galois Field Arithmetic

      理解伽罗瓦域算术<br> 小结:伽罗瓦域算法是在一种域上面的运算。主要利用了使用异或运算代替加法运算的思想。

    4. This means that addition and subtraction within the Galois Field are the same thing.

      这意味着伽罗瓦场中的加法和减法是一样的。

    5. polynomial long division

      多项式长除法

    1. 汉明码——计算机网络——全网最通俗的讲解

      小结:本文确实做到了用通俗易懂的语句说明了汉明码的纠错方法和纠错流程。

    1. 例如 。我们发现 ,所以 。我们用 代替 ,就得到 。

      这一段的内容没有看明白。

    2. 【举例子详细分析】BCH码(BCH code)

      Q:如何评价汉明码? A: 1)汉明码的数学基础是利用二进制多项式的乘法和除法; 2)汉明码的缺点是只能纠错一位。

    3. 都是偶数

      全是偶数

  4. Aug 2020
    1. 如果F(Mx,My)>0,则点M在直线下,选择U点,Y方向上加1。

      图2表示的就是这种情况。

    2. 如果F(x,y)>0,则说明(x,y)位于直线下;如果F(x,y)<0,则说明(x,y)位于直线上。

      Q:为什么存在这样的结论? A:可以通过不等式进行证明。

  5. Jul 2020
    1. HELLO WORLD as a 1-M code.

      知识迁移:上一小节Data Encoding使用的是1-Q code,其中数据也为“ HELLO WORLD”,这里使用的是1-M code,纠错等级更高,多了3个字节,用填充字节进行填充而已。

    1. Data Encoding

      小结:本小节主要介绍了数据编码(Data Encoding)的组成,运用了一个实例,讲的很详细。

      Q:一个QR码的Data Encoding的字节数如何确定?<br> A:一个QR码的字节数由版本和纠错等级共同确定。点击Error Correction Code Words and Block Information,通过Version and EC Level查看Total Number of Data Codewords for this Version and EC Level的值,该值就是该版本和纠错等级QR码的字节数。

      Q:Data Encoding中的数据是如何组成的?<br> A:<br> 1)Mode Indicator(Step3: Add the Mode Indicator);<br> 2)Character Count Indicator(Step4:Add the Character Count Inidicator,Step3:Encode Using the Selected Mode);<br> 3)Encoded Data和Terminator(Step 4: Break Up into 8-bit Codewords and Add Pad Bytes if Necessary,Terminator用于字节对齐);<br> 4)字节填充(Add Pad Bytes if the String is Still too Short)

    1. This tutorial assumes that you have at least some basic programming knowledge.

      本教程将尝试用简单的术语解释整个过程

    2. This tutorial is written for programmers who want to learn how to encode a QR code.

      本文的写作目的是教程序员QR码是如何编码的。

  6. Jun 2020
    1. 1

      发生错误的位

    2. 这儿的x的系数2在二进制中等于0。另外很重要的概念就是二进制域中,加等于减,例如 相当于 。

      二进制域的两个性质

    3. 在信息论中,BCH codes 是指 Bose–Chaudhuri–Hocquenghem codes,可以用来纠错。

      BCH编码的作用:纠错

  7. May 2020
    1. 通常情况下,两个输入字符用 11 位表示。

      如何理解这句话?

    2. 数据的数字位数为 8

      对于例1中01234567,确实是8位。

    1. 先看看掩膜效果的过程以及评价方法

      变量i和j的含义未明确,不知道其具体含义???

    2. 特别是行或者列的黑白块以1011101这种形式出现,那就与位置探测图形的行和列一致

      位置探测图形和数据1011101的关系是什么。

    1. 滑动窗口的目标检测算法

      Q:如何评价滑动窗口的目标检测算法? A:基于滑动窗口的目标检测将目标检测的问题转化为了分类问题。

    2. 目标检测算法

      目标检测算法的分类

    3. 其可以看成图像分类与定位的结合,给定一张图片,目标检测系统要能够识别出图片的目标并给出其位置,由于图片中目标数是不定的,且要给出目标的精确位置,目标检测相比分类任务更复杂。

      目标检测的定义。

    1. 正因为这个,同个cell是没办法预测多个目标的。

      Q:为什么说同个cell没有办法预测多个目标?

    2. 我们再看图片中物体的中心是落在哪个cell里面,落在哪个cell哪个cell就负责预测这个物体。

      Q:cell与预测物体的关系是什么? A:物体的中心落在哪个cell里面,落在哪个cell哪个cell就负责预测这个物体。

    3. 对于这种任务我们要怎么做?一个很自然的想法就是,我把图片喂给深度模型,让网络学习吐出bounding box的xywh四个值以及图片的类别就好了。这么做貌似是可以的,但考虑这么一种情况:如果图片上除了一只猫之外还有一只狗,甚至更多的物体,我们都想把它们框出来,那么这时候网络就不仅仅要输出猫的预测,还有输出其他物体的预测。这个时候我们发现,模型的输出的维度是没办法固定的,图片中存在的物体越多,模型输出的维度就越大。所以这种思路行不通。

      Q:为什么让深度学习的模型输出Bounding Box的4个坐标是行不通的?<br> A:目标检测任务的目标太多,模型输出的维度没有办法固定,图片中存在的物体越多,模型输出的维度就越大。

    1. 数字编码

      输入:一串待编码的数字; 输出:编码后的一串01数据。 操作:3个一组、10进制转2进制、数字编码的标志、数字个数的二进制表示。

    2. 二维码的各部分都有自己的作用,基本上可被分为定位、功能数据、数据内容三部分。

      二维码的分类

    1. 在数字图像处理中,二值化方法通过选取适当的阈值对图像进行分割,从而突出图像中的某些特征。

      图像二值化的作用

    1. 所以最大的特征值对应的特征向量指明了运动速度的最大方向。

      最大特征值的含义

    2. 如果旋转前的基不正交,旋转之后变为了标准基,那么实际会产生伸缩,所以之前说的正交很重要。

      旋转必须正交的重要性.

    3. 所以矩阵代表的运动实际上只有两种:旋转 拉伸

      矩阵运算的含义

    4. 从特征向量和特征值的定义式还可以看出,特征向量所在直线上的向量都是特征向量

      特征空间的定义

    5. 不止一个特征向量,还有一个特征向量

      一个矩阵的特征向量可能不止一个.

    6. 特征值与特征向量的定义式

      特征值和特征向量的定义.

    7. 从几何上简单讲解下特征值、特征向量的定义指的是什么,然后再来解释为什么特征值、特征向量会是运动的速度和方向

      全文纲要

    8. 先给一个简短的回答,如果把矩阵看作是运动,对于运动而言,最重要的当然就是运动的速度和方向,那么(我后面会说明一下限制条件):特征值就是运动的速度 特征向量就是运动的方向

      小结: 把矩阵看作运动,特征值看作运动的速度,特征向量看作运行的速度是本文的核心观点.

    1. 葛立恒扫描法(Graham's scan)是一种计算一组的平面点的凸包的算法,时间复杂度为O(nlogn)O(nlog⁡n) {\displaystyle O(n\log n)}<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- ⁡ --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(n\log n)}</annotation> </semantics> </math>。

      Graham扫描法的定义。

    1. 例子:假设平面上有p0~p12共13个点,过某些点作一个多边形,使这个多边形能把所有点都“包”起来。当这个多边形是凸多边形的时候,我们就叫它“凸包”。如下图

      一图胜千言!

    2. 在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。

      凸包的直观解释。

    3. 在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。

      凸包数学上的定义。

  8. Apr 2020
    1. 一个1-连通域和一个0-连通域是分别由1-像素点和0-像素点组成的连通域。

      1-连通域和0-连通域的定义。

  9. Mar 2020
    1. 在向量分析中, 雅可比矩阵是一阶偏导数以一定方式排列成的矩阵, 其行列式称为雅可比行列式.

      雅各比矩阵的定义。

  10. Jan 2020
  11. Oct 2019
    1. 通用矩阵乘(GEMM)优化算法

      软件优化策略: 1)改进访存局部性; 2)利用向量指令.

    1. 需要将交叉编译工具链添加到环境变量以便系统进行查找

      需要对交叉编译链设置链设置环境变量的原因

    2. 简单地说,就是在一个平台上生成另一个平台上的可执行代码。

      交叉编译的本质.

    1. CMake不知道你的目标平台是什么、用什么编译起、如何编译等等,所以你需要提供预设一些变量到CMake,其中最为方便的一个方法就是将相关的变量设置都放进一个文件(cmake脚本)中去,然后将该文件通过CMAKE_TOOLCHIAIN_FILE传递给CMake,

      CMake 交叉编译需要解决的几个问题: 1)目标平台; 2)用什么编译器; 3)如何编译

    2. 首先需要明确以下几点

      关于使用CMake进行交叉编译的几点声明

    3. 基本流程

      CMake的基本使用流程

    1. bazel build gemmlowp:all

      应该为以下语句! $ bazel build //:all

  12. Sep 2019
    1. 由于贪心法的高效性以及其所求得的答案比较接近最优结果,贪心法也可以用作辅助算法或者直接解决一些要求结果不特别精确的问题。

      贪心算法的应用场景.

    2. 贪心法,又称贪心算法、贪婪算法、或称贪婪法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。

      贪心算法的定义.

    1. 然后每个单元格负责去检测那些中心点落在该格子内的目标

      Q:如何理解这句话?

  13. Aug 2019
    1. Execution throughput

      吞吐率:本文的单位为cycle。 假如某条指令的延迟为4个cycle,吞吐率为2个cycle,则表示同个时间可以执行这两条指令,并且需要2个cycle。

    2. Arm® Cortex®-A75 Software Optimization Guide

      本PDF介绍了和软件优化相关的指令操作pipeline和指令的特性,包括延迟和吞吐率,可以通过写汇编实现。

    3. Pipeline

      本章主要介绍了Cortex-A75指令处理流水线(pipeline)。具体过程如下所示: 1)指令的获取(fetch)和解码、重命名和派发(decode、rename和dispatch); 2)一旦这些指令派发好了,这些微操作指令等待它们的操作数,然后将它们派发到乱序执行的执行pipeline; 3)每个执行pipeline可以每个cycle中接收和完成一个微操作(micro-operation)。

      Q:有哪些微操作? A:分支(Branch)、整形运算、浮点运算、SIMD运算和数据存储和加载等。

    4. latency and throughput

      延迟和吞吐量

    5. Introduction

      本文档主要将介绍对软件和编译器优化有用的Cortex-A75微架构。

    6. Scope

      本文档的范围: 1)微体系结构细节仅限于对软件优化有用的部分; 2)文档只扩展到Cortex-A75内核的软件可见行为,而没有扩展到行为背后的硬件原理; 3)此信息旨在为Cortex-A75核心优化软件和编译器。

    7. Cyclic Redundancy Check

      循环冗余校验

    8. This document contains a guide to the Cortex-A75 micro-architecture with a view to aiding software optimization

      本文档包含一个关于Cortex-A75微架构的指南,旨在帮助软件优化。

    1. For SuperTuxKart is it on the third line of the manifest file

      APK的包名在mainifest文件中。

    2. In Android, each application has its own Linux user id.

      在Android中,每一个应用都有其Linux用户id。

    3. For a non-rooted device gatord needs to be run by the user id of the application so it has permission to profile the application.

      对于非根设备,gatord需要由应用程序的用户id运行,因此它具有配置应用程序的权限。

    4. To install gatord copy it from the DS-5 install area to a temp directory on the device and then copy it from temp to the home directory of the user account of the application.

      下面命令行对话框中的第二条分三步执行: 1)adb shell 2) run-as org.supertuxkart.stk_dbg 3) cp /data/local/tmp/gatord gattord

    5. The uname command indicates which version of gatord to use from $DS5_HOME/sw/streamline.

      通过命令操作可以发现,我工作的环境是aarch64。

    6. Installing the gator daemon onto the device for profiling the Android application requires it to be placed in the home directory of the user id for the application.

      需要知道包名以供adb使用。 Q:包名在哪里? A:在AndroidManifest.xml文件中。

    7. Make sure Android devices enable developer options.

      在手机端开启“开发者选项”

    8. a tedious process

      一个复杂的过程。

    9. Streamline setup

      Streamline使用gatord作为守护进程(daemon)。

    10. daemon

      守护进程

    1. Some Neon instructions act on scalars together with vectors.

      这对于我来说是一个新知识,单元素和多元素的SIMD!

    2. Fundamentals of Armv8 Neon technology

      本文主要讨论A64指令。

    1. ADD V10.4S, V8.4S, V9.4S

      NEON汇编基本语法。

    2. Performing the four operations with a single SIMD instruction is faster than with four separate SISD instructions. 

      使用SIMD而不多次使用SISD的根本原因在于,SIMD更快。

    1. ARMv8 Neon Programming

      【已学习】 通过本PPT的学习,可以获取如下知识: 1)ARMv8 NEON汇编的基本语法; 2)ARMv8和ARMv7的差异; 3)内联汇编的基本语法架构; 4)使用内联汇编的建议。

    2. mul v0.u8, v0.u8, v1.u8

      ARMv8 NEON汇编基本语法!

    3. Do not take anything for granted!

      不要认为所有事都是理所当然的。

    4. https://community.arm.com/groups/android-community/blog/2015/03/27/arm-neon-programming-quick-reference

      该链接已失效。

    1. Remarks

      扩展的asm语句必须中函数中。

    2. Clobbers

      用逗号分隔的寄存器列表。

    3. AssemblerTemplate

      汇编模板由固定的文本和引人的输入、输出和goto参数。

    4. __asm__ instead of asm

      Q:asm和asm的使用区别? A:在编译使用-ansi和各种-std选项时,使用asm,而不使用asm。

    5. :

      中ASM内联汇编中,使用冒号来中程序模板之后分隔操作数。

    1. 从这个比喻中我们可以看出,延迟测量的是每个客户(每个应用程序)感受到的时间长短,而吞吐量测量的是整个银行(整个系统)的处理效率,是两个完全不同的概念。

      延迟和吞吐量是局部和系统的关系,延迟是针对局部而言的,吞吐量是针对系统而言的。

    1. 消除乘法运算

      消除乘法的原因是:将tan设置成分数,反求成度数。

    2. 减少乘法运算

      减少乘法运算的原因是:cos和sin存在公因子tan,可以提取tan到括号外面。

    1. 而乙处和丙处就变成了边缘。可见非线性关系会使得引导图像对于边缘和区域的指示作用发生错乱。

      这里本质上是利用了反证法。

    1. 如果成功,则该函数返回零,否则返回非零值。

      按照惯例:如果成功,则该函数返回零,否则返回非零。

    2. SEEK_END

      实际项目用到过。

    1. fseek 可以移动文件指针到指定位置读,或插入写

      fseek的功能。

  14. Jul 2019
    1. w

      需要仔细理解w的意思。

    2. 二进制文件

      二进制文件读写的方法。主要区别是多了一个“b”。

    1. 编译C代码

      这一步没有复现成功。

    2. myini.HelloJNI

      更正:myjni.HelloJNI

    3. > set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_{xx} // Define and Set environment variable JAVA_HOME to JDK installed directory // I recommend that you set JAVA_HOME permanently, via "Control Panel" ⇒ "System" ⇒ "Environment Variables" > echo %JAVA_HOME% // In Windows, you can refer a environment variable by adding % prefix and suffix

      我已经设置好了,无需设置。

    4. 对于windows上的MinGW

      为使用的是这种方法。

    1. JNI is difficult, as it involves two languages and runtimes.

      Q:JNI为什么难? A:因为JNI涉及到两种语言和runtimes。

    1. JNI

      Q:什么是JNI? A:JNI(Java Native Interface)是一种原生编程接口。

    1. 先和大家说下我是怎么想象的,首先我们在点击Android Studio中的run按钮的时候,它是执行Gradle来进行打包的,所以说关于CMake的是怎么植入进去的,一定在项目的build.gradle,有相应的入口。

      合理猜想

    1. 另外,在C和C++中的JavaVM的定义有所不同,在C中JavaVM是JNIInvokeInterface_类型指针,而在C++中有对JNIInvokeInterface_进行了一次封装,比C中少了一个参数,这也是为什么JNI代码更推荐使用C++来编写的原因。

      Q:为什么JNI代码更推荐使用C++来编写? A:因为C++中JavaVM的参数比C少一个。

    2. 二进制兼容性是一种程序兼容性类型,允许一个程序在不改变其可执行文件的条件下在不同的编译环境中工作。

      二进制兼容性的定义。

    1. 在声明 native 方法时还是用 Java 来写比较好,比 Kotlin 的 external 关键字要友好多了,可以直接快捷键生成对用的 C++ 方法。

      到底是哪个快捷键呢?

    2. 在 Android 上进行 NDK 开发还是得先学会 JNI 相关技能,先可以从 Java 层到 C/C++ 层的相互调用,然后再学习 NDK 开发的那些技巧。

      学习NDK和JNI的路线。

    1. 信息熵,交叉熵和相对熵

      本博客说明了信息熵、交叉熵和相对熵的基本概念,以及二者之间的关系。 说明了为什么机器学习里使用交叉熵表示代价函数。

    1. 自适应高斯滤波器的指导思想是要在最平滑的结果和最佳的保持细节信息的结果中取一个折中方案。

      原则

    2. 自适应高斯滤波器就是根据被平滑的图像的局部特征,选择不同的sigma,使得在平滑后的结果图像中,可以保持细节信息。

      自适应高斯滤波器的原则。

    3. 通常情况下,在使用高斯滤波器对二维图像进行平滑处理时,高斯函数的方差sigma是一个固定的值。

      高斯函数的方差为固定值,这样做存在缺陷。

    1. 风险(hazard)是指在计算机CPU的微体系结构中,指令流水线乱序执行中的一些问题可能会导致得到不正确的计算结果。

      冒险的定义。

    1. neon_instr_seq_0

      函数名

    2. 通过上面的源码,我们可以看出每个复数乘加涉及到3次双精度浮点数的乘加(MLA)运算和1次双精度浮点数的乘减(MLS)运算。

      这里需要进行简单的分析。

    3. 我们将这个算法运行10次,得到平均的执行时间为289.692us。缺省情况下,CPU的主频为667MHz,换算成CPU cycles,执行时时间为193128 cycles。

      可以进行简单的理论推导。

    1. 指令的延时与吞吐量

      数学关系式: 延时 > 1/吞吐量

    2. 由于CPU在指令的处理上采用了pipeline等各种优化方式,而pipeline的特点就是就算是多条相同的指令也可以同时执行,因此通常有latency > 1/throughput而非相等。

      延时和吞吐量的关系。

    1. base register

      基址寄存器

    2. An addressing mode is the process by which a load/store instruction will compute the address it will access.

      寻址模式是加载/存储指令计算它将访问的地址的过程。

    3. basic incarnation

      基本形式

    1. Since the stack is memory and memory is accessed using addresses, the top of the stack is an address.

      由于堆栈是内存,并且使用地址访问内存,所以堆栈的顶部是一个地址。

    1. Loop

      应为:Loop:

    2. Instruction mnemonics

      指令助记符

    3. Reading assembly code can be helpful for debugging C, particularly to understand the mapping between assembly instructions and C statements

      阅读汇编代码有助于调试C,特别是理解汇编指令和C语句之间的映射。

  15. Jun 2019
    1. 可惜的是我们无法得知任何一个具体的 ninin_i 的值。

      无法知道噪音是导向滤波需要解决的问题。

    2. 这里的 Wi,j(I)Wi,j(I)W_{i,j}(I) 就表示由引导图像 III 来确定加权平均运算中所采用的权值。

      导向滤波的卷积核是由导向图确定的,这是和一般的滤波算法不一样的地方。

    1. linear regression

      线性回归

    2. investigate

      探讨

    3. dentical

      相同的

    4. e gener

      通用

    5. , we define a new type of filter that shares the niceproperty of edge-preserving smoothing but can be computed efficiently and ex-actly

      导向滤波的优点。

    1. 噪声的特点通常是以其为中心的各个方向上梯度都较大而且相差不多。边缘则不同,边缘相比于区域也会出现梯度的越变,但是边缘只有在其法向方向上才会出现较大的梯度,而在切向方向上梯度较小。

      使用梯度来解释噪音和梯度的区别。

    1. 梯度方向,也就是角度

      注意:梯度方向即相对于水平线的角度。

    1. 我们假设不需要,当我们频繁调用swap的时候,会发生什么?每次调用,程序栈都在生长。直到栈满,我们就会收到stack overflow错误,程序挂掉了。

      利用了反证法!

  16. May 2019
    1. C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。

      结构体和数组的关系。

    2. 结构体

      structure

    1. 比原作者那个应该效率会好很多的

      感觉惊喜快来了。

    2. Sum

      sum数据的计算具有前后关联性,不利于优化。

    1. 导向滤波顾名思义,就是有选择(导向)性的滤波,其与我们经常提及的高斯滤波、双边滤波相比,它具有导向性,说具体点就是,它通过输入一副图像(矩阵)作为导向图,这样滤波器就知道什么地方是边缘,这样就可以更好的保护边缘,最终达到在滤波的同时,保持边缘细节。所以有个说法是导向滤波是各向异性的滤波器,而高斯滤波、双边滤波这些是各向同性滤波器,我觉得也是很贴切。

      导向滤波的内涵。

    1. 接口

      interface

    2. 面向对象的系统可能会使用一个抽象基类为所有的外部应用程序提供一个适当的、通用的、标准化的接口。

      抽象基类和接口的关系。

    1. 公有继承(public)

      对于公有继承,原来的访问权限不变。

  17. Apr 2019
    1. 从存储区 str2 复制 n 个字符到存储区 str1

      注意分清src和dst。

    1. C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。

      重载运算符和重载函数的定义。

    1. CPU的散序处理的目的就是CPU会尽量使得自己忙起来,这需要CPU具有判断指令间是否具有依赖性的能力。

      CPU散序处理的目的。

    1. 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。

      this指针的作用。

    1. 函数调用

      说明了函数调用是如何使用寄存器的。

    2. arm64有32个64bit长度的通用寄存器x0~x30,sp,可以只使用其中的32bit w0~w30。 arm32只有16个32bit的通用寄存器r0~r12, lr, pc, sp. arm64有32个128bit SIMD寄存器v0~v31,arm32有16个128bit SIMD寄存器Q0~Q15,又可细分为32个64bit SIMD寄存器D0~D31

      arm64和arm32的资源。

    1. Stack 是由内存区域的结束地址开始,从高位(地址)向低位(地址)分配。

      栈分配空间的特点是从高位到低位,在下图中就是按照从上到下的顺序分配空间。

    2. 等到add_a_and_b运行结束,它的帧就会被回收,系统会回到函数main刚才中断执行的地方,继续往下执行。

      帧的生命周期。