基于MATLAB的计算机视觉和图像处理代码

用于计算机视觉和图像处理的MATLAB和Octave函数

简单翻译成中文了,原文链接,访问需挂~~~


代码段索引

  • 感知均匀的颜色图
  • 感知均匀的三元图像
  • 通过相位一致性进行特征检测
  • 空间特征检测
  • 分割
  • 整体影像
  • 非最大值抑制和迟滞阈值
  • 边链接和线段拟合
  • 用于边缘检测的测试图像
  • 图像去噪
  • 曲面的法线
  • 标尺计算
  • 各向异性扩散
  • 灰度转换和增强
  • 频域变换
  • 支持投影几何的功能
  • 特征匹配
  • 模型拟合和稳健估计
  • 指纹增强
  • 有趣的合成图像
  • ASCII图像生成
  • 旋转变换
  • 地球科学和地球物理功能
  • 交互式图像融合
  • 图像显示,图像书写及其他

感知均匀的颜色图

基于MATLAB的计算机视觉和图像处理代码_第1张图片

许多广泛使用的颜色图具有可感知的平坦点,可以隐藏多达您总数据范围10%的特征。它们还可能具有局部较高的颜色对比点,导致在没有数据时会感知到数据中的错误特征。MATLAB的“热”,“喷射”和“ hsv”颜色图会遇到这些问题。请改用感知均匀的 colorcet贴图!有关这项工作及其背后理论的概述,请访问 此页面。

  • colorcet.m一个独立函数,包含我在感知上统一的颜色图的预生成数组。
    如果要从此页面仅下载一项功能,请获取此功能!

    基于MATLAB的计算机视觉和图像处理代码_第2张图片
    尝试使用colorcet(‘Gouldian’)作为高品质,感官均匀的替代品Parula。您会惊讶于它带来的变化。
    有关此地图的设计及其与Parula的比较,请参见此讨论。

色彩图的生成和校正

如果您想尝试自己制作感知一致的颜色表…

  • cmap.m彩色图生成功能。从大型的颜色表库中进行选择。色彩图由CIELAB空间中的B样条路径定义。然后调整沿路径的参数设置,以确保均匀的感知对比度。修改功能以添加所需的任何新颜色图。
  • equalisecolourmap.m 重新映射颜色图中的条目,以使整个颜色图中的感知对比度相等。由cmap.m使用。也可以用于“救援” MATLAB的某些颜色表。
  • linearrgbmap.m生成从[0 0 0]到RGB空间中指定颜色的线性颜色图。
  • ternarymaps.m返回用于生成三元图像的三个基色/基色图。色彩图的亮度紧密匹配(与RGB原色不同)。
  • randmap.m生成随机颜色的颜色图。在感知上不是统一的,并且对于显示连续范围内变化的数据当然毫无用处。但是,对于显示标记的分割图像很有用。
  • makecolorcet.m用于使用cmap.m自动生成colorcet.m函数
  • pseudogrey.m Pseudogrey规模颜色地图2551级水平。如果您希望在8位显示器上获得最佳的高动态范围灰度图像渲染,则此颜色图可能会有所帮助。

用彩色图渲染图像

  • applycolourmap.m将颜色映射应用于单通道图像以获得RGB结果。
  • showdivim.m该功能用于显示带有不同颜色映射的图像。要正确执行此操作,需要将数据中的所需参考值正确地与发散色图的中心条目相关联。
  • showangularim.m此功能显示具有指定颜色图的角度数据图像。为了正确显示角度数据,重要的是要尊重数据值,以便将数据值正确分配给循环颜色图中的特定条目。将值分配给颜色还取决于数据是在pi还是2 * pi上循环的。此功能还允许对角度信息的颜色图编码进行调制,以表示角度数据的幅度/可靠性/相干性。

三元图像

  • ternaryimage.m

    从3个数据带生成感知均匀的三元图像。

    需要

    • 三元图
    • linearrgbmap.m
    • equalisecolourmap.m
    • histtruncate.m
    • applycolourmap.m
    • 标准化

测试影像

  • sineramp.m生成由叠加在斜坡函数上的正弦波组成的测试图像。正弦波的幅度从图像顶部的全值调制为底部的0。用于评估颜色图的有用测试图像。
  • circleineramp.m生成代表sineramp.m循环版本的测试图像,以测试循环颜色图。它由叠加在螺旋斜坡函数上的正弦波组成。

色彩映射路径和色彩空间的可视化

  • colourmappath.m通过CIELAB或RGB颜色空间绘制颜色图的路径。
  • viewlabspace.m CIELAB色彩空间的交互式可视化。对于绘制样条曲线控制点的位置很有用,以便使用cmap.m定义颜色图
  • viewlabspace2.m CIELAB色彩空间的另一种交互式可视化,提供了贯穿色彩空间的垂直切片。
  • generatelabslice.m 以指定的亮度级别在CIELAB空间中生成切片的RGB图像。

