一、获取代码方式

获取代码方式1:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

获取代码方式2:
完整代码已上传我的资源:【裂痕识别】基于matlab阈值裂痕+划痕检测【含Matlab源码 467期】

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、简介

1 阈值
我们将图像分块最简单的方法就是设定一个阈值对图像进行二值化处理,那么这个阈值我们应该如何选择呢

对于图像的直方图存在明显边界的图像,我们可以很容易找到这个阈值,但是如果图像直方图分界不明显,那么这个阈值的寻找将变得十分困难。因此我们存在全局阈值与局部阈值两种。

2 全局阈值
全局阈值就是在整幅图像中我们只有一个阈值来对图像进行二值化,但是其存在其局限性,例如图像中存在高斯噪声的情况下,我们无法找到一个很好的阈值将图像的边界分开

另外如果图像的边界是在局部对比下出现的,即不同位置阈值不同,那么全局阈值的效果也非常不好。

我们先不管全局阈值的缺点,我们来看看我们如何通过计算来获得这个全局阈值T呢?我们又OTSU’S算法。

下面是一些数学概念在图像上的体现

OTSU算法就是想把图像分为两个块,然后使得这两个块之间的方差最大,也就是最大化两个块的均值与全局均值的差的平方


由于只存在这么一个阈值,那么我们在计算的时候可以简单地让这个值遍历0-255,然后找到σB最大的值,这个值就是我们要的阈值。我们可以理解为这个值把图像分为了相距最远的两块。我们在matlab中有graythresh这个函数来实现这个过程。

下图就显示了一个OTSU算法不是很理想的例子。

为了克服以上缺点我们有两点解决方法:1.先通过低通滤波器去噪再用OTSU 2.只在考虑边缘部分的像素来计算阈值,这样可以大大减少其他不重要部分对阈值计算过程的影响

3 局部阈值
下面让我们来看看局部阈值/自适应阈值。它的原理就是将图像分块,对于不同的部分应用不同的阈值,在matlab中我们有blockproc这个函数来实现这个过程

我们看到相比于之前,效果确实有很大的提升,但是缺点也特别明显,就是图像会出现分块化

我们可以调小块的大小,但是这样的话会出现如果块内像素值变化不大的话,块内像素被全部分作黑或白而缺失了边界(例如右上角窗户的上方黑色的窗框内有白色的像素块)。因此块的选择是十分重要的。

更好的方式是我们在每个像素周围的一个区域内来计算阈值,根据这个块内的均值方差来计算这个像素的值是1还是0


4 RGB图阈值
除了将阈值在灰度图上应用,我们还可以将其应用在RGB图中,我们可以设定一种颜色,来得到与这种颜色相近颜色的物体

例如我们取下图丝带的颜色可以得到如右图的结果

三、部分源代码

close all; clear; clc;
warning off all;
%% 第一类划痕1-1.jpg 1-2.jpg
I = imread('1-1.jpg');
IGrey = rgb2gray(I);
%IGrey = adapthisteq(IGrey);  % Contrast-limited adaptive histogram equalization (CLAHE)
Ibw = im2bw(IGrey);% Ibw是二值图像,不需要求阈值
Ibw = ~Ibw;
Ibw = bwareaopen(Ibw,20)        ;%将小于XX像素的单元去掉
figure,
subplot(1,2,1)
imshow(I);
title('原图');
subplot(1,2,2)
imshow(Ibw);
title('划痕检测图');I = imread('1-2.jpg');
IGrey = rgb2gray(I);
level = graythresh(IGrey)
Ibw = im2bw(IGrey,level);% Ibw是二值图像,不需要求阈值
Ibw = ~Ibw;
figure,
subplot(1,2,1)
imshow(I);
title('原图');
subplot(1,2,2)
imshow(Ibw);
title('划痕检测图');
%% 第二类划痕2-1.jpg 2-2.jpg
I = imread('2-1.jpg');
IGrey = rgb2gray(I);
w2 = fspecial('average',[15 15]);    %% 先定义一个滤波器
IMean = imfilter(IGrey,w2,'replicate');       %%让图像通过滤波器
result = abs(imsubtract(im2double(IGrey),im2double(IMean)));
maxValue = max(max(result));
threshod = maxValue * 0.3;
result(result >= threshod) = 1;
result(result < threshod) = 0;
Ibw = bwareaopen(im2uint8(result),10);%将小于XX像素的单元去掉
figure,
subplot(1,2,1)
imshow(I);
title('原图');
subplot(1,2,2)
imshow(Ibw);
title('划痕检测图');I = imread('2-2.jpg');
IGrey = rgb2gray(I);
w2 = fspecial('average',[15 15]);    %% 先定义一个滤波器
IMean = imfilter(IGrey,w2,'replicate');       %%让图像通过滤波器
result = abs(imsubtract(im2double(IGrey),im2double(IMean)));
maxValue = max(max(result));

