opencv相关

图像增强

图像增强可以分为两类:空间域法频域法

空间域法可以简单的理解为包含图像像素的空间,直接对图像本身进行各种线性或非线性运算,对图像的像素灰度值做增强处理。

频域法则是在图像的变换域中把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。

 

空间域法可分为点运算和模板处理两大类,点运算包括灰度变换、直方图修正等,模板处理包括图像平滑、锐化等

频域法常用的方法包括低通滤波、高通滤波和同态滤波等

 

空间域的一些滤波处理是直接以卷积形式处理的,频域中的滤波是将滤波器进行傅里叶变换转换到时域,再进行卷积操作

为什么要用频域?

1、当图像具有一定纹理特征时

2、需要提取对比度低或信噪比低的特征

3、图像尺寸较大或需要与大尺寸滤波器进行计算,转换到频域,具有速度优势

 

1. opencv中定义的数据类型

opencv中有时会出现CV_8UC3等格式,其表示的是opencv中定义的数据类型

其中数字表示位数,S为有符号整型、U表示无符号整型、F表示浮点型,末尾的C表示通道数,C3表示三通道

2. 色彩空间

色彩空间用数学方式来描述颜色集合,常见的有RGB、CMYK 、YUV、HSV、HSL

RGB颜色空间

采用加法混色法,描述各种光通过如何比例来产生颜色,描述的是红绿蓝三色光的数值

CMYK颜色空间

采用减法混色法,描述的是需要何种油墨,通过光的反射显示出颜色,cmyk分别为青、品红、黄、黑

HSV颜色空间

三个参数分别为:色调(H)、饱和度(S)、明度(V)

色调用角度度量,取值范围为0°~360°,红绿蓝分别为0°、120°、240°

饱和度表示接近光谱色的程度,光谱色即纯色(红橙黄绿青蓝紫)

明度表示颜色的明暗程度

在opencv中,三个值的范围分别为[0,180] 、[0,255]、[0,255]

HSL颜色空间

与hsv颜色空间差不多,区别是把V明度换成了L亮度,纯色的明度等于白色,纯色的亮度等于中度灰的亮度

YUV颜色空间

YUV、YCbCr、YPbPr等都可以称为YUV,其中Y表示明亮度,也就是灰阶值,U和V表示的是色度,用于描述影像的色彩及饱和度,用于指定像素的颜色

YCbCr的主要格式有YCbCr420、YCbCr422、YCbCr411、YCbCr444

  • 4:4:4表示完全取样
  • 4:2:2表示2:1水平取样,垂直完全采样
  • 4:2:0表示2:1水平取样,2:1垂直采样
  • 4:1:1表示4:1的水平取样,垂直完全采样

3. 图像混合

cv2.addWeighted(img1,0.7,img2,0.3,0)

4. 图像加法

cv2.add(img1,img2)

opencv中的图像加法与numpy的加法不同,opencv中的加法是一种饱和操作,即超过255变成255,而numpy的add会对结果取模(对于uint8来说%256,因为越界了)

5. threshold普通阈值

ret,threshold = cv2.threshold(img, thresh, maxval, type)

其中type的类型有 

cv2.THRESH_BINARY    大于阈值的设为maxval,其余为0

cv2.THRESH_BINARY_INV  大于阈值的设为0,其余为maxval

cv2.THRESH_TRUNC  大于阈值的就是阈值,其余为0

cv2.THRESH_TOZERO  大于阈值保持不变,其余为0

cv2.THRESH_TOZERO_INV  大于阈值的为0,其余保持不变

6. OTSU大津阈值法

大津阈值法的思想是图像内包含前景和背景两类元素,要找到合适的阈值使类内方差最小,且大津证明了这个阈值也使类间方差最大

大津算法得出的是0~1上的一个阈值,这个阈值用于图像像素强度的动态范围,即若图像只包含155~255的像素,则0.75会映射到230

