模糊算法之图像边缘检测--逐行解析

import numpy as np
import skfuzzy as fuzz
from skimage import filters, io, color
import matplotlib.pyplot as plt
# 模糊算法之图像边缘检测:输出sobel filte 、fuzzy logic
# 读取图像并转换为灰度
image = io.imread('D:\\test.jpg')
gray_image = color.rgb2gray(image)

# 使用 Sobel 滤波器进行边缘检测;Sobel 滤波器通过计算图片的亮度函数的一阶导数来工作,这样可以找出图像中亮度变化最为明显的地方,也就是边缘的位置。
edges_sobel = filters.sobel(gray_image)

# 定义模糊集,用于边缘检测结果的模糊化
x = np.linspace(-1, 1, 100) # 用于在指定的间隔内返回均匀间隔的数字,返回一个NumPy数组,该数组包含从-1到1的100个等间隔的数值。
low = fuzz.trimf(x, [-1, -1, 0]) # x:定义模糊集的输入空间,通常是一个NumPy数组。[-1, -1, 0]:定义三角形的顶点,这里顶点的位置分别是-1、-1和0。所以,fuzz.trimf(x, [-1, -1, 0])会返回一个与输入x相同大小的NumPy数组,表示x中每个值对应的模糊集成员资格程度。这个三角形模糊集的特点是,在-1及其左侧的值的成员资格度为1,然后线性下降到0在的位置,0及其右侧的值的成员资格度为0。
medium = fuzz.trimf(x, [-1, 0, 1]) # 这个三角形模糊集的特点是,在-1处的值的成员资格度为0,然后线性上升到0处,0处的值的成员资格度为1,再然后线性下降到1处,1处及其右侧的值的成员资格度为0。这样的模糊集常常用于表示“中等”这样的模糊概念。
high = fuzz.trimf(x, [0, 1, 1]) # 这个三角形模糊集的特点是,在0及其左侧的值的成员资格度为0,然后线性上升到1处,1及其右侧的值的成员资格度为1。这样的模糊集常常用于表示“非常大”或者“非常正”这样的模糊概念。

# 模糊化边缘检测结果
edges_fuzzy = np.zeros_like(edges_sobel) # np.zeros_like() 函数生成与给定数组形状和类型相同的新数组,但所有元素都初始化为零。
edges_fuzzy[edges_sobel < 0.5] = fuzz.interp_membership(x, low, edges_sobel[edges_sobel < 0.5]) # 最后一个空是一个标量值,我们想要知道这个值在模糊集合中的隶属度。
edges_fuzzy[edges_sobel == 0.5] = fuzz.interp_membership(x, medium, edges_sobel[edges_sobel == 0.5])
edges_fuzzy[edges_sobel > 0.5] = fuzz.interp_membership(x, high, edges_sobel[edges_sobel > 0.5])

# 显示结果
# 创建一个新的图形(Figure)和子图(Axes)。
fig, ax = plt.subplots(1, 3, figsize=(15, 5)) # 创建了一行三列的子图网格,图形的尺寸是 15x5 英寸。fig 是整个图形对象,ax 是一个包含三个子图对象的列表。
ax[0].imshow(gray_image, cmap='gray') # 第一个子图上显示了 gray_image 图像。cmap='gray' 说明选择灰度色彩映射来显示图像。
ax[0].set_title('Original Image')
ax[1].imshow(edges_sobel, cmap='gray')
ax[1].set_title('Edges - Sobel Filter')
ax[2].imshow(edges_fuzzy, cmap='gray')
ax[2].set_title('Edges - Fuzzy Logic')
#循环遍历每个子图,并关闭它们的轴。a.axis('off') 会关闭子图的坐标轴,使得图像没有任何坐标轴或标签,这样可以更好地显示图像本身。
for a in ax:
    a.axis('off')

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值