首页 > 其他分享 >图像处理技巧形态学滤波之腐蚀操作

图像处理技巧形态学滤波之腐蚀操作

时间:2023-08-11 21:33:59浏览次数:41  
标签:plt image 滤波 selem 形态学 腐蚀 图像处理 ax erosion

1. 引言

欢迎回来,我的图像处理爱好者们!今天,让我们深入研究图像处理领域中的形态学计算。这些非线性的图像处理技术允许我们操纵图像中对象的形状和结构。在本系列中,我们将依次介绍四种基本的形态学操作:腐蚀、膨胀、开操作和闭操作。

闲话少说,我们直接开始吧!

2. 腐蚀操作原理

腐蚀是常见的形态学操作之一,它通过从图像边界中去除像素来精细地缩小图像中的对象。具体而言,它通过考虑每个像素的邻域并将其值设置为该邻域中所有像素中的最小值来实现这一点。在二进制图像中,如果任何相邻像素的值为0,则输出像素也设置为0。

接着,让我们通过具体示例来进行讲解,首先导入我们今天的图像,代码如下:

# Define the image
original_image = np.array([[0, 0, 0, 0, 0, 0, 0, 0],
                           [0, 0, 0, 1, 1, 1, 0, 0],
                           [0, 0, 1, 1, 1, 1, 0, 0],
                           [0, 1, 1, 1, 1, 0, 0, 0],
                           [0, 1, 1, 1, 0, 0, 0, 0],
                           [0, 1, 1, 1, 0, 0, 0, 0],
                           [0, 0, 0, 0, 0, 0, 0, 0],
                           [0, 0, 0, 0, 0, 0, 0, 0]])

plt.figure(figsize=(10,10))
plt.imshow(original_image, cmap='gray', extent=[0, 8, 0, 8])
plt.title('Original Image', fontsize=20);

得到结果如下:

图像处理技巧形态学滤波之腐蚀操作_图像处理

接下来是定义结构化元素,对于这个例子,让我们使用十字架作为我们的选择:

# Define the structuring element
selem_cross = np.array([[0,1,0],
                        [1,1,1],
                        [0,1,0]])
plt.figure(figsize=(9,9))
plt.imshow(selem_cross, cmap='gray')
plt.title('Structuring Element: Cross', fontsize=20);

得到结构化元素可视化效果如下:

图像处理技巧形态学滤波之腐蚀操作_图像处理_02

3. 腐蚀操作效果

经过上述操作,我们定义了需要操作的原始图像和相应的结构化模板元素,接着我们使用函数apply_erosion 来将上述结构化模板元素作用于相应的图像中,代码如下:

def apply_erosion(image, selem):
    # Perform erosion on the given image using the structuring element, selem
    eroded_image = erosion(image, selem)

    # Display the original and eroded images
    fig, axes = plt.subplots(1, 3, figsize=(15, 10))
    ax = axes.ravel()
    
    ax[0].imshow(selem, cmap='gray', 
                 extent=[0, selem.shape[1], 0, selem.shape[0]])
    ax[0].set_title('Structuring Element', fontsize=20)

    ax[1].imshow(image, cmap='gray', 
                 extent=[0, image.shape[1], 0, image.shape[0]])
    ax[1].set_title('Original Image', fontsize=20)

    ax[2].imshow(eroded_image, cmap='gray', 
                 extent=[0, image.shape[1], 0, image.shape[0]])
    ax[2].set_title('Eroded Image', fontsize=20)

    plt.tight_layout()
    plt.show()

# Apply erosion on the original image with cross structuring element
apply_erosion(original_image, selem_cross)

得到结果如下:

图像处理技巧形态学滤波之腐蚀操作_图像处理_03

观察上述输出,可以看到经过变换后的图对应的是原始图像的图的缩小版,这就是腐蚀操作的效果。大家可以通过下列动图进行更加详细的理解,样例图如下:

图像处理技巧形态学滤波之腐蚀操作_图像处理_04

4. 其他效果

需要注意的是,腐蚀操作中使用的邻域大小或结构元素的选择会对结果产生不同的影响。我们可以通过选择不同的结构元素,如正方形、圆盘或自定义形状,以实现基于所需结果的特定腐蚀的效果。

例如,如果我选择使用一个正方形作为我的结构元素,代码如下:

# Define the structuring element 
selem_square = np.array([[0,0,0,0],
                         [0,1,1,0],
                         [0,1,1,0],
                         [0,0,0,0]])

