k210———图像处理函数

k210———图像处理函数(openmv)

以下是在学习过程中遇到的一些比较高级的图像处理


文章目录

  • k210———图像处理函数(openmv)
    • 1. img.erode()
    • 2. img.binary()
    • 3. image.get_regression()
    • 4. image.histeq()
    • 5. image.laplacian()

1. img.erode()

openmv官方解释为
image.erode(size[, threshold[, mask=None]])
从分割区域的边缘删除像素
这一方法通过卷积图像上 ( ( s i z e ∗ 2 ) + 1 ) x ( ( s i z e ∗ 2 ) + 1 ) ((size*2)+1)x((size*2)+1) ((size2)+1)x((size2)+1)像素的核来实现,如果相邻像素集的总和小于 threshold ,则对内核的中心像素进行归零。
若 threshold 未设定,这个方法的功能如标准腐蚀方法一样。若threshold设定,您就可以指定腐蚀的特定像素,例如:设置低于2个的像素周围阈值为2。
mask 是另一个用作绘图操作的像素级掩码的图像。掩码应该是一个只有黑色或白色像素的图像,并且应该与你正在绘制的 image 大小相同。 仅掩码中设置的像素被修改。
返回图像对象,以便您可以使用 . 表示法调用另一个方法。
不支持压缩图像和bayer图像。

感觉有点难,没听懂,所以去找了其他资料了解了一下

腐蚀
作用:腐蚀是一种基本的形态学图像处理操作,它可以使图像中的边界或者物体变得更细小
具体来说,腐蚀操作将图像中的每个像素点与其周围的邻域像素进行比较,并将该像素的值更新为邻域中最小的像素值。通过不断迭代腐蚀操作,可以逐渐减小图像中物体的尺寸,使其变得更加细小。
腐蚀操作在图像处理中有多种应用,常见的包括:

  1. 去除噪点:腐蚀操作可以消除图像中的小噪点或者孤立的像素点,使图像更加清晰
  2. 分离连接的物体:当图像中存在多个相连的物体时,腐蚀操作可以分离它们, 使其变成独立的物体。
  3. 缩小物体:腐蚀操作可以将图像中的物体尺寸减小,有助于进行形态> 学分析和 形状匹配。


在图像处理中,核(Kernel)是一种用于卷积操作的矩阵。腐蚀操作是一种常见的图像处理操作,通过使用核来删除图像中边缘附近的像素。
当核的大小为2时【img.erode(2)】,表示使用一个3*3的矩阵作为核。核的中心像素表示要处理的像素,而周围的8个像素被用来计算是否需要将中心像素进行腐蚀。
1 1 1
1 1 1
1 1 1
在腐蚀操作中,如果核的所有元素都与图像中对应位置的像素匹配,则中心像素被保留,否则中心像素被置零。通过这种方式,腐蚀操作可以删除图像中边缘附近的像素。
请注意,核的大小越大,腐蚀操作会更加明显,因为更多的周围像素参与了计算。在使用具体的核大小时,需要根据实际情况进行调整,以达到期望的腐蚀效果。

阈值
在 image.erode() 函数中使用阈值参数 threshold 的作用是对特定像素进行腐蚀操作,并且只有当相邻像素的总和小于阈值时才会将中心像素置零。
通过设定阈值,你可以选择性地对像素进行腐蚀,而不是对整个图像进行标准的腐蚀操作。

举个例子,如果你将阈值设为 2,那么只有周围像素总和小于 2 的像素才会被腐蚀。
这种方式可以帮助你控制腐蚀的效果,只对一些特定像素周围的邻域进行操作,而对其他像素保持不变。根据阈值的设定,你可以选择性地保留或删除较小的细节或噪点,从而改变图像的外观。

import sensor  # 导入相机模块
import image   # 导入图像处理模块

