2024年MATLAB:Image Processing Toolbox工具箱入门实战(3)

本文介绍了利用Sobel算子进行裂纹检测的MATLAB实践。首先解释了Sobel算子的原理,包括一阶导数在边缘检测中的作用,以及Sobel算子相对于Prewitt算子的改进。接着提供了MATLAB代码示例,展示Sobel算子如何用于图像锐化和裂纹检测,以及后续的去噪和特征统计直方图。同时,对比了Canny算子的Python实现。
摘要由CSDN通过智能技术生成

I = imread('rice.png');
% imshow(I)

% strel 对象表示一个平面形态学结构元素,该元素是形态学膨胀和腐蚀运算的重要部分。
se = strel('disk',15);
% 开操作Open先对图像进行腐蚀操作,然后再进行膨胀操作的组合过程,可以用于消除小的物体或细节,并且可以平滑物体的边界
% 闭操作Close则相反,它是先对图像进行膨胀操作,然后再进行腐蚀操作的组合过程。可以用于填补小的空洞或裂缝,并且也可以平滑物体的边界。
% imopen执行形态学开操作,然后得到背景
background = imopen(I,se);
% imshow(background)
I2 = I - background;
% 默认情况下,imadjust 对所有像素值中最低的 1% 和最高的 1% 进行饱和处理。此运算可提高输出图像的对比度。
I3 = imadjust(I2);
bw = imbinarize(I3);  % 使用 imbinarize 函数将灰度图像转换为二值图像
bw = bwareaopen(bw,50);  % 使用 bwareaopen 函数去除图像中的背景噪声。
cc = bwconncomp(bw,4);  % bwconncomp查找二值图像中的连通分量
% cc.NumObjects
labeled = labelmatrix(cc);  % 使用 labelmatrix 根据 bwconncomp 的输出创建标签矩阵,将二进制图像中的连通分量标记为唯一的整数值。使用标签矩阵可视化不同的连通分量。
RGB_label = label2rgb(labeled,'spring','c','shuffle');  % 为了更容易区分不同的连通分量,使用label2rgb将标签矩阵显示为RGB图像,并对标签的颜色随机。
% imshow(RGB_label)
graindata = regionprops(cc,'basic');  % regionprops返回二值图像中每个8连通分量(对象)的属性集的测量值。
grain_areas = [graindata.Area];
histogram(grain_areas)
title('Histogram of Rice Grain Area')

4.实战项目三:利用Sobel算子进行裂纹检测

Sobel算子实现步骤:

1.首先需要两个方向(水平和竖直方向)的滤波核:

S_x=\begin{bmatrix} -1 &0 &1 \ -2 &0 &2 \ -1 &0 &1 \end{bmatrix},S_y=\begin{bmatrix} -1 &-2 &-1 \ 0 &0 &0 \ 1 &2 &1 \end{bmatrix}=S_{x}^{T}

这是因为边缘检测的目的标识数字图像中亮度变化明显的点图像属性中的显著变化通常反映了属性的重要事件和变化。所以通常说来图像中梯度较大的点代表着边缘。边缘检测方法分为两类:

  • 基于搜索:利用一阶导数最大值检测边缘。通过寻找图像一阶导数中的最大值检测边界,然后利用计算结果估计边缘的局部
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值