eyePaddles 发布的文章

概念

XLD-亚像素精度轮廓
平移变换、刚体变换(欧式变换)、相似变换、仿射变换、投影变换(单应性变换)
Snipaste_2025-01-05_20-55-52.png

常用算子

rgb1_to_gray(Image,ImageGray) // 图像灰度化

图像插值

最近邻插值-nearest
Snipaste_2025-01-05_20-46-42.png
线性插值-bilinear
Snipaste_2025-01-05_20-48-31.png
双线性插值-constant
Snipaste_2025-01-05_20-49-15.png
双三次插值-bicubic,考虑权重,从最近的16个像素点计算该处像素值
Snipaste_2025-01-05_20-50-23.png

图像增强

突出感兴趣区,弱化不感兴趣区,分空域处理法和频域处理法

空间域处理法

点运算-灰度变换:有线性灰度变换、分段线性灰度变换,非线性灰度变换

invert_image(Image:ImageInvert::) // 图像取反
emphasize(Image:ImageEmpasize:MaskWidth,MaskHeight,Factor:) // 增强Factor倍,res:=round(org-mean)*Factor+org,MaskWidth-模板宽,MaskHeight-模板高
scale_image(Image:ImageScaled:Mult,Add:) // 缩放图像的灰度,res:=org*Mult+Add
直方图修正法
equ_histo_image(GrayImage:ImageEquHisto) // 直方图均衡化
Snipaste_2025-01-05_21-03-28.png
直方图规定化
Snipaste_2025-01-05_21-05-03.png

邻域运算-图像平滑

目的:抑制噪声
高斯噪声:随机,总体符合正太分布的噪声
Snipaste_2025-01-05_21-14-12.png
椒盐噪声:只有两种幅值
Snipaste_2025-01-05_21-15-07.png
mean_image(Image:ImageMean:MaskWidth,MaskHeight:) // 邻域平均法,实质均值滤波,针对高斯噪声,会使图像产生模糊,特别在边缘和细节处,所用邻域半径越大,图像模糊程度越大,MaskWidth和MaskHeight是掩膜的长宽
中值滤波,针对椒盐噪声
多图像平均法:对同一物景下拍摄多福图像,取平均值来消除噪声

邻域运算-图像锐化

目的:增强图像的边缘和轮廓
从图中可知图像的边缘一般是灰度突变的地方,锐化的实现是基于微分。边缘取一阶微分的极值或二阶微分的过零点
Snipaste_2025-01-05_21-30-56.png
Snipaste_2025-01-05_21-32-34.png
实际使用差分来处理微分
水平垂直差分梯度
梯度方向是边缘方向垂直的方向,梯度的意义:梯度是灰度变化率最大的方向
Snipaste_2025-01-05_21-46-45.png
Snipaste_2025-01-05_21-47-41.png
Snipaste_2025-01-05_21-48-12.png
一阶微分算子-Roberts梯度算子
使用交叉的差分表示,就变成了Roberts梯度算子
Snipaste_2025-01-05_21-48-52.png
Roberts梯度算子的缺陷:采用梯度微分锐化图像,同时会使噪声、条纹得到增强,并且边缘信息强度低,可能出现断断续续。
Snipaste_2025-01-05_21-51-19.png
一阶微分算子-Sobel梯度算子
结合了高斯平滑和微分求导,增强了边缘信息的强度,一定程度上避免了噪声、条纹的干扰。
Snipaste_2025-01-05_21-57-45.png
Snipaste_2025-01-05_22-00-23.png
对比Roberts,边缘信息得到了加强
Snipaste_2025-01-05_22-03-43.png
sobel_amp(Image:EdgeAmp:FilterType,Size) // FilterType-滤波类型,Size-掩膜大小
EdgeAmp的结果:
Snipaste_2025-01-05_22-08-41.png
进一步通过阈值分割、提取边缘框架(skeleton)后,可获得所需边缘:
Snipaste_2025-01-05_22-11-48.png
skeleton(Region,Skeleton) // 提取边缘框架
二阶微分算子-拉普拉斯算子
拉普拉斯算子获得的轮廓信息比一阶微分算子更为丰富
Snipaste_2025-01-05_22-15-58.png
图像的拉普拉斯锐化处理:将原图像和拉普拉斯图像进行叠加,可以使增强图像轮廓显示的更为清晰。
Snipaste_2025-01-05_22-20-07.png
laplace(Image:ImageLaplace:ResultType,MaskSize,FilterMask:) // MaskSize-掩膜大小,FilterMask-4邻域还是8邻域
laplace_of_gauss(Image:ImageLaplace:Sigma:) // 先高斯平滑再锐化

频率域处理法

