当前位置:网站首页>简单总结一下图像处理中概念
简单总结一下图像处理中概念
2022-07-21 10:04:00 【wzw12315】
- 二值化
两种方法,全局固定阈值二值化和局部自适应阈值二值化
全局固定阈值很容易理解,就是对整幅图像都是用一个统一的阈值来进行二值化;
局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。
- 离散傅里叶变换
图像高频部分代表了图像的细节、纹理信息;低频代表了图像的轮廓信息。
- 低通-》模糊
- 高通-》锐化
- 腐蚀和膨胀是针对白色部分(高亮部分)而言的。膨胀就是对图像高亮部分进行“领域扩张”,效果图拥有比原图更大的高亮区域;腐蚀是原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域。
- 开运算:先腐蚀再膨胀,用来消除小物体
- 闭运算:先膨胀再腐蚀,用于排除小型黑洞
- 形态学梯度:就是膨胀图与俯视图之差,用于保留物体的边缘轮廓。
- 顶帽:原图像与开运算图之差,用于分离比邻近点亮一些的斑块。
- 黑帽:闭运算与原图像之差,用于分离比邻近点暗一些的斑块。
opencv里有一个很好的函数getStructuringElement,我们只要往这个函数传相应的处理参数,就可以进行相应的操作了,使用起来非常方便。
下面列举一下相应的操作宏定义。
- 直方图均衡化
均衡化后的图片对比度变高了,变得更加明亮
- 滤波处理
分为两大类:线性滤波和非线性滤波。OpenCV里有这些滤波的函数,使用起来非常方便,现在简单介绍其使用方法。
线性滤波:方框滤波boxFilter、均值滤波Blur、高斯滤波GaussianBlur
非线性滤波:中值滤波、双边滤波
中值滤波在去除脉冲噪声、椒盐噪声的同时又能保留图像的细节(不会出现边缘模糊的情况)
双边滤波的最大特点就是做边缘保存
边缘检测的一般步骤:
- 滤波——消除噪声
- 增强——使边界轮廓更加明显
- 检测——选出边缘点
Canny算法
Canny边缘检测算法被很多人推崇为当今最优秀的边缘检测算法。
Sobel算法
Laplacian算法
如何在图像中快速识别出其中的圆和直线?一个非常有效的方法就是霍夫变换,它是图像中识别各种几何形状的基本算法之一。
霍夫线变换
霍夫线变换是一种在图像中寻找直线的方法。OpenCV中支持三种霍夫线变换,分别是标准霍夫线变换、多尺度霍夫线变换、累计概率霍夫线变换。
在OpenCV中可以调用函数HoughLines来调用标准霍夫线变换和多尺度霍夫线变换。HoughLinesP函数用于调用累积概率霍夫线变换。
我们都知道笛卡尔直角坐标,二维坐标轴上表示一条直线的方程式y = a*x + b,我们想求出一条直线就得想方设法求出其中的a和b的值。如果用极坐标来表示就是
theta就是直线与水平线所成的角度,而rho就是圆的半径(也可以理解为原点到直线的距离),同样地,这两个参数也是表征一条直线的重要参数,确定他们俩了,也就确定一条直线了。正如下图所示。
重映射就是把一幅图像中某个位置的像素放置到另一个图片中指定位置的过程。
在OpenCV中,用的是remap函数实现重映射。
仿射变换
仿射变换指的是一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间的过程。
图像进行仿射变换后,有以下几个特点:
二维图形之间的相对位置关系保持不变,平行线依旧是平行线,且直线上的点的位置顺序保持不变。
一个任意的仿射变换都可以表示为乘以一个矩阵(线性变换)接着再加上一个向量(平移)的形式。
三种常见形式:
- 旋转,rotation(线性变换)
- 平移,translation(向量加)
- 缩放,scale(线性变换)
仿射变换本质是一个2* 3的矩阵M乘上原图的每个坐标,得到目标图的对应点坐标。2*3矩阵M中的2表示目标点坐标的x与y,3中的第三维是平移分量。因此需要做的就是找到矩阵M,OpenCV提供 getAffineTransform 求出仿射变换, getRotationMatrix2D 来获得旋转矩阵。
这里简单说说仿射变换是怎么做到的。
现在有两幅图像(如下图),图像二是图像一经过放射变化得来的。那问题来了,我们怎么从这两个图像信息里挖掘出两图之间的映射关系?
很简单,只要在图像一种拿出三个点(1,2,3),图像二也拿出对应的三个点(1,2,3),就可以求出两图间的映射关系!
OpenCV通过两个函数的组合使用来实现仿射变换:
- 使用warpAffine来实现简单重映射
- 使用getRotationMatrix2D来获得旋转矩阵
OpenCV中就是利用inpaint()这个函数来实现修复功能的
边栏推荐
- FastDFS高可用使用介绍
- Quartz simple usage and its es job
- shared_ PTR shared smart pointer
- [sklearn] data set split sklearn moduel_ selection. train_ test_ split
- 2019杭电多校 第九场 6684-Rikka with Game【博弈题】
- MySQL性能优化(二):选择优化的数据类型
- 2019牛客暑期多校训练营(第七场)A-String 【字符串最小表示法+暴力枚举】
- Un7.20: how to display two attributes in an association table at the same time?
- leetcode:169. 多数元素
- MySQL进阶
猜你喜欢
Transport layer protocol
pytorch入门二 使用pyplot动态展示函数拟合过程
Flink应用案例统计实现TopN的两种方式
Switch DHCP server configuration method (command line version)
博士申请 | 香港城市大学刘晨老师组招收机器学习方向全奖博士/博后/硕士/RA...
I, AI doctoral student, online crowdfunding research topic
Network address translation (NAT)
个性潮流与性能兼备,华硕a豆14 Pro搭载全新12代酷睿标压处理器
数据治理过程中会遇到那些数据问题?
2019杭电多校 第五场 6630(原1007) permutation 2 (斐波那契数列)
随机推荐
【微信小程序】textarea多行输入框(80/100)
请问:flink 1.14.5兼容mysql cdc 2.1.0吗
What data problems will you encounter in the process of data governance?
MobileViT:挑战MobileNet端侧霸主
身份证号码中间位数隐藏
MySQL advanced (XIV) implementation method of batch update and batch update of different values of multiple records
Network wiring and number system conversion
2019牛客暑期多校训练营(第六场)D-Move 【暴力枚举】
Redis基础知识、应用场景、集群安装
Ali Er Mian: what is MMAP? (not MMP)
Redis到底是单线程还是多线程
[sklearn] data set split sklearn moduel_ selection. train_ test_ split
别乱用UUID了,自增ID和UUID性能差距你测试过吗?
thymeleaf应用笔记
请教个问题 有没有用cdc监控oracle遇到Error Msg = ORA-04036: 实例使用
In the cloud native era, developers should have these five capabilities
Two ways to implement topn with Flink application case statistics
阿里二面:什么是mmap ?(不是mmp)
Kuberntes云原生实战一 高可用部署架构
Codeforces Round #578 (Div. 2) B - Block Adventure 【贪心】