Python+OpenCV基本概念入门

概念

数字图像的基本单位是像素

一幅灰度图像的灰度级为256,则存储一个像素需要8比特

描述图像中各灰度级像素出现频率的统计图是灰度直方图

直方图均衡化的主要目的是增强图像整体对比度

在直方图均衡化后,图像的直方图会变得平坦

空间域图像处理的核心操作是卷积

一个3*3的均值滤波器的模板所有系数之和应为1。

  • 理解:均值滤波器本质是线性平滑滤波 ,通过计算模板覆盖区域内像素的平均值替换中心像素,实现降噪;
  • 3×3 模板包含 9 个像素点,若模板系数均为 1,求和得 9,为保持图像亮度不变(避免过亮 / 过暗),需对系数归一化,即每个系数除以 9;
  • 最后9个1/9相加为1

对"椒盐噪声"抑制效果最好的是中值滤波器

中值滤波器是一种非线性滤波器

图像锐化主要用于增强图像的高频部分

  • 图像频率成分定义:高频成分对应灰度突变区域(边缘、细节、纹理),低频成分对应灰度平缓区域(背景、大面积纯色区域);
  • 图像锐化的本质是增强灰度变化的对比度,通过高通滤波、微分算子(Sobel、Laplacian 等)强化高频成分,抑制低频成分,从而凸显边缘和细节;
  • 与平滑滤波(增强低频、抑制高频)相反,锐化的核心目标就是强化高频信息,提升图像清晰度。

属于一阶微分算子并用于边缘检测的是Sobel算子

  • 一阶微分算子的本质:通过计算图像灰度的一阶导数检测边缘,边缘处灰度突变会导致一阶导数出现极值,以此定位边缘;
  • Sobel 算子的核心属性:是典型的一阶微分算子,通过分别计算水平和垂直方向的灰度差分(一阶导数),结合高斯平滑抑制噪声,实现边缘检测,同时能区分边缘方向;

拉普拉斯算子是一种二阶微分算子。

维纳滤波是一种最小均方误差意义下的最优滤波器。

在频率域中,图像的低频分量对应于图像的平滑区域和总体轮廓

卷积定理指出,空间域的卷积等价于频率域的相乘

理想低通滤波器在截止频率处会产生振铃效应 现象

图像复原与图像增强的主要区别在于,图像复原是客观的,需要降质模型

信噪比(SNR)是衡量图像质量的指标

均值滤波器和高斯滤波器自身 对高斯噪声有较好的抑制效果的滤波器。

图像分割的目的是将图像划分为有意义的区域。

基于灰度阈值的分割方法的核心是确定最佳阈值

当图像背景复杂且光照不均时,最佳的分割方法是局域阈值(自适应阈值)分割

Canny边缘检测器的步骤

  • 高斯滤波降噪:使用高斯滤波器平滑图像,抑制高斯噪声,避免噪声被误判为边缘,这是边缘检测的预处理环节,为后续精准检测奠定基础。
  • 计算梯度幅度值和方向:通过 Sobel 算子等一阶微分算子,计算图像每个像素点的梯度幅值(反映边缘强度)和梯度方向(边缘的走向,通常归为 0°、45°、90°、135° 四个方向)。
  • 非极大值抑制:沿梯度方向,保留局部梯度幅值最大的像素,抑制非极大值像素,将宽边缘细化为单像素宽度的边缘,提升边缘的精准度。
  • 双阈值检测与边缘连接:设定高、低两个阈值,保留高于高阈值的强边缘;将高于低阈值且与强边缘连通的像素标记为边缘;低于低阈值的像素则被抑制,最终得到完整且精准的边缘轮廓。

用于检测图像中的直线方法是霍夫变换

形态学图像处理通常应用于二值图像

形态学操作"腐蚀"的作用是:缩小目标区域

先腐蚀后膨胀的运算称为开运算

开运算可以用于消除小物体

傅里叶变换后,图像的能量主要集中在低频区域

图像金字塔的主要作用是多分辨率分析

一个像素点p的坐标为(x, y),其4-邻域像素的坐标不包括**(x+1, y+1)**

区域生长法是一种基于区域的分割方法

分水岭算法通常用于灰度图像分割

顶帽变换定义为:原图像 - 开运算结果

可以用于提取细小突起的形态学运算是顶帽变换

可以用于检测图像中孔洞的形态学运算是黑帽变换

幂次变换(伽马变换)中,当γ>1时,对图像的影响是增强亮部细节

同态滤波可以同时压缩图像的动态范围和增强对比度,它作用于频率域