读取和写入各种格式的颜色图的功能

  • writecolourmapfn.m 从Nx3色彩映射表创建MATLAB函数文件。
  • map2geosofttbl.m将RGB颜色映射写入.tbl文件,以与Geosoft Oasis Montaj或QGIS一起使用。
  • map2ermapperlutfile.m 将颜色映射表写入.lut文件,以用于ER Mapper,Intrepid或MapInfo。
  • readermapperlutfile.m 以ER Mapper的LUT格式读取颜色图。
  • map2imagejlutfile.m将颜色映射写入.lut文件以与ImageJ一起使用。
  • readimagejlutfile.m 以ImageJ的LUT格式读取颜色图。
  • map2actfile.m将颜色映射表写入Adobe Color Map Table .act文件。
  • map2qgisstyle.m将颜色映射表写入QGIS xml样式文件。

色盲模拟和可视化。

  • colourblind.m为色盲观看者模拟颜色外观。
  • colourblindlabspace.m 在Lab空间中可视化色盲色彩空间。用于支持色盲的色图设计。
  • colourblindlmsspace.m LMS空间中色盲颜色空间的可视化。

色彩空间转换。

  • rgb2lab.m RGB到L * a * b *的颜色转换。
  • rgb2cmyk.m RGB到cmyk的颜色转换。
  • cmyk2rgb.m cmyk到RGB颜色的转换。
  • rgb2lms.m RGB颜色到LMS锥体响应。
  • lms2rgb.m LMS锥体对RGB颜色的响应。
  • xyz2lms.m XYZ到LMS圆锥响应。
  • rgb2nrgb.m RGB到标准化的RGB颜色转换。

所需的其他支持功能。

  • bbspline.m基本的b样条实现,用于通过cmap.m的色彩空间生成路径
  • pbspline.m基本的周期性b样条实现,用于通过cmap.m的色彩空间生成路径
  • 还需要:show.m, normalise.m和 strendswith.m

朱莉娅密码

  • 对于使用Julia的人员,我制作了一个包含上述大多数功能的软件包: PerceptualColourMaps.jl

交互式图像融合

基于MATLAB的计算机视觉和图像处理代码_第3张图片

这些功能提供了一组用于可视化多个图像的交互式工具。一些使用它们的视频可以在这里看到 。

  • linimix.m 生成交互式图像以在一系列图像之间进行融合。
  • bilinimix.m 生成交互式图像,以在2D图像网格之间进行混合。
  • ternarymix.m用于混合3张图像的交互式三元图像。您还可以在混合和滑动模式之间切换。
    2014年12月更新,在混合功能中加入了滑动功能。也可以在彩色和灰度模式之间切换。
  • binarymix.m 类似于ternarymix,但用于2张图像。
  • cliquemix.m允许在图像集合中的任何一对之间混合或滑动。
    2014年12月更新,在混合功能中加入了滑动功能。
  • cyclemix.m允许以循环方式在图像序列之间进行融合。
  • logisticweighting.m 改编广义物流功能,用作混合图像的加权功能。
  • swipe.m当您可以在2张,3张或4张图像之间进行交互式滑动时,不要只在两个图像之间滑动!
  • collectncheckimages.m 在混合之前收集并检查图像。

以上也是功能要求: normalise.m, histtruncate.m, circle.m, circularstruct.m和 namenpath.m。

**演示包:**下载 BlendDemo.zip。其中包含以上所有功能和一些示例数据集。在MATLAB的扩展文件夹中,运行blenddemo.m。将打开一系列窗口,每个窗口都显示不同的混合界面。单击任何一个即可玩!

参考:

  • Peter Kovesi,Eun-Jung Holden和Jason Wong,2014年。“用于可视化和解释的交互式多图像融合”,计算机与地球科学72(2014)147-155。 https://doi.org/10.1016/j.cageo.2014.07.010