一幅图像灰度均匀的区域对应低频部分,噪声、边缘、细节对应高频部分
高通滤波:筛除低频部分,保留高频部分
低通滤波:筛除高频部分,保留低频部分
(1)fft_generic(Image:ImageFFT:'to_freq',Exponent,Mode,ResultType:) // 空域到频域的快速傅里叶变换,Mode-直流分量在中间还是在边缘,dc_center-高频分量在边缘,低频分量在中间,dc_edge-高频分量在中间,低频分量在边缘
(2)gen_lowpass(:ImageLowpass:Frequency,Norm,Mode,Width,Height:) // 生成低通滤波器模型
gen_highpass(:ImageHighpass:Frequency,Norm,Mode,Width,Height:) // 生成高通滤波器模型
(3)convol_fft(ImageFFT,ImageFilter:ImageConvol::) // 在频域里卷积图像,ImageFFT-待处理的频域图像,ImageFilter-滤波器模型,ImageConvol滤波后的频域图像
(4)fft_generic(ImageFFT:Image:'_freq',Exponent,Mode,ResultType:) // 频域到空域
频谱图中白亮的地方是低频,因为图像的能量一般是集中在低频部分
频域图中的(0,0)点是特殊的点,是频谱的直流(dc)分量,代表空间域图像的平均灰度

频率域处理法-同态滤波

目的:解决光照不均匀导致的图像模糊
原理:相机的成像可以看作是照射分量和反射分量的乘积,通过换算,低频部分对应照度分量,高频部分对应反射分量,此时只需使用高通滤波器过滤低频部分即可。
图片来源:B站WLSU苏波的Halcon课堂

三级模式-两级映像:

内模式:数据库文件的物理存储
模式:又称概念模式,基本表
外模式:视图,基本表查询出来的虚拟表,视图并不存储表中每行每列的值,它只是对基本表的引用

外模式-模式映像:视图和表之间的映射,若表中的数据更改,只需修改此映射,无需对视图和应用程序修改,保证了逻辑独立性
内模式-模式映像:数据物理存储和表之间的映射,若表中的数据更改,只需修改此映射,无需对表、视图和应用程序修改,保证了物理独立性

数据库设计

需求分析:产出物:数据流图、数据字典、需求说明书
概念结构设计:产出物:E-R图,或概念结构模型,或实体-联系模型。步骤:从局部到整体,自底向上设计,先分ER图,再合并ER模型。分ER图产生冲突:属性冲突(同一属性在不同ER图,解决方法:只留一个属性)、命名冲突(不同表中相同命名属性的意义不同、不同表中不同命名属性的意义相同)、结构冲突(同一实体在不同ER图中有不同的属性、同一对象在这一个ER图是实体而在另一个ER图是属性)
逻辑结构设计:产出物:逻辑结构模型,或关系模型,确定完整性约束、确定用户视图
物理结构设计:确定数据分布、存储结构、访问方式
数据库实施:建立数据库、写应用程序
数据库运行和维护

数据模型

关系模型:ER图转换而来,由开发人员设计
概念模型:用户视角建模的,是现实到信息世界的第一抽象
网状模型:反映实体之间的联系
面向对象模型:采用面向对象的方法设计数据库,以对象为单位,每个对象都有属性和方法。Hibernate是一个面向对象模型的对象关系映射(ORM)框架。

数据模型三要素:数据结构(对象类型)、数据操作(增删改查等)、数据的约束条件(primary key、foreign key、unique等)

概念

弱实体:依赖于强实体,例如:经理、业务员,他们都属于员工;学生选课场景中,家长需要知道学生的成绩,学生是强实体,家长是弱实体
强实体:一般的实体,例如:员工
简单属性:
复合属性:家庭地址,因为家庭地址由国家、省份、市区、街道、门牌号组成
域:属性的取值范围
码:键,唯一标识
主键:任选一个候选键
外键:其他表的主键
超键:唯一标识此表的属性的组合,可以包含冗余属性
候选键:超键中去掉冗余属性
主属性:候选键内的属性为主属性,其他为非主属性
实体完整性约束:主键不能为空,也不能重复
参照完整性约束:外键参照的主键必须是其他表存在的值,或者为空
自定义完整性约束

范式

第一范式1NF:每个分量都是不可分割的数据项,也就是说表中属性是简单属性,而不是复合属性
第二范式2NF:满足第一范式,所有非主属性都完全依赖于候选码,即消除部份依赖
第三范式3NF:满足第二范式,消除非主属性对码的传递依赖
BC范式BCNF:满足第三范式,消除主属性对码的部份依赖和传递依赖

模式分解

有损分解、无损分解
是否保持函数依赖

并发控制

事务的特性:原子性、一致性、隔离性、持续性
并发控制三大问题:丢失更新、不可重复读、读脏数据
X锁:写锁,排它锁
S锁:读锁,共享锁

数据库安全

完全备份、差量备份、增量备份

分布式数据库

在概念模式和内模式之间加入分片模式
分片模式可以为水平分片、垂直分片

数据仓库