图像分割中,基于区域的方法有以下几种:

  • 区域生长法:从一个或多个种子像素开始,通过合并相邻像素,逐步增长形成具有相似属性的区域。合并的条件基于像素间的相似性度量,如灰度值、颜色等。例如,基于区域灰度差的区域生长法,会对图像进行逐行扫描,找出未归属的像素,以该像素为中心检查其邻域像素,若灰度差小于阈值,则将它们合并,重复此过程直到区域无法进一步扩张。
  • 分水岭算法:将图像视为地形表面,通过模拟水从各个低谷(局部极小值)开始逐渐填充区域,最终将图像分割为不同的区域。基于梯度图的分水岭算法,先计算图像梯度图,将梯度图转化为分割图,并进行分水岭变换得到最终的区域分割结果;基于标记的分水岭算法,则通过手动或自动标记一些像素作为种子点,然后进行分水岭变换得到区域分割结果。
  • 区域分割合并法:将图像初始分割成较小的区域,然后通过合并相似的区域来减少分割数量。合并的条件基于区域间的相似性度量,如颜色、纹理等。例如,基于区域相似性的分割合并算法,通过计算区域间的相似性度量,合并相似的区域;基于图论的分割合并算法,将区域间的相似性建模为图的边权重,通过最小生成树或最大流最小割算法进行区域的合并。

Otsu(大津)法是一种全局阈值自动选取方法

在Python中,导入OpenCV库的正确方式是:import cv2

使用OpenCV读取一张图像的函数cv2.imread()

cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE) 中的 cv2.IMREAD_GRAYSCALE 参数表示以灰度模式读取图像

如果 cv2.imread() 无法找到指定路径的文件,它会返回None

用于显示图像的OpenCV函数是cv2.imshow()

在 cv2.imshow('window', img) 后,通常需要调用cv2.waitKey(0) 来保持窗口显示

cv2.imwrite()是OpenCV中保存图像的函数

在OpenCV中,一个彩色图像(BGR格式)的NumPy数组的shape通常是高度、宽度、通道数

height, width = img.shape[:2] 是用来获取获取图像的高度和宽度

cv2.filter2D()是用于图像卷积(滤波)的核心函数

对椒盐噪声有很好滤除效果的滤波器是中值滤波

在OpenCV中,中值滤波的函数是cv2.medianBlur()

用于图像边缘检测的Canny算子的函数是cv2.Canny()

用于图像二值化(固定阈值)的函数是cv2.threshold()

在 cv2.threshold() 函数中,cv2.THRESH_BINARY阈值类型会将大于阈值的像素设为255,小于的设为0

在OpenCV中,用于查找图像轮廓 的函数是cv2.findContours()

用于图像形态学"膨胀"操作的函数是cv2.morphologyEx()配合cv2.MORPH_DILATE 或者cv2.dilate()

先腐蚀后膨胀的形态学操作称为开运算

开运算主要用于消除小物体或细线

用于创建形态学操作所需的结构元素的函数是cv2.getStructuringElement()

将图像从空间域转换到频率域最常用的变换是傅里叶变换

在频率域中,图像的高频分量对应于空间域的边缘和噪声

对图像进行傅里叶变换后,频谱图的中心代表最低频率

频率域滤波的基本步骤:

频率域滤波的核心思路是:将图像从空域转换到频率域,在频率域对不同频率分量(低频 / 高频)进行处理,再转换回空域得到滤波后的图像。

  • 读取并预处理图像(将图像转换为灰度图,将图像数据类型转化为浮点类型)
  • 执行傅里叶变换(对图像进行离散傅里叶变换(DFT),得到复数形式的频率域矩阵;变换结果中,低频分量集中在矩阵四角,需通过中心化(将低频移到中心)方便后续滤波。)
  • 构建频率域滤波核(根据滤波目标(低通 / 高通 / 带通)设计滤波核(如理想低通、高斯低通、巴特沃斯高通等);滤波核的尺寸需与傅里叶变换后的矩阵完全一致,且数据类型为复数型。)
  • 频率域滤波(逐元素相乘)
  • 逆傅里叶变换(IDFT)
  • 后处理(归一化)

高频增强滤波器可以通过高通滤波器 + 常数 实现

带阻滤波器可以用于消除周期噪声

用于图像锐化的理想高通滤波器,其传递函数在原点处为0

频率域滤波中,滤波器函数H(u,v)与图像傅里叶变换F(u,v)的乘积是**滤波后的频率域图像 **

图像的功率谱定义为傅里叶变换幅值的平方

逆滤波复原方法的主要缺点是对噪声非常敏感

运动模糊通常是由于相机与景物之间的相对运动造成的

灰度形态学中,腐蚀操作是取结构元素邻域内的最小值