基于阶段的特征检测和阶段一致性

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1wf1AZI4-1610683363781)(https://www.peterkovesi.com/matlabfns/WWWImages/baboon.pc.gif)]

  • 相位一致性是特征重要性的照度和对比度不变度量。与只能检测阶跃特征的基于梯度的特征检测器不同,相位一致性可以正确检测所有相位角的特征,而不仅仅是具有0或180度相位角的阶跃特征。

  • phasecongmono.m此函数通过单基因过滤器计算相位一致性。与下面的其他阶段一致性功能相比,它具有出色的速度并大大减少了内存需求。需要 perfft2.m, filtergrid.m和 lowpassfilter.m

  • phasecong3.m

    此功能取代了phasecong2.m和phasecong.m,速度更快,所需的内存更少。除边缘外,还计算拐角特征。需要

    filtergrid.m和 lowpassfilter.m

    • 不推荐使用:phasecong.m 用于计算图像中相位一致性的原始代码。此函数还返回要素类型图像。请注意,此功能已由phasecong2.m和phasecong3.m取代,在此仅供参考。
    • 不推荐使用: phasecong2.m相结合代码,结合了边缘和角点检测,并提供了更好的定位。请注意,此功能已由phasecong3.m和phasecongmono.m取代,仅在此处提供参考。
  • dispfeat.m此功能可通过相控对图像中发现的不同特征类型进行可视化和统计。通常,您会在台阶边缘和直线之间找到所有要素类型的广泛分布。此功能需要edgelink.m(请参见下文)。

  • odot.m演示“ Odot”和“ Oslash”运算符对一维信号的作用。这些运算符允许人们以与特征感知的局部能量模型一致的方式分解和组合信号。

  • 将单个定向的Gabor滤镜应用于图像。

    相位对称图像

  • phasesym.m用于计算相位对称性的代码。可以用作行和斑点检测器。相位对称是图像中对称的光照和对比度不变量度。(明亮的圆圈并不像灰色圆圈那样“对称”,就像其他一些措施一样!)。

  • phasesymmono.m该函数通过单基因滤波器计算相位对称性。与phasesym.m相比,具有出色的速度并大大减少了内存需求。但是,您可能更喜欢phasesym面向滤波器的输出。

  • gaborconvolve.m用于用一堆log-Gabor滤波器对图像进行卷积的代码。用于纹理分析,特征检测和分类等的预处理步骤。

  • plotgaborfilters.m用于绘制对数Gabor滤波器的函数。此功能对于查看各种参数设置对上述功能中使用的log-Gabor滤波器组的形成有什么影响非常有用。

  • monofilt.m Felsberg单基因过滤器的实现。此功能将一堆单基因过滤器应用于图像,以在多个尺度上获得2D分析信号。与gaborconvolve一样,它可以用作纹理分析,特征检测和分类等的预处理步骤。

  • highpassmonogenic.m 应用highpass滤波器,并通过单基因滤波器计算相位和幅度。需要perfft2.m

  • filtergrid.m生成用于构建频域滤波器的网格。由以上某些功能使用。

  • 上面函数中使用log-Gabor滤波器进行卷积实现的说明。

参考文献:

  • 彼得·科维西(Peter Kovesi), “局部相位的对称性和不对称性”。AI’97,第十届澳大利亚人工智能联合会议。1997年12月2日至4日。会议记录-海报。185-190页。
  • 彼得·科维西(Peter Kovesi), “相位一致性的图像特征”。 Videre:《计算机视觉研究杂志》。麻省理工学院出版社。第1卷第3期,1999年夏季。
    电子出版,即使有信誉良好的出版商,也可能会出现问题。由于某种原因,麻省理工学院出版社选择不再保留Videre的存档。幸运的是,可以在罗彻斯特大学(www.cs.rochester.edu/u/brown/Videre)上找到该期刊的档案 。
  • 彼得·科维西(Peter Kovesi),“边缘不仅仅是步伐”。ACCV2002会议记录,第五届亚洲计算机视觉会议,墨尔本,2002年1月22日至25日。第822-827页。 (预印本)
  • 彼得·科维西(Peter Kovesi),“相一致检测角落和边缘”。 澳大利亚模式识别学会会议:数字图像计算:技术和应用DICTA2003。2003年 12月,悉尼。309-318页。 (预印本)
  • 彼得·科维西(Peter Kovesi), “来自相位信息的图像特征的不变量度”,西澳大利亚大学博士学位论文。1996年。

空间特征检测

  • canny.m Canny边缘检测器。
  • harris.m哈里斯拐角探测器。
  • noble.m来宝的角落探测器。
  • shi_tomasi.m Shi-Tomasi拐角检测器返回结构张量的最小特征值。这代表了Harris和Noble探测器试图逼近的理想状态。
  • hessianfeatures.m粗麻布 特征检测器。
  • fastradial.m Loy和Zelinski的快速径向特征检测器的实现。
  • gaussfilt.m包装函数,用于方便的高斯过滤。
  • 导数 5.m使用Farid和Simoncelli给出的5抽头系数计算图像的一阶和二阶导数。使用此函数代替MATLAB的GRADIENT函数可获得更准确的结果。
  • derivative7.m 使用由法里德和西蒙切利给出的7抽头系数单位计算衍生物。
  • filterregionproperties.m根据 区域的属性值过滤区域。允许您选择指定大小或主轴方向范围内的斑点

参考:

  • 我的哈里斯和斯蒂芬斯(Harris and Stephens)论文“组合的角和边缘检测器”的复印件的扫描图像。

分割

  • slic.m Achanta等人的SLIC Superpixels的实现。
  • spdbscan.m使用DBSCAN算法对超像素进行聚类。
  • regionadjacency.m 计算标记区域图像的邻接矩阵,该矩阵可能由超像素或图割算法生成。
  • cleanupregions.m 清除分割图像中的小区域。(慢一点,使用下面的mcleanupregions.m)
  • mcleanupregions.m 分割图像中小区域的形态学清理。(需要 circlestruct.m)
  • finddisconnected.m 查找未标记区域的分组。由mcleanupregions.m使用以减少执行时间。
  • makeregionsdistinct.m 确保标记的区域不同。
  • renumberregions.m重 标记标签图像中的区域,使其范围为1:maxRegions。
  • drawregionboundaries.m 绘制图像中标记区域的边界。
  • maskimage.m将遮罩应用于图像。
  • dbscan.m DBSCAN集群的基本实现
  • testdbscan.m测试/演示dbscan.m的功能
  • 该示例 说明了如何使用上述功能通过SLIC超像素和DBSCAN集群执行基本分割。

整体影像

  • integerimage.m计算图像的整数图像。
  • integralfilter.m 进行使用积分图像滤波。
  • intfilttranspose.m 转置完整的图像滤镜规范。
  • integaverage.m 使用积分图像执行平均滤波。计算成本与平均滤波器大小无关。
  • integgaussfilt.m 此函数通过重复应用integaverag.m来近似高斯滤波。这允许以非常低的计算成本进行平滑,而该计算成本与高斯大小无关。
  • resolveinteg.m integgausfilt.m使用 此函数来求解近似于所需标准偏差的高斯所需的多个平均滤波器宽度。

参考:

  • 快速几乎高斯滤波 澳大利亚模式识别协会会议:DICTA2010。2010年12月。悉尼。
    本文介绍了如何通过积分图像获得高速近似高斯滤波。没有使用像SURF特征检测器那样的粗盒滤波器来近似高斯及其派生的计算依据。

非最大值抑制和迟滞阈值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kpe6IsaF-1610683363784)(https://www.peterkovesi.com/matlabfns/WWWImages/baboon.pc.edge.gif)]

  • nonmaxsup.m用于对边缘图像执行非最大值抑制的代码。
  • nonmaxsuppts.m用于对特征/拐角检测器生成的点执行非最大抑制和阈值处理的代码。它可以选择返回亚像素特征位置。(2016年1月更新)
  • subpix2d.m 2D图像中的子像素位置。
  • subpix3d.m 3D体积或2D +比例空间数据中的子像素位置。
  • hysthresh.m代码,用于执行磁滞阈值处理。
  • featureorient.m 之前非最大抑制计算方位的特征图像上在没有定向信息可从特征检测过程的情况。
  • smoothorient.m 将平滑应用于方向字段,这在应用非最大抑制之前可能会很有用。
  • 自适应 阈值是Wellner自适应阈值方法的实现。

边链接和线段拟合

  • edgelink.m 边缘链接功能,可从二进制边缘图像中形成已连接边缘点的列表。需要下面的findendsjunctions。
  • fillgegaps.m填充二进制边缘图图像中的小间隙。在边缘链接之前应用可能很有用。需要findisolatedpixels.m和findendsjunctions.m
  • drawedgelist.m 绘制出由edgelink或lineeg生成的一组边缘列表。
  • edgelist2image.m 将边列表数据传输回2D图像数组。
  • lineseg.m形成直线段,该直线段对连接的边点列表具有指定的公差。
  • lineseg.m还使用maxlinedev.m来计算边列表与拟合线段的偏差。
  • findendsjunctions.m 查找线/边图像中的线结和结束点。
  • findisolatedpixels.m 查找图像中的孤立像素。
  • cleanedgelist.m清除由edgelink或lineeg生成的一组边缘列表,以便删除短于最小长度的孤立边缘和杂散。此代码存在一些问题,可能会占用大量内存。
  • 上面使用这些功能的示例。

测试光栅以进行边缘检测

  • step2line.m 生成测试图像,其中要素类型从阶梯边缘到线要素从上到下变化,同时保持完美的相位一致性。该测试图像表明相位一致的重要性,而与在一个点以及直到一个点出现一致的角度无关,而与振幅谱随频率衰减的速率无关。基于梯度的边缘检测器对所有在零以外的角度(朝向测试图像的底部)具有相位一致的特征产生双重响应。相位一致性检测器以单个响应标记特征。颜色编码的图像是由dispfeat.m生成的
  • circsine.m 生成由圆形正弦波光栅组成的测试图像。也可以用于构造圆相位全等模式。
  • starsine.m 生成一个测试图像,该图像由从中心放射出的正弦波光栅之类的恒星组成。与circsine一样,此功能可用于构造类似恒星的全相位模式。

图像去噪

基于MATLAB的计算机视觉和图像处理代码_第4张图片 基于MATLAB的计算机视觉和图像处理代码_第5张图片

  • noisecomp.m

    用于对图像进行降噪的代码。该代码与标准小波去噪技术的不同之处在于,它使用非正交小波,并且与现有技术不同,它可以确保将相位信息保留在图像中。相位信息对于人类的视觉感知至关重要。而且,此代码

    确实

    具有自动确定阈值级别的有效方法。

    有关使用此功能的示例,请参见下面的示例,位于灰度转换和增强下。

参考:

  • 彼得·科维西(Peter Kovesi), “相位保持图像的去噪”。 *澳大利亚模式识别协会会议:DICTA’99。*1999年12月。华盛顿州珀斯。212-217页。

对于使用Julia的人员,ImagePhaseCongruency.jl 实现了上面的大多数功能。

曲面的法线

  • shapeletsurf.m

    函数通过将表面法线与一堆Shapelet基函数的表面法线相关联,从其表面法线重建表面估计。对相关结果求和以产生重构。Shapelet基函数的总和会在强制执行曲面连续性的同时导致曲面的隐式积分。

    请注意,重构仅在比例因子(可以对其进行校正)下才有效。但是,重建过程对于噪声和丢失的数据值非常健壮。如果倾斜值存在pi的歧义,则可以进行重构(最大为正/负形状歧义)。仅倾斜数据或仅倾斜数据也可能导致低质量的重建。但是,如果您具有完整的梯度信息,那么使用下面的Frankot Chellappa算法更好。

  • frankotchellappa.m Frankot和Chellappa算法的一种实现,用于根据梯度信息构造可积曲面。如果您在x和y中具有完整的梯度信息,则可能是最好的算法。它非常简单,非常快速并且对噪声具有很高的鲁棒性。如果您具有倾斜和倾斜形式的表面法线信息,并且倾斜数据中的pi不明确,或者只有倾斜,请尝试使用上述shapeltsurf.m。

  • grad2slanttilt.m 将曲面上的渐变值转换为倾斜角和倾斜角。

  • slanttilt2grad.m 将曲面上的倾斜角和倾斜角转换为渐变。

  • needleplotgrad.m 给定表面上的表面梯度,生成针刺图。

  • needleplotst.m根据表面上的倾斜和倾斜值生成针状图。

  • testp.m生成合成测试表面及其表面法线,以测试shapeletsurf。

参考:

  • 彼得·科维西(Peter Kovesi), “与曲面法线相关的小孔会产生曲面”。 第10届IEEE计算机视觉国际会议。北京。994-1001。2005年
  • PowerPoint幻灯片
  • 从非常少的表面法线信息可以得到多少3D形状 的示例。

标尺计算

基于MATLAB的计算机视觉和图像处理代码_第6张图片

  • scalogram.m 用于计算一维信号的相位和幅度比例图的函数。使用对数Gabor小波正交对进行分析。

各向异性扩散

img [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QSdIvexQ-1610683363790)(https://www.peterkovesi.com/matlabfns/WWWImages/Mona_diffuses.jpg)]

  • anisodiff.m函数,用于根据Perona和Malik算法对图像进行各向异性扩散。此过程可以平滑区域,同时在尖锐的强度梯度下保留并增强对比度。

灰度转换和增强

  • extractfields.m 从视频帧中分离出场,并可选地插入中间行。

  • interpfields.m 在从视频帧提取的场上插入线。

  • normalise.m将图像值重新缩放为0-1。

  • adjcontrast.m 使用S型函数调整图像对比度。

  • adjgamma.m调整图像伽玛。

  • greytrans.m允许您通过由一系列样条点定义的映射功能以交互方式重新映射彩色或灰度图像中的强度值。试图复制xv的强度贴图工具。它不是那么快,但是可以在浮点图像上运行,从而可以更好地保持图像保真度。(需要remapim.m)。

  • remapim.m是greytrans的非交互式版本,它允许您使用通过greytrans实验确定的映射功能将强度映射应用于彩色或灰度图像。如果要对图像序列应用相同的映射功能,则很有用。

  • histtruncate.m会 截断图像直方图的末端。有助于增强图像的边缘值。

  • histeqfloat.m

    该函数与经典直方图均衡函数的不同之处在于,将累积直方图视为

    函数,

    而不是将输入灰度值映射到其输出值的查找表。在这种方法下,对于包含浮点值的图像,输出图像中不同值的数量将与输入中不同值的数量相同。这可以产生很大的不同。

  • 使用上述某些功能增强视频监控图像的示例。但是,您应该注意,许多监视系统在法律上几乎是盲目的。看到

  • Kovesi,P.视频监视:合法盲点? 《数字图像计算:技术与应用》,2009年。DICTA '09。pp.204-211。
    IEEE出版。doi.org/10.1109/DICTA.2009.41
    (预印本)


频域变换

  • perfft2.m对Moisan的“周期加平滑图像分解”的周期分量进行2D傅立叶变换。我认为这将成为图像的默认fft函数。
  • lowpassfilter.m构造低通巴特沃斯滤波器。
  • highpassfilter.m构造高通巴特沃斯滤波器。
  • highboostfilter.m构造高升压巴特沃斯滤波器。
  • bandpassfilter.m构造带通Butterworth滤波器。
  • homomorphic.m 对图像执行同态过滤。我最喜欢的图像增强技术之一。(需要histtruncate.m和normalise.m)
  • psf.m生成各种点扩展函数。手动指定维纳滤波的点扩展函数或使用解卷积函数(例如Richardson-Lucy算法)时,此函数很有用(请参见MATLAB Image Processing Toolbox函数deconvlucy.m)。
  • psf2.m与psf相同,只是指定功能形状的方式不同,这对于某些应用程序可能更方便。
  • imspect.m绘制在所有方向上平均的图像振幅谱。
  • freqcomp.m 从其傅立叶分量演示了图像重建。
  • filtergrid.m 生成用于构建频域滤波器的网格。由以上某些功能使用。

支持投影几何的功能

  • homography1d.m 计算沿着一条线的3个或更多点的2x2 1D单应性。

  • homography2d.m 计算平面中4个或更多点的3x3 2D单应性。该代码遵循Hartley和Zisserman给出的归一化直接线性变换算法。

  • fundmatrix.m 使用归一化的8点算法从立体图像对中的8个或更多匹配点计算基本矩阵。

  • affinefundmatrix.m从一对立体图像中的4个或更多匹配点计算仿射基本矩阵。

  • fundfromcameras.m在给定两个相机投影矩阵的情况下计算基本矩阵。

  • decomposecamera.m将相机投影矩阵分解为内部参数和外部参数。

  • rq3.m 3 x 3矩阵的RQ分解。

  • skew.m从3向量构造3x3倾斜对称矩阵。

  • normalise2dpts.m转换并规范化一组2D齐次点,以便它们的质心位于原点,并且它们与原点的平均距离为sqrt(2)。这用于改善用于求解单应性,基本矩阵等的任何方程式的条件。

  • hnormalise.m对齐 均坐标数组进行归一化,以便其比例参数为1。无穷大的点不变。

  • makehomogeneous.m将N x npts个非均质点数组转换为标度为1的均质点。

  • makeinhomogeneous.m 将N x npts个齐次点数组标准化为1,然后返回不齐次坐标。

  • ray2raydist.m计算两条3D射线之间的最短距离。

  • imTrans.m将均匀变换应用于图像。调整输出图像的原点和大小以包含转换后的图像。(请注意,我在发布带有功能IMTRANSFORM的图像处理工具箱的第3版之前编写了此代码。使用MATLAB的IMTRANSFORM可能会更好。)

  • imTransD.m将均匀变换应用于图像。没有将原点平移应用于转换后的图像。我使用此功能注册图像等。

  • digiplane.m允许您数字化和变换图像中平面区域内的点。

  • equalAngleConstraint.m给定两个相等角度的仿射变换约束。

  • knownAngleConstraint.m给定已知角度的仿射变换约束。

  • lengthRatioConstraint给定长度比的仿射变换约束。

  • circleintersect.m查找两个圆的交点。使用此函数可解决仿射变换约束。

  • hcross.m同质叉积,结果归一化为s = 1。

  • hline.m绘制在齐次坐标中定义的2D线。

  • 点/线的homoTrans 2D均匀变换。

  • plotPoint.m用指定的标记和可选的文本标签绘制点。

  • cameraproject.m将3D世界点投影到摄像机图像中。

  • Idealimagepts.m计算如果相机没有镜头畸变将获得的图像位置。

  • imagept2plane.m将 图像点投影到一个平面并返回其3D位置。

  • resolvestereopt.m在两个或更多图像中,根据给定点的3D坐标来求解该点的3D位置。

  • undistortimage.m给定径向镜头畸变系数,从图像中消除镜头畸变。

  • camstruct.m构造一个包含相机参数的结构。这些参数包括镜头畸变参数和图像尺寸。

  • camstruct2projmatrix.m 将摄影机结构转换为3x4投影矩阵,而忽略了镜头失真参数。

  • plotcamera.m

    给定摄像机结构,在3个空间中绘制摄像机的表示。

  • 如果您在上面使用这些函数,则应查看Andrew Zisserman的 用于多视图几何 的MATLAB函数。
    此外,您还必须 收听Daniel Wedge撰写的The Fundamental Matrix Song。


特征匹配

  • matchbycorrelation.m通过在每个点周围的窗口内寻找彼此最大相关的点,在两个图像中的先前检测到的特征点之间生成推定匹配。仅返回在两个方向上彼此最相关的点。这是一个简单的N 2比较。
  • matchbymonogenicphase.m与matchbycorrelation类似,但是匹配定向的相位值而不是灰度值。相对于归一化的灰度相关,此匹配器的性能相当好。通常,找到的推定匹配项更多,而离群值则更少。在预滤波阶段会有较大的计算成本,但由于每个像素仅用3位有效编码,因此匹配阶段可能会快得多。(尽管在此实现中未实现该潜在速度)。请参阅 下面的testfund以查看使用此功能的示例。

模型拟合和稳健估计

  • ransac.m是RANSAC算法的通用实现。
  • ransacfithomography.m 将单应性牢固地拟合到一组假定匹配的图像点上。
  • ransacfitfundmatrix.m将基本矩阵稳固地拟合到一组假定匹配的图像点上。此函数使用8点基本矩阵解决方案。
  • ransacfitfundmatrix7.m将基本矩阵牢固地拟合到一组假定匹配的图像点上。该函数需要Andrew Zisserman的7点基本矩阵代码,该代码可从以下网站获得: MATLAB多视图几何函数
  • ransacfitaffinefund.m将仿射基本矩阵稳固地拟合到一组假定匹配的图像点上。
  • ransacfitplane.m可以 使平面牢固地适合3D数据点。
  • ransacfitline.m 将线牢固地拟合到3D数据点。
  • iscolinear.m测试ransacfitplane和ransacfithomography是否使用3点共线。
  • fitline。线与2D数据点的最小二乘拟合。
  • fitline3d。线与3D数据点的最小二乘拟合。由Felix Duvallet贡献。
  • fitplane。平面到3D数据点的最小二乘拟合。
  • 使用ransacfitplane.m的testfitplane示例
  • 使用ransacfitline.m的testfitline示例
  • 使用ransacfitfundmatrix.m的testfund示例
  • 使用ransacfithoography.m的testhomog示例
  • randomsample一个基本替代randsample与使用ransac.m 你不应该有MATLAB的统计工具箱,或者使用倍频。
  • 上面使用这些函数查找基本矩阵的示例。

参考文献:

  • 收听Daniel Wedge的RANSAC歌曲。
  • 您还应该查看他的2.71828183:The Number e Song

指纹增强

基于MATLAB的计算机视觉和图像处理代码_第7张图片 基于MATLAB的计算机视觉和图像处理代码_第8张图片

  • ridgesegment.m识别指纹图像的类似山脊的区域。它还可以标准化图像的强度值。
  • ridgeorient.m估计指纹中脊的局部方向。
  • plotridgeorient.m绘制由ridgeorient计算得出的山脊方向。
  • ridgefreq.m估计指纹图像上的局部脊线频率。
  • freqest.m估计图像一小块内的脊线频率。ridgefreq使用它。
  • ridgefilter.m使用定向滤镜增强指纹图像。
  • 上面使用这些功能的示例。

地球科学和地球物理功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WCRsnIe8-1610683363792)(https://www.peterkovesi.com/matlabfns/WWWImages/dem_shading.png)] 基于MATLAB的计算机视觉和图像处理代码_第9张图片

  • ppdrc.m相位保持动态范围压缩。基于频率的色调映射算法,适用于科学的非摄影图像。尝试使用此功能代替直方图均衡。在航空资料方面非常好。需要 highpassmonogenic.m
    对于那些在工作朱莉娅包 ImagePhaseCongruency.jl 提供这一功能的实现。
  • irelief.m用于数据集的交互式浮雕着色的函数。需要 applycolourmap.m
  • relief.m上面的功能的非交互式版本。
  • uppercontinue.m 生成磁场或重力势场数据的向上连续。
  • freqderiv.m 通过频域计算的水平和垂直导数。
  • vertderivativeintegral.m势场数据的垂直导数或积分。
  • 倾斜生成.m生成势场数据的倾斜导数。
  • analyticsignal.m 潜在现场数据的分析信号。
  • agc.m该函数实现Rajagopalan的自动增益控制算法。最初的应用程序是用于显示地球科学的垂直磁梯度数据的,但对于任何种类的高动态范围图像都可以使用。
  • terrace.m该函数为潜在的现场数据实现了Cordell和McCafferty的梯形算法的修改版本。它的关键属性是无论应用多少次迭代,输出都保持稳定。
  • orientationfilter.m 生成图像的方向选择性过滤。用于突出显示数据中具有主导方向的结构。
  • dealias.m 过滤图像,以尝试从任何网格化过程中消除锯齿现象。
  • wavenumbergrid.m 生成用于频域滤波的波数网格。
  • removetrend.m将多项式趋势面拟合到网格并将其删除。

参考:

  • 彼得·科维西(Peter Kovesi),“非摄影高动态范围图像的相位保留色调映射”。会议记录:澳大利亚模式识别学会会议:数字图像计算:技术和应用DICTA2012。 (预印本)

有趣的合成图像和测试图像

基于MATLAB的计算机视觉和图像处理代码_第10张图片

  • noiseonf.m会生成具有指定幅度谱的噪声图像。可以通过这种方式创建令人愉悦的云模式图像。
  • cloud9.m创建具有指定幅度谱的噪声图像的影片序列。很放松
  • chirpexp.m创建指数线性调频测试图像。线性调频脉冲的幅度从图像顶部的1调制到底部的0。我已使用此测试图像评估了不同颜色图和颜色图各部分在变化的空间频率和对比度下的有效性。
  • chirplin.m与chirpexp.m类似,但具有线性线性调频信号。
  • sineramp.m生成由叠加在斜坡函数上的正弦波组成的测试图像。正弦波的幅度从图像顶部的全值调制为底部的0。一个有用的测试图像,用于突出显示颜色图中的问题。
  • circleineramp.m 生成代表sineramp.m循环版本的测试图像,以测试循环颜色图。它由叠加在螺旋斜坡函数上的正弦波组成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWaj2fyV-1610683363794)(https://www.peterkovesi.com/matlabfns/WWWImages/derespk.gif)]

  • derespolar.m生成极坐标中的分解图像。
  • polartrans.m生成图像的极坐标变换。可以指定线性或对数半径转换。
  • Quantizephase.m 生成图像,在该图像中将相位值量化为所需的级别数。图像中的相位值很重要。然而,尽管如此,它们仍可以在不造成较大视觉损失的情况下进行大量量化。

ASCII图像生成

img

  • matscii.m用于从灰度图像生成ASCII图像的函数。有点复古的乐趣,但是这些天来恒定宽度的字体变得越来越难…

齐次变换

  • plotframe.m绘制由齐次变换指定的坐标系。
  • trans.m均质翻译矩阵。
  • rotx.m均质矩阵,用于绕x轴旋转。
  • roty.m绕y轴旋转的齐次矩阵。
  • rotz.m均质矩阵,用于绕z轴旋转。
  • homotrans.m 的点/线齐次变换
  • invht.m齐次变换矩阵的优化逆
  • 给定齐次变换,inveuler.m求解欧拉角。
  • invrpy.m给出均质变换,以解决侧倾角,俯仰角和偏航角。
  • dhtrans.m在给出关节角度,长度,关节偏移和扭曲的链接参数的情况下,计算4x4均匀Denavit Hartenberg矩阵。

四元数

  • newquaternion.m从指定的角度和轴构造四元数。
  • matrix2quaternion.m 将4x4均匀旋转矩阵转换为四元数
  • quaternion2matrix.m 将四元数转换为4x4齐次转换矩阵。
  • quaternionrotate.m 使用四元数旋转向量。
  • quaternionproduct.m 计算四元数乘积。
  • quaternionconjugate.m 计算四元数共轭。
  • vector2quaternion.m 在四元数中嵌入3-vector。

角轴描述符

  • newangleaxis.m 从指定角度和轴构造角度轴描述符。
  • matrix2angleaxis.m 将齐次旋转矩阵转换为角度轴描述
  • angleaxis2matrix.m 将角度轴描述符转换为4x4均匀变换矩阵。
  • angleaxisrotate.m 使用角度轴描述符旋转矢量
  • normaliseangleaxis.m 归一化角度轴描述符,以使角度的最大大小为pi。

图像显示,图像书写及其他

  • findimage.m显示一个文件对话框,使您可以交互式地查找和加载图像。当您忘记图像的名称或不必打扰输入时,此功能很有用。
  • findimages.m允许您选择和加载多个图像。这些以单元格数组形式返回。
  • show.m此功能方便地显示具有正确大小,颜色,范围和标题的图像。图形窗口的大小与图像匹配,不留边框,节省了桌面空间。图像尽可能显示为“ TrueSize”,即屏幕上的像素与图像中的像素匹配。
  • showangularim.m此功能显示具有指定颜色图的角度数据图像。为了正确显示角度数据,重要的是要尊重数据值,以便将数据值正确分配给循环颜色图中的特定条目。将值分配给颜色还取决于数据是在pi还是2 * pi上循环的。此功能还允许对角度信息的颜色图编码进行调制,以表示角度数据的幅度/可靠性/相干性。
  • showdivim.m该功能用于显示带有不同颜色映射的图像。要正确执行此操作,需要将数据中的所需参考值正确地与发散色图的中心条目相关联。
  • orientationplot.m使用抖动的定向线可视化定向图像。定向的线段以抖动的网格图案绘制在整个图像上。使用随机抖动的栅格位置而不是规则的栅格可确保栅格图案不会干扰您对方向的感知。这显着改善了定向模式的感知。
  • showfft.m显示fft的幅度谱。
  • showlogfft.m显示fft的对数振幅谱。
  • showsurf.m此函数包装了我通常用于显示表面的命令。使用带有插值底纹的SURFL,“ copper”颜色贴图,启用rotate3d和设置轴vis3d的方式显示表面。
  • togglefigs.m提供了一种方便的方式来切换多个图形的显示。方便比较图像和绘图。图像的轴已链接,因此在所有图像上平移和缩放都同步。
  • syncshow.m使用链接的轴显示多个图像以进行平移和缩放,或链接一组现有图形,以使平移和缩放同步。
  • imwritesc.m此功能将图像缩放和写入功能合并为一个功能。如果图像类型为双倍,则图像值将重新缩放到0-1范围内,以便在写入8位强度值时不会发生溢出。MATLAB会根据文件结尾确定要使用的图像格式。如果图像类型为uint8,则不执行重新缩放。
  • imwritefloattiff.m该函数利用MATLAB的LibTIFF库例程网关Tiff提供基本的浮点图像写入功能。(MATLAB的imwrite()似乎只能写入整数值的tiff图像。)
  • matprint.m此函数使用指定的C样式格式字符串打印出矩阵。通常您会发现MATLAB的默认数字格式不是您想要的…
  • digipts.m用于数字化图像中的点的功能。此功能使用GINPUT提供的十字光标。我发现它比IMPIXEL使用的游标更有用。此外,每个数字化的位置都标有红色的“ +”。
  • impad在过滤之前填充图像的边界。提供各种填充选项。
  • 修剪图像的边界(取消填充)
  • imsetborder将图像的边框像素设置为指定值。
  • removenan用指定的默认值替换矩阵中的NaN值。当您要防止NaN污染和破坏阵列上的某些操作(例如FFT)时,此功能很有用。
  • fillnan用最接近的非Nan像素中的值替换矩阵中的NaN值。
  • implace.m用于将图像放置在较大图像中指定位置的功能。
  • cuberoots.m计算三次方的实根。
  • weightedhistc.m基本等效于MATLAB的加权数据的HISTC函数。
  • geoseries.m用于生成几何序列的便捷函数。
  • circle.m画一个圆。
  • Circularstruct.m生成用于形态学运算的圆形结构元素。您可以改用MATLAB的strel(‘disk’,R,0)。但是,有时候我喜欢能够通过使用半径的浮点值来调整形状。
  • pointinconvexpoly.m确定2D点是否在凸多边形内。
  • rectintersect.m确定两个矩形是否相交。
  • polyfit2d.m使2D多项式曲面适合数据。基本的2D等效于MATLAB的1D polyfit。合并一些归一化以减少数值问题。
  • polyval2d.m评估由polyfit2d.m生成的2D多项式曲面
  • logcolournormalization.m 对彩色图像执行色度,灰色或全面的颜色标准化。
  • svddemo.m演示2x2转换矩阵的SVD和特征值。

几何形状

  • icosahedron.m 生成二十面体的顶点,邻接图和面列表。
  • geodome.m生成测地线球体的顶点,邻接图和面列表。除了看起来凉爽之外,测地线球的顶点或面心对于定义3D方向直方图的bin中心很有用。
  • gplot3d.m是MATLAB gplot函数的3D版本。
  • drawfaces.m绘制由一组顶点和相应的面顶点列表定义的三角形面。
  • superquad.m生成超二次元的参数曲面。
  • supertorus.m生成超级托梁的参数化曲面。

字符串处理便利功能

  • strstartswith.m测试字符串是否以指定的子字符串开头。
  • strendswith.m测试字符串是否以指定的子字符串结尾。
  • namenpath.m从可能包含目录路径的完整文件名返回文件名及其路径
  • basename.m会删除以文件名结尾的后缀。
  • pathlist.m沿目录路径生成目录的单元格数组

你可能感兴趣的:(matlab,计算机视觉,图像处理)