任务 在课堂上学习了直方图均衡化的处理手段,看到外国女子的脸部增亮,这是在空域中实现变换增强的方法之一。尝试在matlab中实现相关方法,并用网上的老照片进行实验,效果不错。 过程 得到灰度图的直方图 灰度图的获取可以参考博文matlab数字图像处理——RGB转灰度图,当然也可以直接调用系统函数rgb2gray() 直方图其实是统计不同灰度等级的像素点数目大小,并通过除以图像像素点总数目,得到归一化结果/概率。 得到累积直方图 因为需要对灰度等级进行映射——把某个阶段的灰度值对应到均衡的结果,那么我们需要取得中间变量:累积直方图。 得到映射关系 映射关系可以利用matlab的矩阵运算实现,直接将表达式中的变量用矩阵替换即可。分别表述这行代码中变量的含义: cRecord:上一部分得到的累积直方图 256:总共的灰度等级 -1是因为在matlab中,uint8的范围在0~255 mapValue: 索引值继承等号右边唯一的矩阵——cRecord的含义,是每个灰度等级 内部的值表示通过运算映射得到新的灰度等级 根据新的映射关系修改原图的灰度值 这一步的目的比较清晰,已经通过上一步得到了映射关系,只要将原图中的灰度等级修改为映射后对应的灰度等级即可。 问题与解决方法 残影 整个过程比较顺利,只是第一次显示直方图时有些奇怪: 结果图P5只能隐约看到lena的轮廓,通过显示该图像的变量类型找到答案,变量并非图像的uint8类型,而是double类型。问题出在初始化变量上,我利用zeros()函数,当我把赋值改为强制类型转换后,问题解决。 class(newImg) ans = ‘double’ 结果展示 参考资料 如何提取特定位置以后的字符串(出处: MATLAB中文论坛) MATLAB中画柱状图
Category: 专业课程
本科专业为自动化类
有时会对科目有一些见解,或是学习此科目时一些探索实践,在此记录
matlab数字图像处理——RGB转灰度图
应用不同算法或算式,实现RGB转灰度图,并对性能进行评估
matlab实现FFT(快速傅里叶变换)
任务 接上篇,尝试使用快速傅里叶变换实现空域到频域转换 过程 判定2的幂次 由算法可知,对于长度为2的幂次的序列可以进行变换,但对于大多数情况非2的幂次应该如何解决?答案是补零至2的幂次。 判定 简单的判定方法,利用2的幂次(M)在二进制中的独特性,首位为1,余位为0;且减1后(M-1)原首位为0,余位为1,则有M&M-1=0 matlab中的按位与函数为bitand(),与&不同 bitshift(num,n); num表示需要移位的数,十进制; n为正左移,负右移。 求大于一个数字的二进制的最高位 思路,通过移位,当非2次幂数的第i位移出使原数为0,则最高位为i。可以将2次幂数-1转换为相同情况。 函数实现 首先强制类型转换,转换为固定的uint8类型。 matlab没有三目运算符,则用if…else语句实现。将特殊情况0单独列出, 调用临近最高位的求取函数highestOneSite(M) 位的对换 算法实现需要将输入数据排列为满足算法需要的次序,可以推导发现,满足的映射规则为第x个数为x的二进制数颠倒后的结果。 a是0~255的整数 b=dec2bin(a,8);%b是8位’0′,’1’字符串 h=b(1:4); %高四位 l=b(5:8); %低四位 MATLAB中怎么将一个常数(0到255)转为8位二进制数–dukinkin 但在matlab中,由于数组下标从1开始,需要进行-1的操作进行映射 即F(abcd)《-》f(dcba) bottom-up实现 足足思索了几个小时,终于捋清x点变换的逻辑。 指数部分函数W表示 其中W可视为函数: matlab代码为: 首先从一维开始理解,由于需要变换的矩阵长度已经过判定2的幂次并补零至最邻近的2的幂次(N=2^n),则可通过不断奇偶二分,从原始的N点变换,分解为两个N/2点变换,再到N/4点变换、……、8点变换、4点变换、2点变换。最后的1点变换,因为公式(1)中u为0,则指数项为0,即1点变换视为原值。 上面的思路确定了如何从需要变换的函数得到分解因子,本次实现通过从因子逐层自底向上推出。重点在于清楚公式中的分子的表示,以及在存储矩阵中的位置。 二维实现 利用matlab实现DFT(离散傅里叶变换)与优化 的读取图像和灰度图转换,得到了灰度图像grayImg 再利用之前的频移函数showShiftImg(twoD)得到频移到中心点的图像。 matlab技巧——如何利用其他文件夹下的函数 addpath D:\Matlab即可使用路径D:\Matlab下的函数 结果展示 ans = 442 785 3 时间已过 17.532276 秒。 现在运行给定图像需要的时间实际为17.5s,相比于优化后的DFT的12s居然不降反升,所以要想达到更有效的应用,需要继续优化。 参考文章 《图像工程 (上)<图像处理和分析>》… Continue reading matlab实现FFT(快速傅里叶变换)
matlab实现DFT(离散傅里叶变换)与优化
任务 《数字图像处理》课程布置: 编写程序(建议Matlab )对某选定图像(自行转换为灰度图)展开傅里叶变换,提取傅里叶变换图像(将频率原点移至图像中心) , 并形成实验报告。 为与matlab中代码一致,便于理解,此处的公式我全部整理为数组从下标1开始。此外,增强特殊性,图像大小为NxM 基本知识 此前尝试用matlab实现傅里叶变换,用基本公式对方波函数进行傅氏变换。但其特点: 函数连续(在matlab进行抽样离散处理,绘制波形) 范围趋近无限(在matlab中把n取大值范围) 可见,对于模拟值用计算机进行傅氏变换需要首先进行离散处理,那么对于本身是离散值的数字图像,则直接利用离散傅里叶变换即可。 这里图像大小为NxM 前面括号内的系数其实可舍去,主要起到归一化的作用,因此形式不必纠结。 首先,将二重变换利用傅氏变换的性质可以分解为两次单重变换: 与公式相一致:本人代码先按行遍历,对列(y表示)变换;再按列遍历,对行(x表示)变换 过程 读取图像 测试图片选取经典上图,但大小是压缩的200×200,因此对于初次使用比较友好。 matlab中句末引号可选,不加则会输出左值结果至命令行窗口,如上述代码的size(Img) 转换为灰度图 通过在读取的图像信息判断是否为单通道,是则直接使用,否则将RGB图像通过转换函数rgb2gray()转换为灰度图。 三重循环实现 可以通过tic,toc放在代码前后进行时长测试 注意u和v的范围是从0开始取值 ans = 200 200 3 时间已过 12.674382 秒。 频移函数 这里直接显示经过处理后的傅氏变换的图像 核心是将原图四个角点移至中心位置,可以通过matlab中矩阵处理的语法便捷实现 由于非偶数会出现不能被2整除情况,因此需要做取整处理 优化 使用上述算法经过讨论,复杂度为O(N^3),并且在处理更大尺寸的图像(老师提供785×442)时,运行时间极长。 因为了解到matlab对矩阵运算具有高效快速优点,便把思考放在如何将算法通过矩阵运算实现。 思路同样是通过两个一维变换完成,因此只以分析按行遍历,对列(y)展开为例,对思路进行陈述。 观察到公式中的基函数部分其实已经固定,因此直接通过相乘获得某个频率分量(Vn)对应的不同y值得出(某个频率分量)所有计算需要的指数部分,如下所示: 共N列 下一步将图像信息与对应的分量对应相乘,得到,那么加和则是对每行相加——每一行的x保持不变。最终得到一维转换后的结果: 具体代码 时间已过 16.837070 秒。 此用时与分钟相比下降很多,但比较系统中的fft(),用时约为0.1s,因此下一步可以思考如何进行快速傅里叶变换的使用。 参考资料 Matlab-结构体数组的索引 matlab里的图像处理函数
GPU概述
任务 在对CPU进行了解后,不妨下一步对与它相似的GPU进行系统认识。初次注意到它是对于深度学习设备的联系,感觉它具有卓越的运算性能。GPU对图像显示的功能主要体现在游戏画面,整个发展过程不妨随游戏的变化直观感受。 定义 图形处理器(英语:Graphics Processing Unit,缩写:GPU;又称显示核心、显卡、视觉处理器、显示芯片或绘图芯片)是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上运行绘图运算工作的微处理器。 意义 图形处理器使显卡减少对中央处理器(CPU)的依赖,并分担部分原本是由中央处理器所担当的工作,尤其是在进行三维绘图运算时,功效更加明显。图形处理器所采用的核心技术有硬件坐标转换与光源、立体环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等。 技术背景与发展 黑白 最初,电脑中处理影像输出的显示芯片,通常很少被视为是一个独立的运算单元。虽然英伟达公司(NVIDIA)在1999年8月发表GeForce 256绘图处理芯片时首先提出GPU的概念,但从上世纪70年代起,已经可以在游戏机上显示图像,但方式是直接用CPU桶式移位器把图像数据输出到显示器上。 彩色 到80年代时,第一块使用大规模集成电路技术的GPU诞生,是美国的一家图像芯片公司制造的NEC µPD7220,它也带动了一次GPU革命浪潮,推动intel公司第一款图像处理芯片82720的出现,能够处理16位的彩色图像。 3D 随着图像显示技术的发展,越来越多种颜色可以显示在屏幕上,也应运而生了2D和3D的专用芯片,日本的游戏公司Namco在1988年发布的Namco System 21是第一款针对3D图像显示设计的游戏主板。 VGA与SVGA 这两个词语是在C课设期间耳熟能详的两种显示方案,其实它们的含义分别是: VGA是IBM于1987年提出的一个使用模拟信号的电脑显示标准。这个标准已对于现今的个人电脑市场已经十分过时。 原本SVGA是IBM用来扩展旧VGA标准而提出的新标准,之后SVGA是由开放组织VESA所制定,并且工业界放弃了为每个更高标准给定独特命名的企图。几乎在1990年后期至2000年前后,显卡能表现出的各种显示规格都被归类在SVGA中。 个人电脑 1990年代初期,Microsoft Windows的崛起引发人们对高性能、高清晰度二维位图运算的兴趣。在个人电脑市场上,Windows的优势地位意味着台式机图形厂商可以集中精力发展单一的编程接口,图形设备接口。这个时期出现的Win G图形接口成为包括PS在内的大批3D软件的支持API,此外有大量游戏,其中之一是风靡美国的首款第一人称视角射击类游戏:Doom。我也在一个提供游戏模拟器的网站体验了这个小游戏,选择难度为中档(hurt me plenty),居然在第二关就被怪物的大火球烧死,得出结论:菜鸟在任何时期都是菜鸟。 OpenGL OpenGL是出现于90年代初的专业图像API,并成为在个人电脑领域上图像发展的主导力量,和硬件发展的动力。虽然在OpenGL的影响下,带起广泛的硬件支持,但在当时用软件实现的OpenGL仍然普遍。 此前我很容易把OpenGL与OpenCV混淆,一个区分方法是,前者将图像显示在计算机上,后者用计算机处理图像。 运用它进行渲染的游戏不计其数,一个著名的例子是B站Up主老番茄的成名之作杀手(HitMan)的首部。 科学计算 到2002年10月,随着ATI Radeon 9700(也称为R300)的推出,世界上第一个Direct3D 9.0加速器,像素和顶点着色器可以实现循环和冗长的浮点数学运算,并且很快变得像CPU一样灵活,但是对于图像阵列操作,速度更快。像素阴影通常用于凹凸贴图,从而增加纹理,使对象看起来发亮,暗淡,粗糙,甚至圆形或挤压。 随着Nvidia GeForce 8系列的推出,GPU成为了更加通用的计算设备。被称为GPU计算或用于GPU上的通用计算的GPGPU的研究子领域已进入机器学习,石油勘探,科学等领域图像处理,线性代数,统计, 3D重建,甚至股票期权定价确定。当时的GPGPU是现在称为计算着色器(例如CUDA,OpenCL,DirectCompute)的先驱,实际上通过将传递给算法的数据视为纹理贴图并通过绘制三角形或四边形来执行算法,从而在一定程度上滥用了硬件使用适当的像素着色器。显然,这会带来一些开销,因为实际上不需要的部件包括扫描转换器之类的部件(三角形操作也不是一件值得关注的事情,除了调用像素着色器外)。 总结上面的概念,是利用GPU卓越的并行计算性能来进行实际上与图像处理无关的数学运算。举个实例,比特币早期通过CPU来获取,而随着GPU通用计算的优势不断显现以及GPU速度的不断发展,矿工们逐渐开始使用GPU取代CPU进行挖矿。 自动驾驶 2019年NVIDIA发布全球最大自动驾驶处理器DRIVE AGX Orin,它的构成正是集成了NVIDIA的下一代GPU架构和Arm Hercules CPU内核,以及新的深度学习和计算机视觉加速器,这些加速器合计每秒可提供200万亿次操作。 参考资料 Graphics processing unit-wiki https://en.wikipedia.org/wiki/Graphics_processing_unit 图形处理器-维基百科… Continue reading GPU概述
CPU概论
任务 综述在计算机发展中两个例子,详细描述当时的技术背景,所描述的对象,总结其特点、进步点、推动计算机技术发展的价值和意义、缺陷及后续技术改进等,鼓励图文并茂。 意义 热点新闻是厂商发布高性能的CPU,内行人士可以感受到不同代际间的发展变化,但外行看到各种参数只是不明觉厉,不知晓其中的突破点与先进性。但正如绪论中让人印象深刻的一个观点:硬件工程师需要理解软件需求以得到研发方向,而软件工程师在理解硬件的基础上能使软件的性能得到最大程度的提升。因此,对CPU进行了解是有必要的,这是本次综述选题的出发点。 技术背景 最初计算机的目的正是为了计算,大多数采用的数制是10进制,即每一位由10个真空管表示。在1949年,轻量化BINAC(Binary Automatic Computer)的诞生使工业界向二进制的方案趋近,不过二进制的具体表示在原码、反码和补码的摇摆中才过度到现代的补码表示。 在计算机发明之初,它的软硬件设计是独特的,即使同一公司生产的不同产品也无法共享程序。因此公司的用户粘性很低,更新换代的优先考虑是价格与性能,而非无法沿用数据的旧产品的下一代。IBM公司注意到这一痛点,新的研发方案致力于打造可以使软件通用的不同性能的产品线,这样可以使用户根据需求变化沿用系列产品,这是IBM 360的诞生契机,也是第一个里程碑式指令集的架构的出现,在后面对CPU特点的论述中,可以看到指令集正是CPU的核心所在。 当然,此时的CPU由于生产工艺与电子器件限制,仍然是巨型的机器,对于IBM 360系列部分产品的相关参数如下表所示: Model Announced[14] Memory size (in (binary) KB) Weight (lbs) Notes 30 Apr 1964 8-64[16] 1700 (770 kg)[17]:2030.1 40 Apr 1964 16-256[18] 1700-2310 (770-1050 kg) depends on memory.[17]:2040.1 50 Apr 1964 64-512[19] 4,700-7,135 (2,100-3,236 kg) depends on memory.[17]:2050.2,2050.4 Supported IBM 2361 Large Capacity Storage (LCS). 20 Nov… Continue reading CPU概论
Matlab计算传感器静态特征参数
任务 对于《传感器检测与技术》中第二章的数据计算题目,需要对系列数据进行处理,可以利用Matlab中的矩阵运算和相关函数快速实现。下面以一道例题进行分析,并最后附上最小二乘法求取拟合直线的相关代码。 题目 设有压力传感器的校准数据列于下表,试求 (1)端基拟合直线; (2)端基线性度; (3)滞环误差; (4)重复性误差(λ=3); (5)准确度。 解答 端基拟合直线 端基拟合是求取传感器线性度的拟合直线中一种,顾名思义,是直接连接输入/输出曲线两端点以得到拟合直线。 但由于题目中提供测量的多组数据,故需要取平均值: 输出: 则两端点分别为(0.0,0.0031)与(5.0,0.9995),相应得出拟合直线Y=A0+KX中的参数值: A0=0.0031 K=(0.9995-0.0031)/(5.0-0.0) 端基线性度 线性度则是通过定义公式进行求取,即实际输入/输出曲线与拟合直线的最大偏差ΔYm与满刻度输出值Yfs的比值,由于题目仅提供散点,则只需选取散点的最大偏差进行计算。 滞环误差 计算正、反行程差距最大偏差与最大输出与满刻度输出值之比 重复性误差 通过贝塞尔公式求取标准差,可以通过matlab中的std()函数实现。 准确度 将上述得到的线性度σL、滞环误差σH与重复性误差σR代入公式即可。 最小二乘法 参考资料 MATLAB中矩阵各列求和,各行求和,所有元素求和 概率统计:MATLAB计算标准差和方差 std 贝塞尔公式与标准偏差
信号处理与信号产生电路
考点分析 大题 多个类型电路组合,进行分析 最常见:RC串并联(文氏电桥)正弦振荡发生器+电压比较器(产生矩形脉冲)+积分电路(产生三角波) 电路频率 满足起振的电阻阻值 电压比较器定量画出电压传输特性 画出各输出端波形 正弦波振荡电路 振荡条件 振幅平衡:|AF|=1 相位平衡:φa+φf=±2nΠ 在RC串并联电路中满足上述条件,由选频网络中,Fmax=1/3,φf=0.负反馈回路中需要调节阻值,使A=3,在电压串联负反馈中有:1+Rf/R>3时,可以振荡,通过稳幅措施使电路达到振幅平衡条件。 典例 正弦波振荡电路 10.6.6设运放 A是理想的,试分析图题10.6.6所示正弦波振荡电路: (1)为满足振荡条件,试在图中用+、-标出运放A的同相端和反相端; (2)为能起振,Rp和R2两个电阻之和应大于何值? (3)此电路的振荡频率f。等于多少?(4)试证明稳定振荡时输出电压的峰值为 解:
反馈放大电路
考点分析 大题 提供电路图,进行分析: 标注极性 反馈类型(电流/压、串/并联、正/负反馈) 表达式:反馈系数F、闭环增益Af 交叉考题 提供反馈电阻Rf,动手连线完成题目要求,进一步完成上面的部分分析 分类 极性分析正/负反馈 原理 输入信号的增加,引起反馈信号对输入信号的作用。 方法 假设输入信号在某瞬时极性为+,逐级标注输出信号与输入信号的相位关系——点电位的瞬时极性/支路电流的瞬时流向,最后观察反馈信号,削弱输入信号是负反馈,增强输入信号是正反馈。 例 FET的源级偏置电路,当g为+时,s为+,此时Rs两端电压上升,Vgs=Vi-Vs下降,即输入信号被削弱,为负反馈。 重点 对FET、BJT的相位关系清楚,遵循规律标注即可。 输出短路法判断电流/压反馈 原理 电压反馈,则反馈信号与输出电压Vo存在比例等关系。若将输出电压Vo短路后,反馈信号仍可存在,则反推为电流反馈。 方法 将负载短路,Vo端接地,判断此时反馈信号是否存在。 反馈信号Xf是完全由输出信号Xo决定的,因此需要将Xi置零后判定Xf。 此外,可以先归纳出反馈信号的表达式,则可直观看出是电流反馈还是电压反馈。 例 最常见也最易主观将方式归类于电压反馈,细心判断下面的两个电路分别属于哪种反馈类型? 由于将负载短接后,放大电路仍然有输出电流,反馈信号也存在,即二者皆为电流反馈。 知识点:输出电流一般指放大器的输出电流 串/并联 最简单,直接观察电路中:反馈信号与输入信号采取何种方式连接?串接串联,并接并联。 综合演练 相对于分析类型的考题,自己设计的难度更大,下面是一道例题: 8.1.6由集成运放A及BJTT、T2组成的放大电路如图题8.1.6所示,试分别按下列要求将信号源vo、电阻R,正确接入该电路。 (1)引入电压串联负反馈;(2)引人电压并联负反馈;(3)引入电流串联负反馈;(4)引入电流并联负反馈。 思路:首先确定电压与电流反馈方式,电压反馈需要与输出端h相连,电流则连接g。其次确定输入端与反馈端接法,由负反馈与串/并联方式决定,容易的办法是先假设一种接法,转换成分析题,判断是否符合题意。 解: (1)a-c、b-d、h -i、j-f(2)a -d、b-c、h- i、j- f(3)a -d、b -c、g-i、j – e(4)a-c、b-d、g-i、j-e 性能影响 引入负反馈,降低了放大电路的闭环增益,但是放大电路的许多性能指标得到了改善,如: 提高了放大电路增益的稳定性 减小了反馈环内的非线性失真 抑制了反馈环内的干扰和噪声 负反馈使放大电路的通频带得到了扩展 输入/输出电阻 串联负反馈使输入电阻提高;并联负反馈使输入电阻下降 电压负反馈降低了输出电阻,电流负反馈使输出电阻增加… Continue reading 反馈放大电路
模拟集成电路
考点分析 大题:一种差分放大电路的参数分析 双端输出差模增益Avd 差模输入电阻Rid 输出电阻Ro 单端输出差模增益Avd1 共模增益Avc1 共模抑制比 掌握:镜像电流源计算 概念:模拟放大电路的一些参数(如何调整阻值以消除偏置电流) 差分放大电路 这里利用电路的对称性,设计出的差分放大电路能够有效抑制零点漂移。 关键思路为(以bjt为例): 理想恒流源的动态电阻ro趋于无穷,差模输入时由于电路对称性,源极所接动态电阻ro相当于短接,此时双入双出的增益为-βRL’/rbe;而共模输入中动态电阻ro存在,利用源极偏置电路的增益公式,可知此时增益极小。则共模抑制比在理想情况下趋于∞。 补充:关于共模增益的计算 将对称电路分解为单边,动态电阻ro视为两个2ro电阻并联公式为: -βRL’/(rbe+(β+1)2ro 疑问:为什么输出电阻为2*Rd 直流偏置技术 回忆FET与BJT放大器件在饱和/放大区的特征图像,电流是近似水平线的。因此可以利用这一特性,改进获得稳定的直流电源。 典例 当差分式放大电路两输入端电压为vi1=250mV,vi2= 150mV,则vid= mV,vic= mV。 关键点:考察vid(difference)差模输入电压与vic(common)共模输入电压的概念 解析: 差模输入电压为两个输入信号的差值,共模输入电压为两个输入电压的算术平均值,因此差模输入vid = vi1 – vi2=250-150=100mV;共模输入vic=(vi1+ vi2)/2=(250+150)/2=200mV. 在电路图示的源极耦合差分式放大电路中,VDD = VSS =5V,IO = 0.2mA,电流源输出电阻ro=100kW,Rd1 =Rd2 =Rd = 10kW,FET的Kn=1.5m,且ro >>rds >>Rd,那么T2漏极单端输出时的差模电压增益Avd2 =________,共模抑制比KCMR =________。 关键点:取出单端输出为T2漏极,则增益应为–得+值 思路:通过直流源Io得到静态工作点参数,算出gm值;代入增益计算公式分别得出差模与共模增益 解析: T2漏极单端输出时的差模电压增益Avd2 为共源极电路增益的一半,而共源极电路的增益为-gm*Rd,恒流源电流为0.2mA,因此MOSFET漏极电流为这个电流的一半,从而ID1=ID2=0.1mA,从而可以计算出管子的gm =2* (Kn*ID1)^(1/2)=0.77mS,因此共源极电路增益为:-0.77*10=-7.7,而差分电路从T2管单端输出增益为正,且增益为这个共源极电路增益的一半,也就是3.85电路的共模增益为:-gmRd/(1+gm*2ro),这里的ro表示恒流源的内阻,ro=100kΩ,可以得到共模增益为Avc=-0.0497,因此共模抑制比为:3.85/0.0497=77。 图示电路中,已知运放741的IIO=20nA,IIB=100nA,VIO=5mV,且R2=R1//Rf ,那么电路的输出直流误差电压VO =________。 关键点:Iio输入失调电流; Iib输入偏置电流;Vio输入失调电压;当它们较大且电路参数设计不合理时,可能导致输出进入饱和区而使电路无法正常工作。 思路:这里通过调整 R2= R1//Rf ,消除偏置电流IIB引起的误差,则只需计算Iib输入偏置电流与Vio输入失调电压的影响结果。 解析: VO=(1+Rf/R1)VIO+Rf*IIO=507mV 全功率带宽BWP… Continue reading 模拟集成电路