图像边缘是图像中灰度值剧烈变换的地方。

Sobel算子有两个方向模板

Prewitt算子与Sobel算子的主要区别在于模板系数不同

高斯拉普拉斯算子(LoG)是先平滑,再求微分

在Canny边缘检测中,非极大值抑制的目的是细化边缘,只保留梯度幅度值最大的点

基于二阶导数过零点的边缘检测方法是拉普拉斯算子

在存在噪声的情况下,通常先平滑图像 再进行边缘检测

Roberts交叉梯度算子使用2*2大小的模板。

Otsu算法、自适应阈值、全局阈值属于基于阈值的图像分割

在OpenCV中,用于Otsu阈值分割的函数是:cv2.shreshold()参数为cv2.SHRESH_OTSU

区域生长算法属于基于区域的分割算法

分水岭算法通常用于解决重叠物体的分离的图像分割

在OpenCV中,用于分水岭算法的函数是:cv2.water shed()

在边缘检测中,Sobel算子可以检测水平和垂直方向 的边缘

图像退化的原因有以下几种可能:

噪声干扰、模糊退化、几何畸变、光照与色彩失真、压缩损伤、传感器与传输问题

维纳滤波主要用于图像复原

逆滤波在噪声较小时 情况下效果较好

形态学开操作是先腐蚀在膨胀

在OpenCV中,用于形态学膨胀的函数是:cv2.dilate()和cv2.morphologyEx()

形态学闭操作可以用于连接断开区域

形态学梯度定义为:膨胀图与腐蚀图之差

结构元素在形态学操作中的作用是:定义领域形状和大小

在OpenCV中,用于傅里叶变换的函数是:cv2.dft()

理想低通滤波器在频域中会引入振铃效应

空域滤波直接处理的是图像的像素值

均值滤波可以用于图像平滑

中值滤波主要用于椒盐噪声去除

直方图均衡化用于增强图像对比度

在OpenCV中,用于直方图均衡化的函数是cv2.equalizeHist()

拉普拉斯金字塔常用于图像融合

椒盐噪声特点是随机出现黑白像素点

在OpenCV中,用于添加高斯噪声的函数是需要自定义实现

均值滤波对高斯噪声 去除效果较好

中值滤波对椒盐噪声 去除效果较好

拉普拉斯算子对噪声 敏感

高斯-拉普拉斯(LoG)算子是先进行高斯平滑 操作

在图像复原中,约束最小二乘滤波相比逆滤波的优势在于对噪声不敏感

形态学黑帽操作定义为闭操作与原图之差

在OpenCV中,用于形态学开操作的函数是:先cv2.erode()然后cv2.dilate();cv2.morphologyEx(),参数为cv2.MORPH_OPEN

结构元素的形状可以是矩形、椭圆形、十字形

傅里叶变换后的图像需要经过对数变换 处理才能显示

高通滤波器可以用于图像锐化

同态滤波用于同时增强高频和抑制低频

频域滤波的步骤包括傅里叶变换、滤波、逆傅里叶变换

双边滤波的特点是保持边缘

在OpenCV中,用于双边滤波的函数是cv2.bilateralFilter()

局部直方图均衡化用于增强局部对比度

在OpenCV中,用于创建CLAHE对象的函数是cv2.createCLAHE()

直方图匹配用于使图像直方图与指定直方图相似

带阻滤波器用于去除周期噪声

在Python中安装OpenCV库的命令是:pip install opencv-python

获取图像高度的属性是image.shape[0]

高斯滤波 操作属于空域处理

直方图均衡化的主要作用增强图像的整体对比度,使灰度分布更均匀

对数变换(s = c * log(1 + r))通常用于 增强图像的暗区域,压缩高亮区域

均值滤波器是典型的平滑(模糊)滤波器

在OpenCV中,使用cv2.blur()或cv2.boxFilter()实现的是均值滤波

中值滤波的主要优点是在平滑噪声的同时能很好的保护图像边缘

高斯滤波cv2.GaussianBlur() 中,需要指定的关键参数滤波器尺寸和标准差Sigma

双边滤波cv2.bilateralFilter()相比于高斯滤波的独特之处在于同时考虑了空间领域和像素值相似性

拉普拉斯算子属于锐化操作

在OpenCV中,使用cv2.filter2D()函数进行图像处理时,其核心参数是图像和卷积核

拉普拉斯算子通常用于图像的二阶导数,用于边缘点检测

图像边缘是图像中灰度值发送剧烈变化的区域

在OpenCV中,使用Sobel算子计算x方向梯度的函数调用是cv2.Sobel(img, cv2.CV_64F, 1, 0)

