傅里叶变换

  1. 快速傅里叶正逆变换的两对算子:

    1. fft_image和fft_image_inv:分别是把图像变换到傅里叶频谱图和把傅里叶频谱图变换为图像
    2. fft_generic(Image, ImageFFT, Direction, Exponent, Norm, Mode, ResultType)
      这个算子通过不同的Direction来做正逆变换。Direction:to_freq,Exponent:-1;Direction:from_freq,Exponent:1
  2. gen_lowpass(ImageLowpass, Frequency, Norm, Mode, Width, Height)
    生成一个低通滤波器,截至频率在0-1之间可选,长宽应当与需要做滤波的图像长宽一致,这个低通滤波器应当作用于频率域,可以用来消除周期噪声。
    这里的mode应当与原图像做fft变换时的mode一致。
    截止频率越小,对噪声的消除作用越好,但是图像会越模糊。截止频率代表了滤波后图像中心椭圆区域的大小,看图:
    图像分别是原图和使用0.1和使用0.5截止频率滤波的图像及傅里叶频谱图

  3. gen_highpass(ImageHighpass, Frequency, Norm, Mode, Width, Height)
    构造一个高通滤波器,参数和低通滤波器相似,用高通滤波器做频率域滤波后,只有中心的亮区域被过滤掉了,剩下的是周围的区域,从频谱图上看,正好与低通滤波器相反。
    高通滤波器用来锐化图像,不能做噪声过滤。

  4. binomial_filter(Image, ImageBinomial, MaskWidth, MaskHeight)
    使用二项式滤波光滑处理图像。需要注意的点在于halcon中已经定义好的filter往往可以直接作用在图像上,而不能作用在频谱图上(像素类型为complex)。

一个频率域滤波消除噪声的例子,使用两种方法:

  1. 直接使用一个低通滤波器
  2. 找出频谱图上较亮的非中心亮区域,将这些区域过滤掉。
    使用了一幅没有明显噪声的图像叠加了一幅仅含有周期性噪声的图像作为原图像。
read_image(Image3, 'Fig0222(a)(face)')* 将图像大小转换成和噪声图像一样大
zoom_image_size(Image3, ImageZoom, Width, Height, 'constant')
* 图像与噪声图像叠加,代码中省略了噪声图像的构造过程
add_image(ImageResult2, ImageZoom, ImageAdd, 1, 0)
fft_image(ImageAdd, ImageFFT5)
fft_image(ImageZoom, ImageFFT6)* 方法1,构造一个低通滤波器滤波
gen_lowpass(ImageLowpass1, 0.2, 'none', 'dc_center', Width, Height)
convol_fft(ImageFFT5, ImageLowpass1, ImageConvol2)
* 滤波后的结果
fft_image_inv(ImageConvol2, ImageFFTInv3)* 方法2
* 使用二项式滤波光滑图像
binomial_filter(ImageResult3, ImageSmooth, 9, 9)
* 筛选出亮点
threshold(ImageSmooth, Region, 100, 1800)
connection(Region, ConnectedRegions)
select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 5, 100)
union1(SelectedRegions, RegionUnion)
reduce_domain(ImageSmooth, RegionUnion, ImageReduced)
* 检测出区域内的局部最大值,这里可以检测出每个亮点区域中最亮的点
local_max(ImageReduced, LocalMaxima)
dilation_circle(LocalMaxima, RegionDilation, 12.5)
* 把上面找出来的这些膨胀后的亮区域涂成黑色(可以理解为把这些区域过滤掉了)
paint_region(RegionDilation, ImageFFT5, ImageResult4, 0, 'fill')
* 效果图
fft_image_inv(ImageResult4, ImageFFTInv4)


四张图分别是原图,叠加噪声后的图,方法1的效果图,方法2的效果图。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 分割线 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

边缘分析

Halcon中轮廓线窗口的使用
打开轮廓线窗口,点击窗口左上角的绘制线段(或绘制弧形),在原图像上绘制线段,绘制完成后鼠标右击,就可以在轮廓线窗口上看到这条线上灰度值的变化