opencv中的大津阈值只需修改type即可,即写成type + cv2.THRESH_OTSU,并把阈值设为0

7. cv2中绘制图形需要的东西

绘制线段需要首尾坐标

绘制矩形需要左上和右下坐标

绘制⚪需要中心点坐标和半径

8. 椒盐噪声

椒盐噪声是数字图像中常见的噪声,指的是两种噪声:椒噪声一般是白色噪声,盐噪声一般是黑色噪声,去除椒盐噪声常用的方法是中值滤波

写个循环,随机将图像中的某个像素点置为255或0即可

9. opencv中的滤波

  •  均值滤波:也称低通滤波,滤波核中心像素等于核内所有元素的均值,起到图像模糊的作用
  •  cv2.blur(img,(m,n))
  •  
  • 中值滤波:先将滤波核选中的像素值进行排序,将序列中的中值作为模板中心的像素值,可以去除图像中与周边像素差异较大的噪声点,如椒盐噪声
  •                   中值滤波的核可以是正方形、长方形、圆形或十字形的
  • cv2.medianBlur(img, Ksize)
  • 高斯滤波:高斯滤波是一种线性平滑滤波,用于消除高斯噪声,通俗的说就是对整幅图像进行加权平均的过程,每一个像素点的值都由其邻域内其他像素值进行加权平均后得到
  • cv2.GaussianBlur(img, (m,n), sigmax, sigmay) 后两个参数分别为x方向和y方向上的标准差,如果为0则根据核内计算
  • 双边滤波:通过考虑距离因素和像素值差异的影响,使其在去噪的同时,能够保留图像的边缘信息
  • cv2.bilateralFilter(img, distance, sigmaColoe,sigmaSpace)  distance一般为5,噪声比较大9  color 0 ~ 255   

10. 直方图均衡化

图像的直方图是描述其灰度分布的图像,x轴为灰度值0~255,y轴为像素个数

直方图均衡化可以改善图像的对比度

 

res = cv2.equalizeHist(img) 

11. 形态学变换

腐蚀:把前景的边界腐蚀掉,具体操作为若卷积核内的元素都为1,保持原像素,否则为0

膨胀:把前景的边界进行膨胀,操作与腐蚀相反

开运算:先膨胀再腐蚀,可以去除噪声

闭运算:先腐蚀再膨胀,可以去除前景上的小孔洞

形态学梯度:膨胀与腐蚀的差值,近似为轮廓

12. 霍夫变换

霍夫变换适用于检测各种形状的场景,只要检测的形状能用数学表达式写出,就可以用霍夫变换检测,即使形状存在一点缺陷也可以。

简单的来说霍夫变换是一个统计的过程,比如直线,其方程可以写成 ρ = xcosθ + ysinθ,那么就可以列出一个计数表格,如包括θ∈(0,180),将图中的点x,y带入方程中,并根据不同θ计算出ρ,

统计ρ和θ对的出现次数,就可以直到直线的方程了。

圆同理,但是三个参数有点多,cv通过图像梯度计算

13. 图像的梯度

图像的梯度就是对像素进行求导,其反应像素色彩的变化速度,在图像的边缘位置色彩差值大,由于图像是离散的数据,故求导可以转化为差分运算,本质上是一种滤波

求图像梯度常用的算子有sobel算子、scharr算子和laplacian算子

sobel算子是高斯平滑和微分操作的结合体,所以抗噪声能力好,可以设定求导的方向x或y

当ksize = -1时,会使用3x3的scharr滤波器,速度相同,效果更好(3x3尽量用scharr)

 

 拉普拉斯为二阶导,其卷积核为

14. 分水岭算法

传统分水岭算法是一种基于拓扑理论的心态学分割方法。在形态学分割中,将图片视作地平面,将图片的灰度与等高线对应。

图片的每一个局部最小值都会有一个影响区域,这个影响区域的边界被称为分水岭。

定义:

测地线距离:对于一个集合A,a和b为A中的元素,则将连接a和b的最短路径称为测地线距离,记为dA(a,b)

测地线影响区域:对于A中的一个点b,所有与点b测地线距离小于距离其他点测地线距离的点的集合

集水盆地:对于图像I,定义Hmin为图像的最小灰度级,TH表示图像中所有灰度级小于H的像素点,MINH表示在灰度级H处区域最小值的集合

算法流程:

先将梯度图像按照灰度值分类,并设定一个测地线距离阈值

找到灰度值最小的像素点Hmin,让阈值从最小值开始增长,在增长的过程中计算Hmin与像素点的测地线距离,如果小于设定阈值,则将这些像素淹没,否则在其上方设置大坝

15. 距离变换

像素距离背景的距离

16. 插值

图像的缩放过程其实就是把坐标映射到原图的过程,缺失的或对应不上的像素点就插值处理,resize前后的图像中心点重合最好

最近邻插值:不为整数的像素点,四舍五入。这样做会导致像素的变化不连续,产生锯齿

线性插值:线性插值为一次多项式的插值方式,可以理解为和他临近两个像素点的加权和

 

 

 双线性插值:就是在x方向两次和y方向一次线性插值,opencv默认的为双线性插值

 双三次插值:计算目标点周围16个像素点的加权和

       使用BiCubic函数进行计算

    

cv2的resize计算过程:

对于缩小图像,目标图像中每个点都能找出原图像中包围它的四个临近点,每个点都进行双线性插值即可

对于放大图像,边界附近的点经过坐标变换可能超出了原图像的范围,这样的话

中间的点:双线性插值

边界上的点(除了顶点):线性插值

四个顶点:最邻近插值

17. canny边缘检测

步骤:

  • 使用(5,5),1.2方差高斯滤波去除噪声
  • 计算图像梯度,使用sobel算子,得到x方向和y方向的梯度图,根据两幅梯度图找到边界的梯度和方向
        •   
  • 将两个方向的梯度叠加后,虽然已经能较好的反应边界,但是有的并不是边界上的点,还需要NMS;边缘上的点应该是局部极值,对每一个像素点进行检查,看这个点的梯度是不是周围具有相同梯度方向的点中最大的
  • 但是由于图像是离散的,在梯度方向上可能没有相邻的点,所以可以通过插值获得相邻的点
  • 使用滞后阈值,确定真正的边界,设置maxval和minval两个阈值,梯度大于max肯定为边界(强边缘),小于min肯定不是边界,二者之间看与边界相不相连(弱边缘)
  • 连接弱边缘如果弱边缘周围8个临界像素有一个是强边缘,那么视作该弱边缘为强边缘,其余舍去

18. findcontours函数原理

按照光栅扫描,从左到右从上到下找到第一个边界点,判断其类型

 然后以该边界点为中心,上一个点为起点,顺时针在邻域内找,起点变为找到的那个点,然后一直逆时针找,迭代

19. 锐化操作

锐化就是增强图像的边缘信息,可以采用梯度图像与原图像叠加实现,也可以直接卷积

拉普拉斯核(也可各个通道单独做)

   

 直接卷积

20. LDA和PCA的区别

二者的目的都是将初始样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样

PCA是为了让映射后的样本具有最大的发散性  无监督的降维方法

LDA是为了让映射后的样本有最好的分类性能  有监督的降维方法  类间方差最大,类内方差最小  大津阈值

21. 图像增强的gamma变换

gamma变换是对图像的灰度进行指数调整,具体操作就是将图像归一化,进行指数操作,乘上相应的系数,公式和图像如下

                

 

对于较暗的图像,gamma  < 1,对于较亮的图像,gamma > 1

为了使算法更快,可以预先建立一个gamma校正查找表LUT(look up table),将0 ~ 255 像素值补偿后的值放入表中,然后查表补正即可

有一个?的步骤

posted @   Liang-ml  阅读(125)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示