在Canny边缘检测中,非极大值抑制的目的是**细化边缘,只保留梯度幅值最大的点 **

拉普拉斯算子对噪声比较敏感,因此通常的做法先对图像进行平滑,再使用拉普拉斯算子

图像分割的目的是将图像划分为具有相似特性的区域

基于阈值的分割方法中最简单的是全局阈值

在OpenCV中,实现自适应阈值分割的函数是cv2.adaptiveThreshold()

基于区域的分割方法"区域生长"的起始点预先定义的种子点

分水岭算法通常用于解决粘连物体分割类型的分割问题

在使用OpenCV的分水岭算法cv2.watershed()之前,通常需要提供一个确切的种子点(通常是前景和背景标记)

cv2.findContours()函数通常用在二值图像上

使用cv2.drawContours()函数可以将轮廓绘制在图像上。contourIdx参数用于指定要绘制的轮廓索引(-1表示绘制所有)

形态学操作的两个基本运算是膨胀和腐蚀

腐蚀操作的目的是:消除边界点,使目标缩小,可以消除小且无意义的目标

膨胀操作的目的是:将与目标物体接触的所有背景点合并到物体中,使目标增大

在OpenCV中,用于执行形态学操作的函数是cv2.morphologyEx()以及cv2.dilate()和cv2.erode()

先腐蚀后膨胀的操作称为开运算

开运算通常用于消除小物体、在纤细点处分离物体、平滑较大物体的边界

先膨胀后腐蚀的运算被称为闭运算

闭运算通常用于填补物体内部细小空洞、连接邻近物体

形态学梯度是膨胀图和腐蚀图之差 ,其结果是物体的边界

顶帽运算是原图像与开运算结果图之差,常用于检测暗背景下的亮斑 场景

黑帽运算是闭运算结果图与原图像之差,常用于检测亮背景下的暗斑 场景

在OpenCV中,可以使用cv2.getStructuringElement()和np.ones()函数 来创建形态学操作的内核

cv2.MORPH_RECT(矩形)、cv2.MORPH_ELLIPSE(椭圆形)、cv2.MORPH_CROSS(十字形)这些内核形状可由cv2.getStructuringElement()

在OpenCV中,用于计算二维离散傅里叶变换的函数是cv2.dft()

傅里叶变换的结果是一个复数数组。为了显示频谱图,我们需要计算每个复数的幅度谱

为了将频域图像的零频率分量(直流分量)移到频谱中心,我们需要进行频移 操作

在OpenCV中,可以使用np.fft.fftshift()来实现频移。那么逆操作(移回)的函数是np.fft.ifftshift()

理想低通滤波器在频域中的作用是衰减高频,通过低频

理想低通滤波器的一个常见问题是会产生振铃效应现象

高斯低通滤波器相比于理想低通滤波器的优点是没有振铃效应,平滑效果更自然

对频域滤波后的结果进行傅里叶逆变换,得到的是滤波后的空域图像

图像复原的目的是尽可能地重建或恢复退化的原始图像

椒盐噪声的特点在图像中随机出现黑白像素点

高斯噪声的特点是噪声幅度分布服从高斯(正态)分布

中值滤波器对椒盐噪声最有效

逆滤波是图像复原的一种简单方法,其主要问题是对噪声非常敏感

维纳滤波(最小均方误差滤波)相比于逆滤波的改进在于考虑了退化函数和噪声的统计特性

在空域中,为图像添加高斯噪声,通常需要用到np.random.normal()函数来生成随机数

图像对比度增强 不属于图像退化

图像增强的目的是改进图像质量,使其更适合特定应用或更易于人眼观察

拉普拉斯金字塔的主要用途是图像融合

在OpenCV中,使用cv2.imread()函数读取一张灰度图像,应使用cv2.IMREAD_GRAYSCALE标志

在OpenCV中,cv2.normalize()函数将图像数组的所有值线性变换到[0, 1]范围内,通常使用的类型转换是np.float32

对数变换通常用于扩展图像暗区域的对比度,压缩高亮区域场景

图像取阈值操作cv2.threshold()中,cv2.THRESH_BINARY标志表示大于阈值的置为最大值,否则置为0

cv2.threshold()函数中,cv2.THRESH_OTSU标志通常与cv2.THRESH_BINARY 阈值类型一起使用

均值滤波函数cv2.blur()的主要缺点在平滑噪声的同时会使图像边缘模糊

双边滤波相比高斯滤波的主要优点在平滑噪声的同时能够更好地保留边缘

使用cv2.filter2D()函数进行卷积时,参数depth设置为-1表示输出图像与输入图像深度相同