# Apply erosion on the original image with square structuring element
apply_erosion(original_image, selem_square)

得到被侵蚀的图像将看起来像这样:

图像处理技巧形态学滤波之腐蚀操作_图像处理_05

5. 总结

腐蚀的主要目的是去除零散的早点和细线,从而只保留实质性的物体。在我们施加腐蚀操作后,剩余的线条看起来更加细,图像中对象的形状看起来更小。腐蚀蚀通常是对象分割和边界提取等任务中必备的基础操作。

您学废了嘛?

标签:plt,image,滤波,selem,形态学,腐蚀,图像处理,ax,erosion
From: https://blog.51cto.com/u_15506603/7052911

相关文章

  • 数字图像处理
    图像增强图像增强分为两类:空间域增强和频域增强灰度变换点对点的灰度映射\(g(x,y)=T[f(x,y)]\)很明显,在这个式子中可以看出,灰度变换只是一种对于像素值的改变基本灰度变换函数线性函数反转变换,恒等变换等图像反转将低灰度的像素变为高灰度,高灰度变为低灰度目的可以突出......
  • 图像处理,加速
    遍历图片:关于Python使用numba加速图像遍历_python加速cv2代码_FlyDremever的博客-CSDN博客python日记(二):密集计算加速(双重for循环为例)_pythonfor循环加速_五月的echo的博客-CSDN博客卷积时加速:python图像遍历优化的方法总结(以中值滤波为例)_陨星落云的博客-CSDN博客for循......
  • 数字图像处理基础
    数字图像的感知和获取图像是光与场景中的物质相互作用形成的,物质会对光进行反射与吸收一幅图像记录的是物体辐射能量的空间分布:\[I=f(x,y,z,\lambda,t)\]这个函数是描述光强关于空间位置,频率,时间的一般我们讨论的是平面单色静止图像,因此一个空间维度和后面的频率维度,时间维......
  • 三种常见的平滑滤波方法
    一、概述  平滑滤波,顾名思义就是对信号进行处理使之整体显得更加平滑,降低噪声影响,提高信号质量,它常见于数学信号处理和图像处理,一般意义上的数字信号多体现于一维数据,图像信号多体现于二维数据。  均值滤波、中值滤波、高斯滤波是三种常见的平滑滤波方法,其中均值滤波和高斯......
  • 卡尔曼滤波二维图像点跟踪
    原理参考https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%B0%94%E6%9B%BC%E6%BB%A4%E6%B3%A2代码#include<Eigen/Core>#include<Eigen/Dense>#include"opencv2/highgui/highgui.hpp"#include"opencv2/video/tracking.hpp"#include<ios......
  • 常用滤波
    常用滤波文档参考:https://sneak.blog.csdn.net/article/details/129629485常用滤波文档参考:https://sneak.blog.csdn.net/article/details/12962948未添加滤波算法main函数while(1){ HAL_ADC_Start(&hadc1); //开启ADC1,放置在while循环中 ADC_value=HAL_ADC_Get......
  • 信号的频谱分析与信号滤波
    信号的频谱分析与信号滤波试验目的:熟悉信号的频谱分析与信号滤波。信号的频谱分析例、建立一个含50Hz和120Hz幅值为2的正弦信号(sin),然后叠加一个幅值为1的随机信号,利用Matlab分析其频谱。并滤除噪声信号和120Hz正弦信号。实验提示:1、FFT谱分析:利用FFT分析含噪声的时域信号的频率组......
  • OpenCV图像处理技巧之空间滤波
    1.引言再次问好,图像处理爱好者们!......
  • 图像处理
    一:opencv中的绘图函数和几何变换图像平移,rows和cols需要反置;缩放下采样和上采样二:图像增强高斯滤波/中值滤波直方图均衡化,Gamma变化:对输入图像灰度值进行的非线性操作使输出图像灰度值与输入图像灰度值呈指数关系(指数大于1变亮小于1变暗) 三:形态学主要用于从图像中提取对......
  • 【ML算法基础】一欧元滤波器
    前言  参考1. 算法笔记|一欧元滤波器(1€Filter,OneEuroFilter);2. 1€FilterDemo;3. 一欧元滤波器(OneEuroFilter)_胖胖腐乳的博客-CSDN博客;4. NoiseFilteringUsing1€Filter|JaanTollanderdeBalsch;5.paper_ASimpleSpeed-basedLow-passFilte......