不同于数据库,用于数据统计分析,对事物发展历程和趋势做出定量分析和预测
特点:面向主题,集成的(由其他分散的数据库中进行抽取,洗练,加工,整理获得),相对稳定(查询多,修改和删除少),反映历史变化
过程:异构的数据源->抽取、清理、装载、刷新->数据仓库->OLAP(联机分析处理)服务器->前端工具(报表、数据分析等)
商业智能(BI系统):数据预处理(ETL)、建立数据仓库、数据分析(联机分析技术OLAP、数据挖掘)和展现

反规范化

规范化的目的是降低冗余,避免插入、修改异常,反规范化的目的是提高查询性能

大数据

使用集群平台、对数据进行深度分析(关联分析、回归分析)

单例模式:一个项目中,全局范围内,某个类的实例有且仅有一个,通过这个单例向其他模块提供数据的全局访问。

// 嵌入知识点:使用C++ 11新特性delete删除构造函数、拷贝函数、移动操作符
class A
{
public:
    A() = delete;
    A(const A & t) = delete;
    A& operator=(const A & t) = delete; // 删除赋值操作符
}

// 单例模式例子:使用C++ 11新特性default,修改构造函数和拷贝函数的访问权限
class A
{
public:
    static A* getInstance()
    {
        return m_instance;
    }

protected:
    A() = default;
    A(const A & t) = default;
    static A* m_instance; // 静态变量不能在类的内部初始化,初始化需要到外部
}
A* A::m_instance = new A; // 全局初始化时在A作用域下可以访问到A的m_instance和A()

任务队列:将一个一个的任务作为函数,装入队列这样的容器中,根据其先进先出的特性,使程序可以按照某种次序依次执行函数。典型例子如QT的QApplication::exec()事件循环。

单一职责原则:每个类做专一的功能,多个功能由多个类完成。
开放封闭原则:开放指类和模块、函数可扩展,即对于每个实体类都做一个抽象类,那就可以保证,每次需要扩展一个类的时候只需要实现一个类,而其他依赖它的类无需改动。
例子A,小明用铁锅炒蔬菜,这里一共有三个类:小明、铁锅、蔬菜,小明使用到了铁锅、铁锅里面装有蔬菜,即小明依赖了铁锅,蔬菜依赖了装它的容器铁锅,若此时需要将铁锅换成不粘锅,则不仅要新写不粘锅类,还需要将原本引用铁锅的蔬菜、小明处的代码全都改成不粘锅,这显然是扩展性差的体现。正确的设计代码结构的方式是将小明抽象为一个类(人),铁锅、不粘锅抽象为一个类(烧菜的容器)、蔬菜抽象为一个类(食物),然后将各种实体类继承于这些抽象类,这样的好处是当需要将铁锅换成不粘锅时,只需新写一个继承装菜容器这一抽象类的不粘锅类即可,而无需改动引用它的地方。
封闭指的是尽量不修改原有的类,若要修改,尽量采取增量修改的方式,扩充类或者扩充成员函数。
依赖转换原则:1. 高层模块不应该依赖于低层模块,高层模块和底层模块都应该有它的抽象;例子A就是一个符合该条的例子;因此,在设计结构的时候,高层不直接调用底层,而在两者之间封一层抽象类,高层调用抽象类的接口,从而调用到底层的模块;2. 抽象不应该依赖细节,细节应该依赖抽象。
里氏代换原则:子类类型必须能够替换掉它们的父类类型,抽象出来的父类能符合子类的共性特征。若代码结构不满足里氏代换原则,也就不满足依赖转换原则的第二条。

类与类之间的关系

继承关系(泛化关系):带空心三角形的实线表示,箭头指向父类。继承关系可以继承非抽象类也可继承抽象类。
关联关系:一个类作为另一个类的成员变量。可分三类:单向关联、双向关联、自关联(即链表)。带箭头实线表示,指向被关联的一方,单向关联一个箭头、双向关联两边都带箭头、自关联自己指向自己。
聚合关系:整体与部分的关系。例如:汽车由引擎、轮胎、车灯等组成,森林由植物、动物、水、阳光等组成。关系比较松散,当森林类被析构时,引擎、轮胎、车灯类不会被析构,即引擎、轮胎、车灯可以脱离整体而单独存在。用带空心的菱形的直线表示,菱形指向整体。
组合关系:整体与部分的关系。例如:头由嘴巴、鼻子、耳朵、眼睛构成,树由树根、树干、树枝、树叶构成。组成的部分对于整体来说缺一不可。析构整体的时候需要将部分全都析构。用带实心菱形的直线表示,菱形指向整体。
依赖关系:是一种使用关系。例如:将一个类的对象作为另一个类中方法的参数,在一个类的方法中将另一个类的对象作为其的局部变量,在一个类的方法中调用了另一个类的静态方法。用带箭头的虚线来表示,箭头指向被依赖的一方。
关系的紧密程度:继承>组合>聚合>关联>依赖