方框滤波cv2.boxFilter()当normalize=True时,等同于均值滤波

在OpenCV中,用于计算旋转变换矩阵的函数是cv2.getRotationMatrix2D()

名词

像素:在计算机中处理图像时,先将其划分为若干个小方块,每个小方块就是一个处理单位,每个小方块称为一个像素点。

形态学梯度:是根据膨胀结果减去腐蚀结果的差值,来实现增强结构元素领域中的像素强度,突出高亮区域的外围。

卷积:卷积首先将模板进行反转,模板在图像中进行遍历,将模板中心和各个像素位置重合,各个系数与模板对应图像像素值相乘,乘积相加并求和,结果赋值给模板中心对应的像素

退化模型:图像退化是指图像因为某种原因从正常变得不正常,典型的表现有模糊、失真、有噪声等。图像退化模型是指当输入图像经过某个退化系统,再叠加噪声,形成退化后的图像。

高斯金字塔:是由底部最大分辨率图像逐次下采样得到的一系列图像。底部的图像分辨率最高,越往上图像分辨率越低。

4领域:

OTSU:也称为大津阈值分割法或最大类间方差,根据一副双峰图像的直方图自动计算出一个阈值。

灰度图像:是指各像素信息由一个量化的灰度等级来描述的图像,无彩色信息。灰度图像的取值范围是0~255,0表示纯黑色,255表示纯白色

区域生长:是指从某个像素出发,按照一定准则,逐步加入邻近像素,当满足一定条件时,区域生长终止,最后得到整个区域,进而实现目标的提取。

二值图像:就是只含有黑色和白色,没有过渡色彩的图像。

灰度直方图:以灰度级(0~255,对应黑到白)为横坐标,以对应灰度级的像素数量(或占比)为纵坐标,统计并可视化图像中每个灰度值出现的频次,反映图像的亮度分布、对比度及明暗特征。

图像分割:就是把图像分成若干个特定的,具有独特性质的区域并提取出感兴趣目标的技术和过程。

开运算:先腐蚀再膨胀的运算,主要用于消除亮度较高的细小区域,在纤细点处分离物体。

图像锐化:图像锐化是智能图像处理中重要的图像增强技术,核心目的是增强图像的边缘、纹理等细节信息,使图像轮廓更清晰、视觉效果更鲜明。其本质是通过增强图像中的高频分量(对应边缘、细节),抑制低频分量(对应平滑区域),弥补图像采集、传输过程中丢失的细节信息,属于空间域或频域的图像增强操作。

图像噪声:是指存在于图像数据中得不必要或多余的干扰信息。噪声在理论上可以定义为"不可预测,只能用概率统计方法来认识的随机误差"

直方图均衡化:就是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布,它对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。

腐蚀:是指卷积核沿着图像滑动,把物体的边界腐蚀掉。

简述

简述在利用拉普拉斯金字塔进行图像重建过程中的上采样的核心步骤,并写出在OpenCV中实现图像上采样的核心函数?

拉普拉斯金字塔进行图像重建过程中的上采样核心步骤为:它将图像在每个方向扩大为原图像2倍,新增的行和列均用0来补充,并且用与下采样相同的卷积核乘以4,来获取新增像素值。

OpenCV中实现图像上采样的核心函数是:pyrUp()

简述直方图均衡化的基本思想,并写出在OpenCV中实现直方图均衡化的核心函数。

直方图均衡化就是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内均匀分布,它对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。

OpenCV中实现直方图均衡化的核心函数是:cv2.equalizeHist()

双边滤波为什么能够在平滑图像的同时保留边缘信息?

双边滤波在计算某个像素点时不仅考虑距离信息,还会考虑色差信息,这种计算方式可以有效去除噪声的同时保护边缘信息。在通过双边滤波处理边缘的像素点时,与当前像素点色差较小的像素点会被赋予较大的权重。相反,色差较大的像素点会被赋予较小的权重,双边滤波正是通过这种方式来保护边缘信息。

解释OpenCV中cv2.threshold()函数的几种阈值处理方式

在OpenCV中,用于创建形态学操作结构元素的核心函数是什么?请列举该函数支持的常见形状,并编写核心代码创建一个半径为5像素的圆形(椭圆)结构元素。

OpenCV 中创建形态学操作结构元素(内核)的核心函数是:cv2.getStructuringElement(),该函数专为形态学操作(腐蚀、膨胀、开 / 闭运算等)设计,能快速生成规则形状的结构元素。

该函数支持的常见类型有:矩形(cv2.MORPH_RECT)、椭圆(cv2.MORPH_ELLIPSE)、十字形(cv2.MORPH_CROSS)