halcon中有多种现成的求边缘的算子,他们之间主要的区别是使用了不同的滤波器来提取轮廓。

read_image(Image, 'Fig0219(rose1024)')laplace_of_gauss(Image, ImageLaplace, 2)
threshold_sub_pix(ImageLaplace, Border, -2)derivate_gauss(Image, DerivGauss, 0.6, 'gradient')
threshold_sub_pix(DerivGauss, Border1, 15)frei_amp(Image, ImageEdgeAmp)
threshold_sub_pix(ImageEdgeAmp, Border2, 50)prewitt_amp(Image, ImageEdgeAmp1)
threshold_sub_pix(ImageEdgeAmp1, Border3, 90)sobel_amp(Image, EdgeAmplitude, 'sum_abs', 3)
threshold_sub_pix(EdgeAmplitude, Border4, 35)kirsch_amp(Image, ImageEdgeAmp2)
threshold_sub_pix(ImageEdgeAmp2, Border5, 110)robinson_amp(Image, ImageEdgeAmp3)
threshold_sub_pix(ImageEdgeAmp3, Border6, 120)

使用高斯光滑的拉普拉斯算子最特别,会出现一些负数值,这个值应该不是灰度,而是导数。

轮廓的分割合并

上面的求轮廓的算子最终求出来的都是一些不连续的边缘,需要进一步将这些边缘做分割合并。
边缘拟合用于将轮廓线拟合成直线/圆/椭圆。算子普遍以fit_开头,contour_xld结尾;
轮廓合并用于将距离较近的轮廓合并到一起,算子一般以union_开头,contours_xld结尾;
轮廓分割:segment_contoures_xld,将轮廓分割为直线/直线和圆弧

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 分割线 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

标定

目的是减弱相机拍摄引起的图形畸变。
我决定先跳过这一节

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 分割线 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

模板匹配

这个知识点的实用性比较强。

书上的灰度匹配的算子已经弃用了。
做了一个小实验,用一个一条边和y轴重合的等边三角形做的模板,去在一幅图上找匹配,这幅图上有一个旋转角度和模板一致的等边三角形和一个底边和x轴平行的等边三角形,结果前一个三角形匹配上了。这也是在预期之中的。