sensor.reset()  # 重置相机
sensor.set_pixformat(sensor.RGB565)  # 设置像素格式为RGB565
sensor.set_framesize(sensor.QVGA)    # 设置帧大小为QVGA(320x240)
sensor.run(1)  # 开始相机

while True:
    img = sensor.snapshot()  # 拍摄图像

    img.erode(2, threshold=10)  # 对图像进行腐蚀操作,大小为2,阈值为10

2. img.binary()

image.binary(thresholds[, invert=False[, zero=False[, mask=None ]]]
对图像进行二值化处理。
根据阈值列表 thresholds 内的阈值,将图像中的像素设置为黑色或白色。
对于灰度图像,thresholds 列表中的每个元组应包含两个值,即最小灰度值和最大灰度值。只有落在这些阈值之间的像素区域会被考虑。

对于RGB565图像,thresholds 列表中的每个元组应包含六个值,分别是 LAB L、A 和 B 通道的最小值和最大值。该函数会自动修复交换最小值和最大值的错误,并忽略多余的值。如果元组长度不够,则假设剩余的阈值范围是最大范围。

invert=False,可以选择是否反转二值化结果,默认情况下是将像素落在阈值范围内的区域设置为白色,反转后则会设置为黑色。

设置 zero 为True来使阈值像素为零,并使不在阈值列表中的像素保持不变
mask 是另一个用作绘图操作的像素级掩码的图像。掩码应该是一个只有黑色或白色像素的图像,并且应该与你正在绘制的 image 大小相同。 仅掩码中设置的像素被修改。

3. image.get_regression()

image.get_regression(thresholds[, invert=False[, roi[, x_stride=2[, y_stride=1[, area_threshold=10[, pixels_threshold=10[, robust=False]]]]]]])
官方解释
对图像所有阈值像素进行线性回归计算。计算式通过最小二乘法进行,通常速度较快,但是不能出路任何异常值。若 robust 为True,则使用Theil-Sen线性回归算法,它计算图像中所有阈值像素的斜率的中位数

若在阈值处理后有太多像素,即使在80x60的图像上,这个O(N^2)操作也可能将FPS降到5帧以下。 但是,只要阈值转换后的像素数量较少,即使在高达30%的阈值像素是异常值的情况下也依然有效,鲁棒性好
返回的是一个 image.line 对象(这个是运用这个函数的关键)
官方有更好的解释,这个例子中就使用了很多我们不常用,但是非常好的图像处理函数,下面也会讲到。线性回归线跟踪案例

自己的理解
image.get_regression() 函数用于对图像中的阈值像素进行线性回归计算。
线性回归是一种用于建立变量之间关系的统计模型,通过最小二乘法来确定变量之间的线性关系。在图像处理中,线性回归可以用来找到阈值像素之间的线性趋势或关联。
该函数有以下参数:

  • thresholds:阈值列表或阈值图像,指定要进行回归分析的阈值。阈值像素是满足特定条件的像素值,比如大于某个固定值或位于某个范围内的像素。
  • invert(可选):如果设置为 True,则将在反向图像上执行回归计算。即计算与低于阈值的像素相关的线性关系。
  • roi(可选):指定感兴趣区域(Region of Interest),只对指定区域内的像素进行回归计算。
  • x_stridey_stride(可选):指定在图像中采样的步长,用于减少计算的像素数量。
  • area_thresholdpixels_threshold(可选):控制回归计算的像素数量。如果阈值像素过多,这个计算操作可能会降低帧率。可以设置这两个参数来限制计算的像素数量。
  • robust(可选):如果设置为 True,则使用 Theil-Sen 线性回归算法,它计算所有阈值像素的斜率的中位数。Theil-Sen 算法对异常值有鲁棒性,能够有效处理存在较多异常值的数据
    调用 image.get_regression() 函数后,将返回线性回归的计算结果,通常是计算出的斜率和截距。
    该函数对图像的影响是计算出阈值像素之间的线性关系。这可以用于分析图像中的趋势检测特定区域的变化或关联等应用。通过线性回归,我们可以了解阈值像素的变化规律,并用来进行进一步的图像处理、检测或分析。

4. image.histeq()

image.histeq() 函数用于在图像上执行直方图均衡化算法,以标准化图像的对比度和亮度
直方图均衡化是一种通过重新分配图像的像素值来增强图像对比度的方法。该方法可以使得图像中的像素值更加均匀地分布在整个灰度级范围内,从而增强图像的细节和对比度。
该函数有以下参数:

  • adaptive(可选):如果设置为 True,则会运行自适应直方图均衡化方法。自适应直方图均衡化通常比非自适应直方图均衡化效果更好,但需要更长的运行时间。
  • clip_limit(可选):提供一种限制自适应直方图均衡化对比度的方法。通过设置较小的值(例如10),可以生成具有受限对比度的直方图均衡化图像。
  • mask(可选):一个像素级的掩码图像,可以作为绘图操作的限制。只有掩码中设置的像素会被修改。
    调用 image.histeq() 函数后,它将返回一个新的图像对象,你可以使用该对象调用其他图像处理方法。
    直方图均衡化可以改善图像的对比度和亮度,使得图像中的细节更加清晰可见。它可以应用于各种图像处理任务,包括图像增强、特征提取和图像分析等。
    需要注意的是,该函数不支持压缩图像和 Bayer 图像。在使用时,要根据实际需求选择适当的参数,并根据图像的特点进行实验以获得最佳结果。

5. image.laplacian()

image.laplacian(size[, sharpen=False[, mul[, add=0[, threshold=False[, offset=0[, invert=False[, mask=None]]]]]]])
官方解释
通过边缘检测拉普拉斯核来对图像进行卷积。
size 是内核的大小。取1 (3x3 内核)、2 (5x5 内核)或更高值。

如果 sharpen 被设置为True,那么这种方法将改为锐化图像,而不是仅输出未经过阈值处理的边缘检测图像。 增加内核大小然后增加图像清晰度。

mul 是用以与卷积像素结果相乘的数字。若不设置,则默认一个值,该值将防止卷积输出中的缩放。

add 是用来与每个像素卷积结果相加的数值。

mul 可进行全局对比度调整,add可进行全局亮度调整。

如果你想在滤波器的输出上自适应地设置阈值,你可以传递== threshold=True== 参数来启动图像的自适应阈值处理, 他根据环境像素的亮度(核函数周围的像素的亮度有关),将像素设置为1或者0。 负数 offset 值将更多像素设置为1,而正值仅将最强对比度设置为1。 设置 invert 以反转二进制图像的结果输出。

mask 是另一个用作绘图操作的像素级掩码的图像。掩码应该是一个只有黑色或白色像素的图像,并且应该与你正在绘制的 image 大小相同。 仅掩码中设置的像素被修改。

返回图像对象,以便您可以使用 . 表示法调用另一个方法。

不支持压缩图像和bayer图像。

自己的理解
边缘检测拉普拉斯核函数主要用于检测图像中的边缘信息。它通过将图像与一个特定的内核进行卷积运算来实现。内核的大小可以通过 size 参数来设置,一般取1、2或更高值。内核越大,图像的细节和清晰度可能会增加,但也会增加计算复杂性

如果将 sharpen 参数设置为True,那么该函数将不仅仅输出经过阈值处理的边缘检测图像,还会对图像进行锐化处理。通过增加内核大小并适当调整 muladd 参数,可以实现全局对比度和亮度的调整。

此外,你还可以使用 mask 参数来指定一个像素级掩码的图像,以限制在绘制操作中被修改的像素

总之,边缘检测拉普拉斯核函数在图像处理中具有多种用途,例如边缘检测、图像锐化、对比度和亮度调整等。它可以帮助提取图像中的边缘特征,并通过调整参数来达到所需的效果。

你可能感兴趣的:(k210,图像处理,计算机视觉,人工智能,python,笔记)