python 复制代码
import cv2
import numpy as np

# 1. 定义参数:半径5像素,计算结构元素尺寸
radius = 5
kernel_size = (2 * radius + 1, 2 * radius + 1)  # 尺寸为11×11

# 2. 创建半径5像素的圆形(椭圆)结构元素
# shape指定为cv2.MORPH_ELLIPSE,尺寸为11×11(保证圆形)
circular_kernel = cv2.getStructuringElement(
    shape=cv2.MORPH_ELLIPSE,
    ksize=kernel_size,
    anchor=(-1, -1)  # 锚点默认-1,-1(中心位置)
)

# 3. 打印验证结构元素(查看哪些位置为1,直观确认圆形)
print("半径5像素的圆形结构元素(11×11):")
print(circular_kernel)

# 可选:可视化结构元素(更直观看到圆形轮廓)
cv2.imshow("Circular Kernel (radius=5)", circular_kernel * 255)  # 乘以255将1转为255(白色)
cv2.waitKey(0)
cv2.destroyAllWindows()

简述图像⼏何变换与图像变换(频域变换)的区别。

本质不同:几何变换是空间形态调整(改像素位置 / 形状),频域变换是域转换操作(改像素值的编码方式);

目的不同:几何变换解决 "图像歪 / 偏 / 大小不合适",频域变换解决 "图像噪声 / 边缘提取 / 频率分析";

操作域不同:几何变换全程在空间域,频域变换需跨空间域 - 频率域转换。

空间域滤波与频率域滤波的基本思想有何不同?它们之间通过什么定理联系?

  • 基本思想核心差异:
    • 空间域滤波:直接在图像的像素坐标空间(x,y平面)操作,通过卷积核滑动加权求和,对局部像素进行实时处理(如均值模糊、Sobel边缘检测),核心是"局部像素直接运算"。
    • 频率域滤波:先通过变换(如傅里叶变换)将图像从空间域映射到频率域,对频率分量(低频=平滑区域,高频 = 边缘 / 噪声)进行选择性处理(如保留低频降噪、保留高频锐化),再通过逆变换还原回空间域,核心是"全局频率特征分析后处理"
  • 它们之间通过傅里叶变换卷积定理联系:空间域的卷积运算=频率域的乘积运算,反之亦然。即空间域滤波效果,完全等价于在频率域将图像频谱与滤波核频谱相乘后逆变换回空间域,这是频域滤波理论的基础。

简述梯度法和拉普拉斯算子检测边缘的异同点

相同:均基于微分检测灰度突变(边缘),对噪声敏感;

不同:梯度法是一阶微分、有方向、边缘粗且准;拉普拉斯是二阶微分、无方向、边缘细但易出双边缘且噪声敏感;

梯度法侧重边缘的 "存在与方向",拉普拉斯侧重边缘的 "精细程度"。

灰度数字图像有什么特点?

灰度数字图像是仅包含亮度信息、无彩色信息的数字图像,每个像素仅用一个数值表示其明暗程度,是图像处理中最基础的图像类型。

单通道结构:仅含 1 个颜色通道(RGB 彩色图为 3 通道),像素值直接对应亮度,无红、绿、蓝分量区分。

灰度值范围:8 位灰度图的像素值范围为0~255,0 代表纯黑色,255 代表纯白色,中间值对应不同深浅的灰色。

视觉表现:通过黑白灰的渐变呈现图像细节,仅依赖亮度差异区分物体轮廓、纹理,无色彩信息干扰。

存储高效:相同分辨率下,存储容量仅为 RGB 彩色图的 1/3,传输和处理时占用资源更少。

处理基础性:是多数图像处理算法(边缘检测、阈值分割、直方图均衡化等)的首选输入,简化计算复杂度,降低算法实现难度。

灰度图的核心是单通道、仅含亮度信息,以 0-255 灰度值呈现,存储高效且是图像处理的基础载体。

当图像的灰度级数逐渐减少时,会出现什么结果?

当图像的灰度级数逐渐减少时,图像会出现灰度分层(伪轮廓)现象,视觉上表现为色彩过渡不平滑,细节丢失,整体画质下降。

数字图像处理技术研究的 基本内容包括哪些?

数字图像处理的研究内容可概括为:"获取→预处理→增强 / 复原→分割→特征提取→分析理解" 的全流程,同时包含图像编码压缩这一实用技术模块,覆盖从底层像素操作到高层语义理解的完整链路。

简述研究图像增强的基本思路。