gen_contour_polygon_xld(Contour, [0, 100, 50, 0], [0, 0, 50 * sqrt(2), 0])
gen_contour_polygon_xld(Contour1, [200, 50 * sqrt(2) + 200, 50 * sqrt(2) + 200, 200], [50, 0, 100, 50])gen_region_contour_xld(Contour, Region, 'filled')
gen_region_contour_xld(Contour1, Region1, 'filled')gen_image_const(Image, 'byte', 512, 512)
overpaint_region(Image, Region, 100, 'fill')
overpaint_region(Image, Region1, 200, 'fill')gen_image_const(Image1, 'byte', 100, 100)
overpaint_region(Image1, Region, 255, 'fill')create_shape_model(Image1, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
find_shape_model(Image, ModelID, -0.39, 0.79, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)

转载于:https://www.cnblogs.com/yutou2016/p/11171903.html

图像处理笔记(十七):再看傅里叶变换相关推荐

  1. 论文笔记:再看ResNet——ResNet典型网络结构

    前言 第一次看ResNet论文的时候,由于刚接触深度学习不久,对ResNet的理解仅仅停留在论文中阐述的一些基本思想.加上当时实验室的硬件条件很有限,用的模型基本上以AlexNet和VGG为主,并没有 ...

  2. 【学海】再看傅里叶变换和欧拉公式

    欧拉公式: 欧拉公式所描绘的,是一个随着时间变化,在复平面上做圆周运动的点,随着时间的改变,在时间轴上就成了一条螺旋线.如果只看它的实数部分,也就是螺旋线在左侧的投影,就是一个最基础的余弦函数.而右侧 ...

  3. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  4. 以前看书时记得一些笔记(二),很早了,现在再看都有些看不懂了

    MFC学习: 1.CObject类为MFC总类,该类下面有一个重要的类CCmdTarget.而CCmdTarget类下面又有四个重要的继承类,分别为:CWinThread.CDocument.CDoc ...

  5. 【matlab图像处理笔记5】【图像变换】(四)图像的正交变换

    文章目录 推荐阅读 前言 图像正交变换简介 离散傅里叶变换 对图像进行离散傅里叶变换的作用 二维离散傅里叶变换 频谱图 示例 离散余弦变换 简介 基本原理 示例 推荐阅读 本系列其他文章 [matla ...

  6. windows内核开发学习笔记十七:IRP 和 IO_STACK_LOCATION 的交互

    windows内核开发学习笔记十七:IRP 和 IO_STACK_LOCATION 的交互 前面两篇学习笔记分别介绍了IRP和IO_STACK_LOCATION,整个设备栈来处理这个IRP,但是每个设 ...

  7. 【matlab图像处理笔记4】【图像变换】(三)图像的霍夫变换

    文章目录 推荐阅读 前言 霍夫变换概述 霍夫变换直线检测原理 从笛卡尔坐标系到霍夫空间 两点一线的霍夫空间形式 寻找共线的点 直角坐标系存在的问题 极坐标参数空间下的霍夫变换 matlab霍夫变换直线 ...

  8. muduo网络库源码复现笔记(十七):什么都不做的EventLoop

    Muduo网络库简介 muduo 是一个基于 Reactor 模式的现代 C++ 网络库,作者陈硕.它采用非阻塞 IO 模型,基于事件驱动和回调,原生支持多核多线程,适合编写 Linux 服务端多线程 ...

  9. 数字图像处理笔记2-nbsp;边沿检…

    原文地址:数字图像处理笔记2- 边沿检测与提取,轮廓跟踪(转)作者:小草帽 7.1 边沿检测 我们给出一个模板 和一幅图象 .不难发现原图中左边暗,右边亮,中间存在着一条明显的边界.进行模板操作后的结 ...

  10. 图像处理(十):傅里叶变换

    图像处理笔记总目录 一.在opencv中实现图像的傅里叶变换 傅里叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数: 傅里叶逆变换是将图像的频率分布函数变换为灰度分布函数. 正变换:df ...

最新文章

  1. Windows Server 排错和发帖求助必读
  2. How I can Built A-Z index site map in my website
  3. DeepLearning.AI笔记:二、神经网络编程基础
  4. ODP.NET 10.2.0.20发布了
  5. 【splunk】仪表盘导入导出
  6. ios 高德挪动地图获取经纬度_高德地图获取地理位置经纬度并将经维度转化为详细地址信息...
  7. 字符串处理 —— 回文串相关 —— 添加/删除字符后是否为回文串
  8. 简述oracle函数的功能,Oracle 最常用功能函数经典汇总 (zz)
  9. Keras Datasets 国内下载镜像
  10. iOS 蓝牙使用小结 bluetooth
  11. C#之网络字节序与主机字节序互转
  12. OpenCV 实现分水岭算法
  13. mybatis-generator扩展教程系列 -- 自定义配置参数修改DAO,Mapper文件后缀
  14. 区块链应用 项目开发步骤
  15. wordpress搜索ajax,基于wordpress的ajax写法详解
  16. LearnGL - 13 - PointLight - 点光源
  17. apache ii评分怎么评_APACHE II评分表
  18. 题目:输入一个整数a,其个位为第一位,十位为第二位,依次类推,计算a的偶数位的和奇数位的和。
  19. 区块链100讲:Truffle——一个更简单的部署智能合约的方法
  20. 用于RF收发器的简单基带处理器

热门文章

  1. opencv笔记(7):直方图均衡化
  2. 主板定制X86嵌入式器件选型
  3. SimpleDateFormat关于时间类的一些常用处理
  4. 在 Ubuntu 上配置高性能的 HHVM 环境
  5. linux下常用的文本转换命令1(tr)
  6. JavaScript 闭包(个人理解)
  7. Android Studio中.9.png文件出错问题
  8. 中国现代远程与继续教育网 统考 大学英语(B)考试大纲
  9. Android 中文 API——android.widget合集(上)(20篇)
  10. 动软.Net代码自动生成器下载