精华内容
下载资源
问答
  • FPGA的图像处理算法
    千次阅读
    2019-02-25 15:07:47

    下面简要分析了 FPGA 技术,包括 FPGA 技术原理和技术特点等,随后介绍一下FPGA 的图像处理系统算法的实现,包括存储模块、运算单元、控制模块以及数据传输模块等内容。

    智能机器人、多媒体已经计算机的诞生都离不开数字图象处理技术,随着计算机智能化图像处理技术的不断发展,几乎所有领域当中都有数字图象技术的身影。例如军事、公共安全、工业、航天航空、卫星遥感以及生命科学等各种领域。因此对图象处理技术的要求也逐渐提高,需要数字图象设计朝着高效性和时效性的方向发展,FPGA技术下的图像处理系统算法越来越受到重视。

    1、FPGA技术原理

    FPGA通常包括两个部分,分别是储存编程数据的软件SRAM和三项可编程电路,这三种可编程电路分别是互连资源、输入模块、输出模块和可编程逻辑模块。FPGA中主要部分就是可编程逻辑模块,这一模块能够落实逻辑功能,同时还可以参考设计要求,灵活选择设置或是连接,从而实现各种逻辑功能。而输送模块则是芯片与外部环境进行连接的主要通道,能够促进内部逻辑阵列和器件引脚的连接,同时实现各种电气特征下的输送功能要求。芯片四周通常会排列IOB。

    2、FPGA技术特点

    FPGA既包含ASIC中的高度可靠性、高集成度和大规模等优势,同时还包括ASIC设计中灵活性差、投资大、设计时间长等问题,
    除了上述优势外,FPGA还包括下面几项优点,首先是FPGA能够反复进行擦除和编程。在外部电路保持不变的状态下,通过设计不同逻辑可以完成各种电路功能。其次是投资较小,同时设计比较灵活,在发现问题后可以对设计直接进行更改,从而降低了投片风险程度。

    3、FPGA的图象处理系统算法的实现

    图像算法处理系统中的存储模块能够将提前准备好的图象数据进行存储,运算单元负责各项计算任务,促进实现各种图像处理算法,只需要将其中的数值进行更换即可。控制模块负责图像算法处理系统中的各种控制工作,辅助图像算法实施,并进行传输。

    3.1、存储模块

    随着FPGA技术的不断发展,从前众多优秀设计人员留下了大量数字系统成果。为了让其中部分成果能够有效应用于Altera特定设
    备结构中,并进行有效应用,Altera企业根据Altera设备中的结构特征在上述成果的基础上进行了有效的优化,从而形成一种LPM
    函数和可参数化模块,为此设计人员需要参考相应的设计要求,通过硬件或是图形将语言模块中功能板块恰当地表述出来,并设置好一定的参数,尽量贴近系统要求。在这种设计模式下,能够提升设计效率和可靠性。

    3.2、运算单元

    运算单元的工作其实就是输出数据信息、落实数字图像算法和读取ROM数字图象中的灰度信息。当一个是三乘三中值邻域滤波器模板对目标图象进行作用时,首先应该了解这一滤波器中的九个数据信息,随后才能更好地使用中值滤波算法,而ROM中所储存的灰度数据主要可以在Verilog HDL的编程下,将其中的具体数值解读出来,同时FPGA技术下的编程工作中是不存在二维数组理念的,为此主要是通过移位寄存器RAM来储存IP核的,并落实邻域图象处理操作,实现各种数字图像处理算法。在一个全面的系统设计当中,例如设计DSP应用系统,需要通过数据缓冲移位寄存器,以移位寄存器RAM为基础的IP核就是一种高效的处理措施。以移位寄存器RAM为基础的IP核属于一种参数化的移位寄存器,同时TAPS值在一定程度上也影响了系统中移位寄存器在一时间点中的输出数据总路数,这种IP核十分适用于有限冲击响应滤波器和线性反馈寄存器。对于以移位寄存器RAM为基础的IP
    核想要发挥出应有的作用,就应该先为IP核进行适当的参数设置,主要包括所有TAP的对应数据深度、TAP输出路数、shiftout端
    口宽度、shiftin数据宽度、RAM模块类型等。

    3.3、控制模块

    控制模块在整个系统中是一种核心部件,可以辅助系统的运行,同时融入到整个系统内部。主要负责工作包括辅助运算单元在
    ROM中准确读取数据信息,操作运算单元落实图像处理算法,帮助运算单元和数据传输子系统进行信息流通等。

    3.4、数据传输模块

    数据传输模块其中包含两部分内容,分别是串口通信模块和FIFO传输模块。将图像处理子系统中的时钟设置成五十毫赫兹,将串口通信模块设置成九千六百赫兹波特率。为此可以通过异步FIFO促进图像通信模块和子系统串口之间的跨时钟数据传播,联系。为了让图像算法子系统和上位机PC之间的通信过程更加便捷,通常都是通过通信串口进行数据信息交流。

    通过FPGA技术进行图象处理,能够拥有更多的使用优势,比如成本较低、方便落实以及适用范围较广等特点。同时还拥有实时性、集成化、小型化等特点。随着我国微电子技术的发展,图象处理逐渐应用于图象通信以及多媒体等各个领域,而FPGA技术
    可以有效促进硬件对实时图象的有效处理,以FPGA技术为基础的图象处理研究也将成为未来信息领域发展的热点。

     

     

     

     

    更多相关内容
  • C#数字图像处理算法典型实例(包含源码)pdf 包含源码
  • 经典常用的图像处理算法,及其C实现,每个文件夹下都包含其相应源代码和处理前后的图片
  • 一文概括常用图像处理算法

    千次阅读 2021-12-10 18:58:26
    本文总结了11种常用的图像处理算法,包含了预处理算法以及检测算法,并介绍了一些常用的开发库。 一、算法(预处理算法、检测算法)在采集完图像后,首先会对图像进行预处理操作。1、图像变换(空域与频域、几何变换...

    本文总结了11种常用的图像处理算法,包含了预处理算法以及检测算法,并介绍了一些常用的开发库。

    一、算法(预处理算法、检测算法)

    在采集完图像后,首先会对图像进行预处理操作。保证图像的对比度清晰,水平。方便后续图像处理。

    常用的图像处理算法:

    1、图像变换

    (空域与频域、几何变换、色度变换、尺度变换)

    • 几何变换:图像平移、旋转、镜像、转置;

    • 尺度变换:图像缩放、插值算法(最近邻插值、线性插值、双三次插值);

    • 空间域与频域间变换:由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,有时候需要将空间域变换到频域进行处理。例如:傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为频域处理,不仅可减少计算量,而且可获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理)。

    2、图像增强

    图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。如强化图像高频分量,可使图像中物体轮廓清晰,细节明显;如强化低频分量可减少图像中噪声影响。

    • 灰度变换增强(线性灰度变换、分段线性灰度变换、非线性灰度变换);

    • 直方图增强(直方图统计、直方图均衡化);

    • 图像平滑/降噪(邻域平均法、加权平均法、中值滤波、非线性均值滤波、高斯滤波、双边滤波);

    • 图像(边缘)锐化:梯度锐化,Roberts算子、Laplace算子、Sobel算子等;

    3、纹理分析(取骨架、连通性) 

    4、图像分割

    图像分割是将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。

    (1)阈值分割(固定阈值分割、最优/OTSU阈值分割、自适应阈值分割);

    (2)基于边界分割(Canny边缘检测、轮廓提取、边界跟踪);

    (3)Hough变换(直线检测、圆检测);

    (4)基于区域分割(区域生长、区域归并与分裂、聚类分割);

    (5)色彩分割;

    (6)分水岭分割;

    5、图像特征

    (1)几何特征(位置与方向、周长、面积、长轴与短轴、距离(欧式距离、街区距离、棋盘距离));

    (2)形状特征(几何形态分析(Blob分析):矩形度、圆形度、不变矩、偏心率、多边形描述、曲线描述);

    (3)幅值特征(矩、投影);

    (4)直方图特征(统计特征):均值、方差、能量、熵、L1范数、L2范数等;直方图特征方法计算简单、具有平移和旋转不变性、对颜色像素的精确空间分布不敏感等,在表面检测、缺陷识别有不少应用。

    (5)颜色特征(颜色直方图、颜色矩)

    (6)局部二值模式( LBP)特征:LBP对诸如光照变化等造成的图像灰度变化具有较强的鲁棒性,在表面缺陷检测、指纹识别、光学字符识别、人脸识别及车牌识别等领域有所应用。由于LBP 计算简单,也可以用于实时检测。

    6、图像/模板匹配

    轮廓匹配、归一化积相关灰度匹配、不变矩匹配、最小均方误差匹配

    7、色彩分析

    色度、色密度、光谱、颜色直方图、自动白平衡

    8、图像数据编码压缩和传输

    图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。

    9、表面缺陷目标识别算法

    传统方法:贝叶斯分类、K最近邻(KNN)、人工神经网络(ANN)、支持向量机(SVM)、K-means等;

    10、图像分类(识别)

    图像分类(识别)属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,从而进行判决分类。

    11、图像复原

    图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立“降质模型”,再采用某种滤波方法,恢复或重建原来的图像。

    二、现有的视觉检测软件/库

    1、做工业视觉检测的公司有哪些?

    比较出名的有:大恒图像(亚洲Halcon最大代理商)、凌云光技术(VisionPro视觉平台:印刷、3C电子、显示屏、玻璃、线路板检测)、大族激光(振静系统:视觉激光焊接,定视觉位、缺陷检测)、康耐视、基恩士、深圳精锐视觉、深圳市视觉龙科技有限公司、广州超音速、深圳市创科自动化等等。

    可二次开发的视觉系统:Labview、DVT、Halcon、OpenCV等。

    2、常用的视觉检测软件/库

    视觉开发软件工具 Halcon、VisionPro、LabView、OpenCV, 还有eVision、Mil、Sapera等。

    (一)Halcon

    底层功能算法多,运算性能快,功能齐全,容易上手,开发项目周期短。非开源项目,商用收费,价格较贵。

    Halcon:Halcon是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛的机器视觉集成开发环境。它是一套image processing library,由一千多个各自独立的函数,以及底层的数据管理核心构成。其中包含了各类滤波,色彩以及几何,数学转换,型态学计算分析,校正,分类辨识,形状搜寻等等基本的几何以及影像计算功能。整个函数库可以用C,C++,C#,Visual basic和Delphi等多种普通编程语言访问。Halcon为大量的图像获取设备提供接口,保证了硬件的独立性。

    (二)OpenCV

    功能算法相对较多(比Halcon少),开源,可用于商用,开发周期较长(比Halcon长),有些算法要自己写。

    OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。其核心轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它的主要接口也是C++语言。该库也有大量的Python, Java and MATLAB/OCTAVE的接口,如今也提供对于C#, Ruby的支持。OpenCV可以在 Windows, Android, Maemo, FreeBSD, OpenBSD, iOS,Linux 和Mac OS等平台上运行。

    OpenCV出身:OpenCV是Intel开源计算机视觉库。其核心由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 的特点拥有包括300多个C函数的跨平台的中、高层 API 跨平台:Windows, Linux;免费(FREE):无论对非商业应用和商业应用;速度快;使用方便。

    OpenCV具有以下的特征:

    (1)开源计算机视觉采用C/C++编写。

    (2)使用目的是开发实时应用程序。

    (3)独立与操作系统、硬件和图形管理器。

    (4)具有通用的图象/视频载入、保存和获取模块。

    (5)具有底层和高层的应用开发包。

    应用OpenCV能够实现以下功能:

    (1)对图象数据的操作,包括分配、释放、复制和转换数据。

    (2)对图象和视频的输入输出,指文件和摄像头作为输入,图象和视频文件作为输出。

    (3)具有对距陈和向量的操作以及线性代数的算法程序,包括距阵、解方程、特征值以及奇异值。

    (4)可对各种动态数据结构,如列表、队列、集合、树和图等进行操作。

    (5)具有基本的数字图象处理能力,如可进行滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图和图象金字塔等操作。

    (6)可对各种结构进行分析,包括连接部件分析、轮廓处理、距离变换、各种距的计算、模板匹配、Hongh变换、多边形逼近、直线拟合、椭圆拟合和Delaunay三角划分等。

    (7)对摄像头的定标,包括发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计和立体对应。

    (8)对运动的分析,如对光流、运动分割和跟踪的分析。

    (9)对目标的识别,可采用特征法和隐马尔科夫模型(HMM)法。

    (10)具有基本的GUI功能,包括图像与视频显示、键盘和鼠标事件处理及滚动条等。

    (11)可对图像进行标注,如对线、二次曲线和多边形进行标注,还可以书写文字(目前之支持中文)。

    (三)VisionPro

    VisionPro是美国康耐视Cognex公司提供全套视觉解决方案。VisionPro提供多种开发工具拖放式界面、简单指令码和编程方式等,全面支持所有模式的开发。用户利用VisionPro QuickBuild™可以无需编程配置读取、选择并优化视觉工具,决定产品是否合格。用户也可以利用C++、C#、VB及.NET开发管理应用程序。Vision Pro提供的.NET程序接口允许用户采用面向对象的高级语言编程访问所有工具,以高效开发客户的专用视觉方案。

    (四)LabView

    LabView是一种程序开发环境,由美国国 家仪器(NI)公司研制开发,使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。LabView软件是NI设计平台的核心,也是开发测量或控制系统的理想选择。LabView开发环境集成了工程师和科学家快速构建各种应用所需的所有工具,旨在帮助工程师和科学家解决问题、提高生产力和不断创新。

    三、HSV颜色识别-HSV基本颜色分量范围

    一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。

    H:  0 — 180
    S:  0 — 255
    V:  0 — 255

    HSV(色度/饱和度/亮度)颜色空间是表示类似于RGB颜色模型的颜色空间的模型。根据色度通道(Channel)对颜色类型进行建模,因此在需要根据颜色对对象进行分割的图像处理任务中非常有用。饱和度的变化代表颜色成分的多少。亮度通道描述颜色的亮度。

     转载博文

    一文概括常用图像处理算法以及常用开发库

    展开全文
  • 图像平滑、图像增强、图像分割、图像二值化、图像画图工具如圆、直线、像素值趋势线等
  • 用c实现了图像最基本的处理算法,通俗易懂,简单齐全
  • 一些基本数字图像处理算法

    千次阅读 2018-12-12 17:03:01
    一些基本数字图像处理算法 所有的图像算法都在DIPAlgorithm类中,并且所有算法都为抽象成员函数。我已经按照java注释规范为所有方法添加使用说明注释,具体实现可见于DIPAlgorithm.java,这里只做算法说明。 1 图像...

    一些基本数字图像处理算法

    版权声明:本文为原创文章,未经博主允许不得用于商业用途。

    所有的图像算法都在DIPAlgorithm类中,并且所有算法都为抽象成员函数。我已经按照java注释规范为所有方法添加使用说明注释,具体实现可见于DIPAlgorithm.java,这里只做算法说明。

    1 图像扭曲

    在这里插入图片描述
    模仿PS的扭曲功能,通过建立一个三角形映射网格实现对图像的扭曲。

    如上图,一共设置了45个控制点围成74个三角形网格

    扭曲即形变处理其实是寻找一个函数,以所有网格顶点原始坐标为输入,扭曲后所有网格顶点坐标为输出。为了简化计算任务,采用控制栅格插值方法,对每个三角网格独立计算映射关系,如下图:

    在这里插入图片描述
    即求解矩阵 M M M满足 M A = B MA = B MA=B,其中 A A A为原顶点的齐次矩阵:

    A = [ x 1 y 1 1 x 2 y 2 1 x 3 y 3 1 ] A = \begin{bmatrix} x_{1} & y_{1} & 1 \\ x_{2} & y_{2} & 1 \\ x_{3} & y_{3} & 1 \\ \end{bmatrix} A=x1x2x3y1y2y3111

    B为形变后顶点的其次矩阵:

    B = [ x 1 ′ x 2 ′ x 3 ′ y 1 ′ y 2 ′ y 3 ′ ] B = \lbrack\begin{matrix} x_{1}^{'} & x_{2}^{'} & x_{3}^{'} \\ y_{1}^{'} & y_{2}^{'} & y_{3}^{'} \\ \end{matrix}\rbrack B=[x1y1x2y2x3y3]

    M即为 2 × 3 2 \times 3 2×3的映射矩阵,且由于三角形三点不共线,因此A为可逆阵,

    M = B A − 1 M = BA^{- 1} M=BA1

    对于三角形中的点 p ( x ,   y ) p\left( x,\ y \right) p(x, y),其映射后坐标 p ′ = M [ x y 1 ] p^{'} = M\begin{bmatrix} x \\ y \\ 1 \\ \end{bmatrix} p=Mxy1

    2 直方图计算

    直方图计算实际上即求图像的概率密度函数PDF,只需遍历一次所有像素点即可获得。

    3 直方图均衡化算法

    对于连续图像直方图均衡化其实是种点运算f,
    对不同灰度值做映射,使得所有像素频率相等。

    对于点运算f,有如下性质:

    D B = f ( D A ) ,   H B ( D B ) Δ D B = H A ( D A ) Δ D A D_{B} = f\left( D_{A} \right),\ H_{B}\left( D_{B} \right)\Delta D_{B} = H_{A}\left( D_{A} \right)\Delta D_{A} DB=f(DA), HB(DB)ΔDB=HA(DA)ΔDA

    其中D为灰度值,H即为灰度值在图像中的频数,整理可得

    H B ( D B ) = H A ( D A ) Δ D A Δ D B = H A ( D A ) Δ D B Δ D A = H A ( D A ) d D B d D A H_{B}\left( D_{B} \right) = \frac{H_{A}\left( D_{A} \right)\Delta D_{A}}{\Delta D_{B}} = \frac{H_{A}\left( D_{A} \right)}{\frac{\Delta D_{B}}{\Delta D_{A}}} = \frac{H_{A}\left( D_{A} \right)}{\frac{dD_{B}}{dD_{A}}} HB(DB)=ΔDBHA(DA)ΔDA=ΔDAΔDBHA(DA)=dDAdDBHA(DA)

    = H A ( D A ) f ′ ( D A ) = H A ( f − 1 ( D B ) ) f ′ ( f − 1 ( D B ) ) = \frac{H_{A}\left( D_{A} \right)}{f'(D_{A})} = \frac{H_{A}\left( f^{- 1}\left( D_{B} \right) \right)}{f'(f^{- 1}(D_{B}))} =f(DA)HA(DA)=f(f1(DB))HA(f1(DB))

    即:

    寻找函数f使得 H B ( D ) H_{B}(D) HB(D)为常数 A 0 D m , A 0 , D m \frac{A_{0}}{D_{m}},A_{0},D_{m} DmA0,A0,Dm

    由(1)可知,KaTeX parse error: Undefined control sequence: \ at position 58: …\right)}{f'(D)}\̲ ̲\Rightarrow f^{…

    f ( D ) = D m C D F ( D ) f\left( D \right) = D_{m}CDF(D) f(D)=DmCDF(D),CDF即累积分布函数

    因此只需求得直方图的前序和即可获得映射关系。

    4 图像灰度化

    目前比较符合人眼的灰度化权重为0.299、0.578和0.114,为了加速计算使用近似公式 D = ( 3 r + g + 6 b ) / 10 D = (3r + g + 6b)/10 D=(3r+g+6b)/10

    5 图像二值化

    我使用的二值化算法为OSTU大律二值化算法。二值化操作即利用分割阈值u,将图片分为前景后景两部分。OSTU大律法认为使得前景像素和背景像素灰度方差g最大的阈值即为最佳分割阈值。

    g = w 0 w 1 ( u 0 − u 1 ) 2 g = w_{0}w_{1}\left( u_{0} - u_{1} \right)^{2} g=w0w1(u0u1)2

    其中 w 0 ,   w 1 w_{0},\ w_{1} w0, w1为前景、后景在图像中的比例,KaTeX parse error: Undefined control sequence: \ at position 7: u_{0},\̲ ̲u_{1}为前景、后景的平均灰度。

    在实现时,只需遍历所有灰度,利用CDF求出每种灰度的方差,取最大者作为阈值即可。

    6 前景分离

    目前主流的前景分离为深度学习算法。这里只使用了最基本的阈值分离法,分别为RGB三个通道设置不同阈值,将小于阈值的像素作为背景,大于阈值的作为前景。

    7 滤波

    我使用的滤波方法是高斯滤波和中值滤波,高斯滤波即使用二维高斯函数作为滤波函数,中值滤波即使用邻域的中位数作为滤波函数。

    高斯滤波器为线性滤波器,可以有效消除高斯噪声。由于高斯函数离中值越近权重越大,因此相对于均值滤波器更加柔和,对边缘的保留效果更好。这里我使用的是如下矩阵做卷积:

    [ 1 2 3 2 1 2 4 6 4 2 3 6 7 6 3 2 4 6 4 2 1 2 3 2 1 ] \begin{bmatrix} 1 & 2 & 3 & 2 & 1 \\ 2 & 4 & 6 & 4 & 2 \\ 3 & 6 & 7 & 6 & 3 \\ 2 & 4 & 6 & 4 & 2 \\ 1 & 2 & 3 & 2 & 1 \\ \end{bmatrix} 1232124642367632464212321

    中值滤波器为非线性滤波器,可以有效的去除椒盐噪声和斑点噪声并且不会使图像变模糊。

    8 形态学扩张和腐蚀

    形态学腐蚀可记为 AΘB \text{AΘB} AΘB,其中A为输入图像,B为结构单元。对于二值图像,当且仅当当前像素点满足腐结构单元时才会被保留。对于灰度图像,则可类比为最小值,即

    f Θ b ( x , y ) = m i n { f ( x − x ′ ,   y − y ′ ) − b ( x ′ , y ′ ) ∣ ( x ′ , y ′ ∈ D b ) } f\Theta b\left( x,y \right) = min\{ f\left( x - x^{'},\ y - y^{'} \right) - b(x^{'},y')|(x^{'},y^{'} \in D_{b})\} fΘb(x,y)=min{f(xx, yy)b(x,y)(x,yDb)}

    形态学扩张可看作腐蚀的逆操作,记作 A ⨁ B A\bigoplus B AB,对于二值图像,将每个有效像素点的邻域结构单元置1,对于灰度图像则取最大值,即

    f ⨁ b ( x , y ) = m a x { f ( x − x ′ ,   y − y ′ ) − b ( x ′ , y ′ ) ∣ ( x ′ , y ′ ∈ D b ) } f\bigoplus b\left( x,y \right) = max\{ f\left( x - x^{'},\ y - y^{'} \right) - b(x^{'},y')|(x^{'},y^{'} \in D_{b})\} fb(x,y)=max{f(xx, yy)b(x,y)(x,yDb)}

    本程序将结构单元b统一设定为5*5矩形。

    通过扩张和腐蚀的结合可实现结构开运算( A o B = ( AΘB ) ⨁ B AoB = \left( \text{AΘB} \right)\bigoplus B AoB=(AΘB)B)和结构闭运算( A o B = ( A ⨁ B ) ΘB AoB = \left( A\bigoplus B \right)\text{ΘB} AoB=(AB)ΘB)对图像进行粗化、细化、滤波等处理

    9 傅里叶变换和滤波

    变换公式

    傅里叶变换可以将信号从时域转换到频域,因此可以看出许多时域中不明显的特征。二维傅里叶变换(CFT)公式如下:

    F ( u , v ) = ∬ f ( x , y ) e − 2 π j → ( u x + v y ) dxdy F\left( u,v \right) = \iint_{}^{}{f\left( x,y \right)e^{- 2\pi\overrightarrow{j}(ux + vy)}}\text{dxdy} F(u,v)=f(x,y)e2πj (ux+vy)dxdy

    其中 j → 2 = − 1 , f , F {\overrightarrow{j}}^{2} = - 1,f,F j 2=1,f,F,同样二维傅里叶逆变换公式如下:

    f ( x , y ) = ∬ F ( u , v ) e 2 π j → ( u x + v y ) dudv f\left( x,y \right) = \iint_{}^{}{F\left( u,v \right)e^{2\pi\overrightarrow{j}(ux + vy)}}\text{dudv} f(x,y)=F(u,v)e2πj (ux+vy)dudv

    对于离散函数,可以定义离散二维傅里叶变换(DFT)和逆变换:

    G ( m , n ) = 1 MN ∑ 0 ≤   i   ≤   M − 1 0 < k < N − 1   g ( i , k ) e − 2 π j → ( im M + jn N ) G\left( m,n \right) = \frac{1}{\sqrt{\text{MN}}}\sum_{\begin{matrix} 0 \leq \ i\ \leq \ M - 1 \\ 0 < k < N - 1\ \\ \end{matrix}}^{}{g\left( i,k \right)e^{- 2\pi\overrightarrow{j}(\frac{\text{im}}{M} + \frac{\text{jn}}{N})}} G(m,n)=MN 10 i  M10<k<N1 g(i,k)e2πj (Mim+Njn)

    g ( i , k ) = 1 MN ∑ 0 ≤   m   ≤   M − 1 0 < n < N − 1   g ( m , n ) e 2 π j → ( im M + jn N ) g\left( i,k \right) = \frac{1}{\sqrt{\text{MN}}}\sum_{\begin{matrix} 0 \leq \ m\ \leq \ M - 1 \\ 0 < n < N - 1\ \\ \end{matrix}}^{}{g\left( m,n \right)e^{2\pi\overrightarrow{j}(\frac{\text{im}}{M} + \frac{\text{jn}}{N})}} g(i,k)=MN 10 m  M10<n<N1 g(m,n)e2πj (Mim+Njn)

    DFT可以理解为对连续二维信号进行了频率为M,
    N的采样,之后通过计算其和频域空间M*N个基向量的相关性(在该方向投影)将时域信号映射到频域。iDFT可以理解为通过M*N个基向量合成原始时域信号。

    矩阵表示

    傅里叶变换实际上是一种线性变换,因此在实际计算中常常将 g g g扩充为 N ∗ N N*N NN方阵,此时DFT可以通过矩阵表示: G = W − 1 g W , W ik = 1 N e 2 π j → ik N G = \mathcal{W}^{- 1}g\mathcal{W},\mathcal{W}_{\text{ik}} = \frac{1}{N}e^{2\pi\overrightarrow{j}\frac{\text{ik}}{N}} G=W1gW,Wik=N1e2πj Nik

    易知 W ik = W ki \mathcal{W}_{\text{ik}} = \mathcal{W}_{\text{ki}} Wik=Wki,且为正交矩阵,因此 W \mathcal{W} W为酉矩阵,即 W − 1 = ( W ∗ ) T = W ∗ \mathcal{W}^{- 1} = \left( \mathcal{W}^{*} \right)^{T} = \mathcal{W}^{*} W1=(W)T=W G = W ∗ g W G = \mathcal{W}^{*}g\mathcal{W} G=WgW,其中 F ∗ F F^{*}F FF

    由于傅里叶变换为酉变换,即 W t = W − 1 \mathcal{W}^{t} = \mathcal{W}^{- 1} Wt=W1

    图像的傅里叶变换

    对于二维图片可以看作二维矩阵,因此可以进行DFT。二维图片经过DFT后获得的复矩阵的模矩阵可以表示每个频率信号的强度(也可看作先做自相关后再进行傅里叶变换),经过适当处理即可转化为灰度能量谱图片。

    线性噪声在频域中通常为点或线,因此可以通过傅里叶变换后进行滤波再通过逆变换复原图片。

    算法实现

    在实际实现时,根据欧拉公式, e − j → t = c o s t − j → sint ,   e j → t = c o s t + j → sint e^{- \overrightarrow{j}t} = cost - \overrightarrow{j}\text{sint},\ e^{\overrightarrow{j}t} = cost + \overrightarrow{j}\text{sint} ej t=costj sint, ej t=cost+j sint,因此傅里叶变换的核矩阵可以表示为 W ik = cos ⁡ ( 2 π i k ) − j → sin ⁡ ( 2 π i k ) N \mathcal{W}_{\text{ik}} = \frac{\cos\left( 2\pi ik \right) - \overrightarrow{j}\sin\left( 2\pi ik \right)}{N} Wik=Ncos(2πik)j sin(2πik),为方便运算将 W \mathcal{W} W分解为虚部系数 W lm \mathcal{W}_{\text{lm}} Wlm和实部系数 W re \mathcal{W}_{\text{re}} Wre,其中则 W = W re + j → W lm \mathcal{W} = \mathcal{W}_{\text{re}} + \overrightarrow{j}\mathcal{W}_{\text{lm}} W=Wre+j Wlm。变换结果同样分解为 G = G re + j → G lm G = G_{\text{re}} + \overrightarrow{j}G_{\text{lm}} G=Gre+j Glm,则DFT可以表示为:

    G = W ∗ g W = ( W re − j → W lm ) g ( W re + j → W lm ) = W re g W re + W lm g W lm − j → ( W lm g W re + W re g W lm ) G = \mathcal{W}^{*}g\mathcal{W =}\left( \mathcal{W}_{\text{re}} - \overrightarrow{j}\mathcal{W}_{\text{lm}} \right)g\left( \mathcal{W}_{\text{re}} + \overrightarrow{j}\mathcal{W}_{\text{lm}} \right) = \mathcal{W}_{\text{re}}g\mathcal{W}_{\text{re}} + \mathcal{W}_{\text{lm}}g\mathcal{W}_{\text{lm}} - \overrightarrow{j}\left( \mathcal{W}_{\text{lm}}g\mathcal{W}_{\text{re}} + \mathcal{W}_{\text{re}}g\mathcal{W}_{\text{lm}} \right) G=WgW=(Wrej Wlm)g(Wre+j Wlm)=WregWre+WlmgWlmj (WlmgWre+WregWlm)

    { G re = W re g W re + W lm g W lm G lm = − W lm g W re − W re g W lm   \left\{ \begin{matrix} G_{\text{re}} = \mathcal{W}_{\text{re}}g\mathcal{W}_{\text{re}} + \mathcal{W}_{\text{lm}}g\mathcal{W}_{\text{lm}} \\ G_{\text{lm}} = - \mathcal{W}_{\text{lm}}g\mathcal{W}_{\text{re}} - \mathcal{W}_{\text{re}}g\mathcal{W}_{\text{lm}} \\ \end{matrix} \right.\ {Gre=WregWre+WlmgWlmGlm=WlmgWreWregWlm 

    同理,iDFT可以表示为:

    g = ( W re + j → W lm ) ( G re + j → G lm ) ( W re − j → W lm ) g = \left( \mathcal{W}_{\text{re}} + \overrightarrow{j}\mathcal{W}_{\text{lm}} \right)(G_{\text{re}} + {\overrightarrow{j}G}_{\text{lm}})\left( \mathcal{W}_{\text{re}} - \overrightarrow{j}\mathcal{W}_{\text{lm}} \right) g=(Wre+j Wlm)(Gre+j Glm)(Wrej Wlm)

    其中,为了将能量谱转化为可见的灰度图,为能量谱取对数值进行归一化。且由于在频域中两个维度频率都为0时(即 W 00 \mathcal{W}_{00} W00处)为图像能量的总和,因此通过 l o g ( e + 1 ) ∗ 256 log ⁡ ( W 00 + 1 ) log(e + 1)*\frac{256}{\log\left( \mathcal{W}_{00} + 1 \right)} log(e+1)log(W00+1)256可以做进一步归一化。

    算法代码可见github

    展开全文
  • 图像处理算法-高斯模糊

    千次阅读 2020-10-27 00:07:52
    通常,图像处理软件会提供"模糊"(blur)滤镜,使图片产生模糊的效果。 例如: “模糊"的算法有很多种,其中有一种叫做"高斯模糊"(Gaussian Blur)。它将正态分布(又名"高斯分布”)用于图像处理。 本文介绍"高斯...

    一、高斯模糊简介

    通常,图像处理软件会提供"模糊"(blur)滤镜,使图片产生模糊的效果。
    例如:
    在这里插入图片描述

    “模糊"的算法有很多种,其中有一种叫做"高斯模糊”(Gaussian Blur)。它将正态分布(又名"高斯分布")用于图像处理。

    本文介绍"高斯模糊"的算法,你会看到这是一个非常简单易懂的算法。本质上,它是一种数据平滑技术(data smoothing),适用于多个场合,图像处理恰好提供了一个直观的应用实例。

    二、高斯模糊的原理

    所谓"模糊",可以理解成每一个像素都取周边像素的平均值。
    在这里插入图片描述
    如上图中,2是中间点,周边点都是1。
    在这里插入图片描述

    通过高斯模糊原理,“中间点"取"周围点"的平均值,就会变成1。在数值上,这是一种"平滑化”。在图形上,就相当于产生"模糊"效果,"中间点"失去细节

    在这里插入图片描述
    上面分别是原图、模糊半径3像素、模糊半径10像素的效果。模糊半径越大,图像就越模糊。从数值角度看,就是数值越平滑。

    接下来的问题就是,既然每个点都要取周边像素的平均值,那么应该如何分配权重呢?

    如果使用简单平均,显然不是很合理,因为图像都是连续的,越靠近的点关系越密切,越远离的点关系越疏远。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。

    三、正态分布的权重

    正态分布显然是一种可取的权重分配模式。
    在这里插入图片描述

    在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小

    计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。

    四、高斯函数

    上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布。
    在这里插入图片描述
    正态分布的密度函数叫做"高斯函数"(Gaussian function)。它的一维形式是:

    在这里插入图片描述
    其中,μ是x的均值,σ是x的方差。因为计算平均值的时候,中心点就是原点,所以μ等于0。

    在这里插入图片描述
    根据一维高斯函数,可以推导得到二维高斯函数:

    在这里插入图片描述
    有了这个函数 ,就可以计算每个点的权重了。(一开始自己一直在纠结这个σ的取值问题,其实后面有案例,这个不需要纠结QAQ)

    自己推导出了一个简单点的公式:(如有错误还望指出并体谅)

    代码贴上

    local x,y=0,0--其中还有个值得新手注意的是,在计算权重是的9个坐标时的原点永远是在第5个方格
    local Sigma=1.5--因为lua定义σ和π报错,所以用了其他的代替
    local e=2.718281828459
    local pai=3.1415926
    local G=e^(-(x^2-y^2)/2*Sigma^2)/(2*pai*Sigma^2)--这个得出来的就是最初的权重,坐标(0,0)的权重
    

    五、权重矩阵

    1)权重矩阵的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。

    2)权重矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。

    3)如果权重矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。

    4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。

    假定中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:
    在这里插入图片描述
    更远的点以此类推。

    为了计算权重矩阵,需要设定σ的值。假定σ=1.5,则模糊半径为1的权重矩阵如下:
    在这里插入图片描述
    这9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须上面说了,其实不一定,只是为了不改变图片亮度,所以让其等于1) 让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵。
    在这里插入图片描述

    五、计算高斯模糊

    有了权重矩阵,就可以计算高斯模糊的值了。

    假设现有9个像素点,灰度值(0-255)如下:
    在这里插入图片描述
    每个点乘以自己的权重值:
    在这里插入图片描述
    得到
    在这里插入图片描述
    将这9个值加起来,就是中心点的高斯模糊的值。

    对所有点重复这个过程,就得到了高斯模糊后的图像。如果原图是彩色图片,可以对RGB三个通道分别做高斯模糊。

    六、边界点的处理

    如果一个点处于边界,周边没有足够的点,怎么办?

    一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。

    七、参考文章

    如有违章,请联系删除,谢谢大家~

    展开全文
  • C/C++图像处理算法(一)

    万次阅读 2018-08-26 14:27:40
    图像处理算法1总结如下: //添加椒盐噪声 void salt(Mat&amp; src,int number) { for (int i = 0; i &lt; number; i++) { int r = static_cast&lt;int&gt;(rng.uniform(0, src.rows)); int ...
  • 手背静脉识别的图像处理算法

    千次阅读 多人点赞 2020-04-04 11:48:34
    手背静脉识别的图像处理算法 题目内容及要求 手背静脉识别技术作为一种全新的特征识别技术,相比于传统的生物识别技术(如指纹识别)具有许多明显的优势,然而对于该技术的研究尚处于刚刚起步阶段,使用计算机来直接...
  •  常见的图像处理算法,包括增强、分割、复原、形态学处理等;   熟悉常见的模式识别算法,特别是基于图像的模式识别算法,掌握特征提取、特征统计和分类器设计;  4、熟练使用OpenCV、Matlab、Halcon中的一种...
  • 传统图像处理算法总结

    千次阅读 2019-09-01 11:44:22
    1. 图像滤波 目的:保证图像细节特征的条件下抑制图像噪声。 1.1 线性滤波 1.11 方框滤波 原图像与内核的系数加权求和 方框滤波的核: normalize = true 时,方框滤波就变成了均值滤波。也就是说,...
  • 常用图像处理算法()

    万次阅读 2018-10-04 22:38:10
    图像处理基本算法操作从处理对象的多少可以有如下划分: 一)点运算:处理点单元信息的运算 二)群运算:处理群单元 (若干个相邻点的集合)的运算    表1 图像处理操作按处理对象数量分类表格 操作类型...
  • 图像处理算法其实都很简单

    万次阅读 多人点赞 2018-05-03 16:07:12
     线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵(有个高大上的名字叫卷积核)和一个要处理的二维图像。然后,对于图像...
  • 主要涉及图形处理,包括形态学、图像质量、相机成像之3A算法、去雾处理、颜色空间转换、滤镜等,主要在安防公司或者机器视觉领域,包括缺陷检测; 二、现代图像算法工程师: 涉及模式识别,主要表现的经验为Adaboost...
  • 水下图像处理算法Sea-thru

    千次阅读 2020-10-10 21:33:52
    水下图像处理算法Sea-thru,出自CVPR 2019,被称之为将彻底改变水下计算机视觉的“革命性工具”。 代码开源 https://github.com/jgibson2/sea-thru (非官方) 还没发现预训练模型地址
  • 图像处理算法分类

    千次阅读 2019-02-25 13:31:45
    算法分类 下面来分类下各个分支,有些分支有些二义性,因为其可以属于不同的父节点,所以学习过程中会有交叉部分。 形态学 增强 滤波 滤波分为空域滤波和频域滤波两类: 空域: 频域: 复原 分割...
  • 图像处理算法 面试题

    万次阅读 2018-09-03 16:56:10
    其主要用于边缘检测,在技术上它是以离散型的差分算子,用来运算图像亮度函数的梯度的近似值, Sobel算子是典型的基于一阶导数的边缘检测算子,由于该算子中引入了类似局部平均的运算,因此对噪声具有平滑作用,能很...
  • 图像处理算法论文

    千次阅读 2018-01-11 19:03:30
    1、Enhancing Underwater Images and Videos by Fusion,这是一篇通过融合技术来增强图像的文章,虽然不是很复杂,但是文章的思路应该能广泛应用,这也是我今年重点研究何实现的文章之一。  下载: ...
  • AI图像处理算法岗位整理

    千次阅读 2022-01-28 12:24:04
    工作职责: 负责开发Webex音视频媒体引擎,在windows,mac,ios,android,linux等平台上开发多媒体编解码,图像处理算法。 负责算法的逻辑,性能调优,汇编优化,或者GPU算法实现。对算法的设计,实现,调试,优化...
  • 常见医学图像处理算法

    千次阅读 2018-01-24 18:57:06
    1,binary dilation,用来去除一些灰度值...2,Otsu’s method,用来对图像进行二值化,可以用来区分前景和背景。利用opencv 代码如下: cv2.threshold(gray_image, 0, 255, cv2.THRESH_OTSU) 3,flood fill algorithm
  • 图像处理算法工程师——必备技能

    千次阅读 2021-07-21 09:52:23
    主要涉及图形处理,包括形态学、图像质量、相机成像之3A算法、去雾处理、颜色空间转换、滤镜等,主要在安防公司或者机器视觉领域,包括缺陷检测; 二、现代图像算法工程师: 涉及模式识别,主要表现的经验为Adaboost...
  • visual C++实现数字图像处理算法程序源码 适合于 数字图像处理 课程 使用,里面含有图像处理基本上所有的算法。 还有一个整合算法的完整的程序可以使用,叫作业的时候直接处理就可以了 例如 图像增强 图像分割与边缘...
  • 图像处理算法工程师

    万次阅读 2015-03-13 22:42:54
    整理了一下网上各个公司图像处理算法工程师的招聘要求:  图像处理算法工程师 职位要求 编程技能: 1、 具有较强的编程能力和良好的编程习惯, 精通c/c++编程,并熟练使用VS 或matlab开发环境; 2、 在计算机...
  • 图像处理算法总结之目标检测(1)

    千次阅读 2021-12-01 20:50:48
    目标检测是目前图像处理算法中的一个热门话题。特别是最近几年随着深度学习的发展,我们可以看到不管是工业界还是学术界,目标检测在准确度和实时性方面都取得了长足的进步。由于篇幅原因,本文只介绍传统的目标检测...
  • 嵌入式图像处理算法优化

    千次阅读 2017-08-26 16:04:11
    嵌入式图像处理算法优化指南,适用于任何基于ARM或PC平台的视觉应用程序开发 转载2015-08-05 15:09:15 标签:目标识别与跟踪视觉定位与目标识别视觉算法研究与验证视频图像处理开发板it 第一章 绪论 ...
  • 图像处理基本算法操作从处理对象的多少可以有如下划分: 一)点运算:处理点单元信息的运算 二)群运算:处理群单元 (若干个相邻点的集合)的运算  表1 图像处理操作按处理对象数量分类表格 操作类型 ...
  • 基于C++的图像处理算法实现、INTEL CPU上SSE加速、ARM CPU上NEON加速 基于C++的图像处理算法在INTEL CPU上SSE加速实现 基于C++的图像处理算法在ARM CPU上NEON加速实现 资源下载地址:下载地址 1.常用图像处理...
  • C#数字图像处理算法典型实例(赵春江 编著) 第一章 绪论 第二章 C#数字图像处理的3种方法 第三章 点运算及直方图 第四章 几何运算 第五章 数学形态学图像处理 第六章 频率变换 第七章 图像平滑与去燥 第八章 边缘...
  • 图像处理算法之模糊检测

    千次阅读 2021-12-16 14:42:57
    这里的假设是,如果一幅图像的方差较高,那么就说明图像有广泛的响应,包括类边和非类边,这是一幅正常的聚焦图像的代表。但如果方差很低,那么就会有很小的响应扩散,这表明图像中几乎没有边缘。而图像越模糊,边缘...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 343,140
精华内容 137,256
关键字:

图像处理算法

友情链接: FlipClock-master.zip