研究图像增强的基本思路可概括为 "明确目标→选择处理域→设计增强方法→验证效果" 的闭环流程,具体分 4 步:

  • 明确增强目标与问题:先分析图像缺陷(如对比度低、噪声多、细节模糊),结合场景需求确定核心目标(如降噪、提亮暗部、锐化边缘)。
  • 选择处理域:根据目标选空间域(直接操作像素,适合局部细节增强)或频域(先转频率分量,适合全局增强)。
  • 设计增强方法:
    空间域:用点运算(如直方图均衡化)或邻域运算(如滤波、锐化);
    频域:通过滤波(如低通降噪、高通锐化)处理频率分量,再逆变换回空间域。
  • 效果验证:用主观视觉感受(如细节清晰度)+ 客观指标(如对比度、信噪比)评估增强效果,调整方法直至达标。

图像平滑(低通滤波)的主要用途是什么?该操作对图像质量会带来什么负面影响?

图像平滑的核心是抑制高频分量(边缘噪声)、保留低频分量(平滑区域)

负面影响:边缘模糊、细节丢失、产生伪影,本质是高频有用信息(边缘、细节)与高频噪声被同时抑制。

什么叫做图像复原?图像复原与图像增强有何区别?

图像复原是数字图像处理中,针对图像在采集、传输、存储过程中产生的退化失真,通过建立退化模型并逆向求解,精准还原图像原始真实面貌的技术。其核心是 "针对性修复已知 / 未知的退化问题",比如消除运动模糊、校正光学畸变、去除传感器噪声等,本质是一种基于模型的逆向补偿过程。

图像复原:以 "真" 为目标,针对具体退化问题(如模糊、畸变),通过模型逆向修复,还原图像本来面貌;

图像增强:以 "好" 为目标,无需考虑退化原因,直接优化图像视觉效果或突出有用信息;

核心差异:复原是 "纠错还原",增强是 "优化提升"。

闭运算与膨胀运算相比有何优越性?

闭运算(先腐蚀后膨胀)是在膨胀运算基础上优化,其优越性主要体现在保留目标形态的同时消除噪声 ,完美解决了膨胀运算单独使用时的形态失真问题。

  • 保留目标原始形态,避免边缘加粗。
  • 消除噪声干扰,避免噪声放大。
  • 修复目标区域缺陷,同时维持整体结构

膨胀运算的问题:只 "扩张" 不 "还原",导致边缘加粗、噪声放大;

闭运算的优越性:"扩张 + 还原" 组合,在实现 "填充小孔、连接邻近目标" 的同时,保留目标原始形态、避免边缘加粗、不放大噪声,是更精准的形态学修复操作。

计算

直方图均衡化

解析:首先需要将表按照灰度级从低到高排序

  • 第一步计算每个灰度级的累积概率 = 当前灰度级之前(含有当前灰度级)的所有概率之和:
  • 第二步:计算新的灰度级:使用第一步求解的每个原始灰度级的累积概率*(题目给定的灰度级数L-1)得到新的灰度级,L=8;
    新的灰度级=每个原始灰度级的累积概率 *(L-1)= 7 * 每个原始灰度级的累积概率
  • 第三步:将新的灰度级四舍五入取整数得到最终的灰度级
  • 第四步,由于第三步可知,原始灰度和新灰度的映射关系(对应关系),新灰度的概率=对应的原始灰度的概率之和

    直方图均衡化后,原集中的灰度级被 "拉伸" 到更均匀的新灰度级(新概率分布更平缓),实现了图像对比度的提升。

遇到分数的数字最后四舍五入完之后化成该分数

边缘检测计算题

(1)分别给出Sobel算子水平方向和垂直方向的模板

Sobel算子水平方向模板:

Sobel算子垂直方向模板:

(2)计算出该图像中心的梯度幅度值和梯度方向。

GX相当于是用Sobel算子水平方向模板"压在"图像矩阵上(相乘),最后相加

GY相当于是Sobel算子垂直方向模板"压在"图像矩阵上(相乘),最后相加

梯度幅度值

梯度方向(写反了Gy除以GX)

区域生长计算题



腐蚀膨胀计算题

代码

对数变换

python 复制代码
def log(c, img_Gray):
	output = c * np.log(1.0 + img_Gray)
	output = np.uint8(output + 0.5)
	return output

伽马变换

python 复制代码
def gamma_trans(img, c, gammal):
	output_img = c * np.power(img / float(np.max(img)), gammal) * 255.0
	output_img = np.uint8(output_img)
	return output_img

均值滤波

python 复制代码
import cv2
img = cv2.imread(......)
img1 = cv2.blur(img,(3, 3))			# 卷积核为3 * 3 实现均值滤波

cv2.imshow("N = 3 image", img1) 	# 展示
cv2.waitKey()
cv2.destoryAllWindows()