四、运行结果




五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

【裂痕识别】基于matlab阈值裂痕+划痕检测【含Matlab源码 467期】相关推荐

  1. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  2. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  3. 【Matlab水果识别】苹果质量检测及分级系统(带面板)【含GUI源码 1613期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]苹果质量检测及分级系统(带面板)[含GUI源码 1613期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  4. 基于Opencv的车距检测系统(源码&教程)

    1.研究背景 对本车前方车辆的识别及距离检测是计算机视觉技术在智能网联汽车中的一个重要内容.要想在错综繁杂的交通环境中实现无人驾驶,对行车环境中其他车辆信息的获取是十分重要的.因此,对本车前方车辆的识 ...

  5. Python基于OpenCV监控老鼠蟑螂检测系统[完整源码&部署教程]

    1.视频演示: [项目分享]Python基于OpenCV监控老鼠蟑螂检测系统[完整源码&部署教程]_哔哩哔哩_bilibili 2.图片演示: 3.明厨亮灶: 餐饮企业的厨房卫生状况一直饱受消 ...

  6. 【Matlab水果蔬菜识别】形态学水果蔬菜识别【含GUI源码 919期】

    一.代码运行视频(哔哩哔哩) [Matlab水果蔬菜识别]形态学水果蔬菜识别[含GUI源码 919期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅. ...

  7. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  8. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  9. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  10. 基于YOLOv7的芯片表面缺陷检测系统(源码&教程)

    1.项目背景: 目前随着电子领域的快速发展,芯片也已经成为日常生活中不可或缺的一部分.随着市场对芯片的需求不断增大,裸芯片表面缺陷检测任务的压力也越来越大.裸芯片表面的缺陷检测不仅能保证芯片成品的质量 ...

最新文章

  1. CentOS的el5, el6, el7代表什么
  2. 我是如何在SQLServer中处理每天四亿三千万记录的
  3. app式成语_疯狂的成语app
  4. flex容器属性(一)
  5. 8月22日见!iQOO Pro跑分曝光:近50万得分 无对手
  6. javascript图片隐写术,感觉可以用它来干点有想法的事情
  7. NTP漏洞可致Windows系统触发DoS
  8. android锁屏时钟,桌面锁屏时钟
  9. 蒙版操作—快速蒙版扣图
  10. 通信领域的宽带信号和窄带信号到底是什么??
  11. 使用linux时电脑突然蓝屏,Win7系统电脑突然蓝屏提示的解决方法
  12. 算24点的一般方法及例题
  13. 用conda建一个python2虚拟环境
  14. python勾股定理、0-30_求助python大神,显示Process finished with exit code 0.
  15. opencv通过mask取目标纯色背景图
  16. android 后台运行 保活
  17. 关于Android Studio HttpURLconnection使用时报错
  18. 土地调查图斑编号_“三调”图斑标注方法
  19. element 表格内显示图片
  20. 新松机器人袁_新松机器人三大创新技术在2018 Automatica盛大发布

热门文章

  1. Linux命令(压缩,解压rar)
  2. 架构与设计的流程和核心概念笔记:三、业务层设计
  3. 知道css有个content属性吗?有什么作用?有什么应用?可以伪类清除浮动
  4. php做APP接口开发,接口的安全性
  5. 小菜的项目管理修炼之道
  6. Oracle性能优化求生指南 Oracle数据库专家Guy Harrison权威著作
  7. c语言 冒泡排序算法
  8. Python3入门机器学习经典算法与应用 第3章 Jupyter Notebook魔法命令%run,%timeit
  9. 扇贝有道180925每日一句
  10. unity C#计时器,记录程序运行时长