高斯滤波

python 复制代码
img2 = cv2.GaussianBlur(img, (3, 3), 0, 0)			# 卷积核为 3 * 3
cv2.imshow(......)
cv2.waitKey()
cv2.destoryAllWindows()

中值滤波

python 复制代码
img3 = cv2.medianBlur(img, 3)					# 使用卷积核为3 * 3 的中值滤波

双边滤波

python 复制代码
img4 = cv2.bilateralFilter(img, 30, 50, 100)			# 滤波半径30

Numpy库实现图像傅里叶变换及逆变换

python 复制代码
# 傅里叶变换
fft_img = np.fft.fft2(img)
fft_shift = np.fft.fftshift(fft_img)
fft_res = np.log(np.abs(fft_shift))

# 傅立叶逆变换
ifft_shift = np.fft.ifftshift(fft_shift)
ifft_img = np.fft.ifft2(ifft_shift)
ifft_img = np.abs(ifft_img)

OpenCV实现傅立叶变换

python 复制代码
# 傅立叶变换
dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)
dftshift = np.fft.fftshift(dft)
res1 = 20 * np.log(cv2.magnitude(dftshift[:,:, 0], dftshift[:, :, 1]))

# 傅立叶逆变换
ishift = np.fft.ifftshift(dftshift)
iimg = cv2.idft(ishift)
res2 = cv2.magnitude(iimg[:, :, 0], iimg[:, :, 1])

实现二值图像腐蚀运算

python 复制代码
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(img, kernel, iterations = 1)

实现图像膨胀运算

python 复制代码
kernel = np.ones((5, 5), np.uint8)
dilation = cv2.dilate(img, kernel, iterations = 1)

开运算

python 复制代码
img = color.rgb2gray(io.imread(......))
dst = sm.opening(img, sm.disk(4))		# 用直径为4的圆形滤波器进行开运算

闭运算

python 复制代码
kernel = np.ones((5, 5), np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

Prewitt算子

python 复制代码
kernelx = np.array([1, 1, 1], [0, 0, 0], [-1, -1, -1], dtype=int)
kernely = np.array([-1, 0, 1], [-1, 0, 1], [-1, 0, 1], dtype=int)
x = filter2D(grayImage, cv2.CV_16S, kernelx)
y = filter2D(grayImage, cv2.CV_16S, kernely)

absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Prewitt = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)

Sobel算子

python 复制代码
sobelX = cv2.Sobel(img, cv2.CV_16S, 1, 0)
sobelY = cv2.Sobel(img, cv2.CV_16S, 0, 1)
sobelX = cv2.convertScaleAbs(sobelx)
sobelY = cv2.convertScaleAbs(sobelY)
sobelCombined = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)

LoG算子检测

python 复制代码
def log(gray):
	gaussian = cv2.GaussianBlur(gray, (3, 3), 0)
	# 在通过拉普拉斯算子做边缘检测
	dst = cv2.Laplacian(gaussian, cv2.CV_16S, ksize=3)
	log = cv2.convertScaleAbs(dst)
	return log
相关推荐
love530love14 小时前
EPGF 新手教程 12在 PyCharm(中文版 GUI)中创建 Poetry 项目环境,并把 Poetry 做成“项目自包含”(工具本地化为必做环节)
开发语言·ide·人工智能·windows·python·pycharm·epgf
cute_ming14 小时前
从 Node.js + TypeScript 无缝切换到 Python 的最佳实践
python·typescript·node.js
2501_9418705614 小时前
从配置频繁变动到动态配置体系落地的互联网系统工程实践随笔与多语言语法思考
java·前端·python
西西弗Sisyphus15 小时前
Python FastAPI 和 Uvicorn 同步 (Synchronous) vs 异步 (Asynchronous)
python·fastapi·uvicorn
MistaCloud15 小时前
Pytorch深入浅出(十三)之模型微调
人工智能·pytorch·python·深度学习
菜的不敢吱声15 小时前
swift学习第2,3天
python·学习·swift
AI小怪兽15 小时前
基于YOLO11的航空安保与异常无人机检测系统(Python源码+数据集+Pyside6界面)
开发语言·人工智能·python·yolo·计算机视觉·无人机
songroom15 小时前
python: 扣子工作流创建与dbpystream api 自主插件开发
python
山土成旧客15 小时前
【Python学习打卡-Day36】实战重构:用PyTorch神经网络升级信贷预测项目
python·学习·重构
276695829215 小时前
dy x-tt-session-dtrait 逆向分析
python·node·dy·dy逆向·抖音请求头逆向·session-dtrait·dtrait