一、大津法(OTSU)简介

大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出。从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大。
它被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。
应用:是求图像全局阈值的最佳方法,应用不言而喻,适用于大部分需要求图像全局阈值的场合。
优点:计算简单快速,不受图像亮度和对比度的影响。
缺点:对图像噪声敏感;只能针对单一目标分割;当目标和背景大小比例悬殊、类间方差函数可能呈现双峰或者多峰,这个时候效果不好。

二、瑕疵检测简介

文中将图像预处理与边缘检测相结合对瓶盖瑕疵进行检测, 先使用直方图规定化的方法对图像做出修正与增强, 再利用中值滤波的方法消除图像孤立的噪声点;Canny算子快速分辨出瓶盖瑕疵, 再利用采用Otsu阈值方法求取自适应阈值自动选择并提取瑕疵。

1 图像预处理
在特征值提取之前, 必须对图像进行预处理。在实验中使用的灰度图像。应用直方图规定化和中值滤波器对图像降噪、增强。

1.1 直方图规定化
在之前的许多研究成果中, 将直方图均衡化作为图像增强的主要方法。但是图像一般比较灰暗, 它的灰度直方图全都集中在低灰度区, 低灰度频率很高把这幅图片均衡化后, 相对较低灰度的像素会被均衡到高灰度区, 图像会产生高亮和失真。所以本文放弃直方图规则化而选用直方图规定化就是为了避免出现这种现象。直方图规定化是使原图像灰度直方图变成规定形状的直方图而对图像做修正的增强方法。它是对直方图均衡化处理的一种有效地扩展, 而直方图均衡化处理只是直方图均衡化的一个特例。用直方图规定化对图片增强。断经实验效果。
在对图像进行预处理后, 图像的对比度明显上升, 并且没有高亮和失真, 有利于特征值的提取。

1.2 图像消噪
在图像采集和直方图规定化过程中难免会产出不必要地噪声, 因此须对图像进行消噪处理。本文采用了比较普遍的中值滤波处理方法。

中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术, 基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替, 让周围的像素值接近的真实值, 从而消除孤立的噪声点。方法是去某种结构的二维滑动模板, 将板内像素按照像素值的大小进行排序, 生成单调上 (或下降) 的为二维数据序列。二维中值滤波输出为:

2 边缘检测
观察布匹瑕疵图像可以发现, 以布匹纹理为背景的图像多呈现出屋顶状边缘, 与瑕疵的特征相近, 易引起误检、漏检[7]。另外, 由于图像采集环境或光照不均匀等因素的影响, 经常会造成瑕疵图像灰度差异很大, 为了提高瑕疵部分的对比度, 减小光照的影响, 首先将灰度范围拉伸到相同的区域, 然后再进行相应的处理[8]。传统的Canny算子中, 高、低阈值Tn, Te和σ值不是由图像边缘的特征信息决定, 而是需要人为设定[9]。这样对图像容易造成细节的丢失, 具有较差的边缘连续性, 并且一组固定的平滑参数和阈值, 对某一幅图像可能会有很好的效果, 但是如果图像纹理有变化, 就会产生不理想的结果。
文中采用Otsu阈值方法求取自适应阈值。Otsu算法是一种使类间方差最大的自动确定阈值方法。
其基本思想是把图像像素分为背景和目标两类, 通过搜索计算类间方差最大值, 得到最优阈值。
具有瑕疵的布匹图像可以视为简单的双峰值图像, 具体步骤如下:

  1. 把图像中的像素按灰度值阈值T分为两类Q1和Q2。Q1由0~S的像素组成, Q2由S+1~M组成, M为像素的灰度级数。
  2. 设Q1和Q2各自的平均灰度值为u1和u2, 图像总的平均灰度值为u;Q1和Q2占图像中的比例为w1和w2。

三、部分源代码

%本程序可以完成布匹疵点检测且本程序是批处理程序。
function varargout = FabricGui(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @FabricGui_OpeningFcn, ...'gui_OutputFcn',  @FabricGui_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end% --- Executes just before FabricGui is made visible.
function FabricGui_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);% --- Outputs from this function are returned to the command line.
function varargout = FabricGui_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;function hedit_detect_Callback(hObject, eventdata, handles)% --- Executes during object creation, after setting all properties.
function hedit_detect_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end% --- Executes on button press in ptnRun.
function ptnRun_Callback(hObject, eventdata, handles)
%批处理
srcDir=uigetdir('Choose source directory.'); %获得选择的文件夹
cd(srcDir);
allnames=struct2cell(dir('*.bmp')); %只处理8位的bmp文件
[k,len]=size(allnames); %获得bmp文件的个数
%得到设置的参数
P=str2num(get(handles.hedit_zhouqi,'string')); %获得织物纹理周期
T1=str2num(get(handles.hedit_yuzhifenge,'string')); %分割阈值
T2=str2num(get(handles.hedit_yuzhihou,'string')); %后处理阈值
numwu=0;numyou=0;
for ii=1:len%逐次取出文件cd(srcDir);name=allnames{1,ii};I=imread(name); %读取文件axes(handles.hyuanshiaxes); %显示图像imshow(I);cd('..');I0=I;%预处理I=double(I0); %数据类型的转换[M,N]=size(I);%得到待检测图像的大小J=junzhicaiyang(I,M,N,P); %调用均值下采样函数J=uint8(J);%双线性插值,恢复原来的图像大小I1=imresize(J,P,'bilinear'); %双线性插值,恢复原来图像的大小。%进行方差下采样,用于增强图像疵点信息I1=double(I1);J1=fangchacaiyang(I1,M,N,P); %调用方差下采样函数J1=uint8(J1);%双线性插值,恢复原来图像的大小。I=imresize(J1,P,'bilinear');%进行二值化及其后处理T=Otsu(I);% --- Executes on button press in ptnExit.
function ptnExit_Callback(hObject, eventdata, handles)
% hObject    handle to ptnExit (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
delete(handles.MainFig);function hedit_zhouqi_Callback(hObject, eventdata, handles)% --- Executes during object creation, after setting all properties.
function hedit_zhouqi_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction hedit_yuzhifenge_Callback(hObject, eventdata, handles)% --- Executes during object creation, after setting all properties.
function hedit_yuzhifenge_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction hedit_yuzhihou_Callback(hObject, eventdata, handles)% --- Executes during object creation, after setting all properties.
function hedit_yuzhihou_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction hedit_you_Callback(hObject, eventdata, handles)% --- Executes during object creation, after setting all properties.
function hedit_you_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction hedit_wu_Callback(hObject, eventdata, handles)% --- Executes during object creation, after setting all properties.
function hedit_wu_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function J=junzhicaiyang(I,M,N,a)
k=1;h=1;temp=0;
%均值下采样,用于削弱图像周期纹理
for i=1:a:M-a+1for j=1:a:N-a+1%每一个小块的均值作为新的图像像素值temp=0;for m=i:1:i+a-1 for n=j:1:j+a-1temp=temp+I(m,n);endendJ(h,k)=temp/(a*a); %计算均值,作为新的图像像素值k=k+1;end

四、运行结果

五、matlab版本及参考文献

1 matlab版本
2014a

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

【瑕疵检测】基于matlab GUI OTSU织物疵点检测【含Matlab源码 860期】相关推荐

  1. 【运动学】基于matlab GUI三体运动模拟【含Matlab源码 871期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[运动学]基于matlab GUI三体运动模拟[含Matlab源码 871期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  2. 【音乐播放】基于matlab GUI动感音乐播放【含Matlab源码 778期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[音乐播放]基于matlab GUI动感音乐播放[含Matlab源码 778期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  3. 【雷达通信】基于matlab GUI相控阵雷达方向图【含Matlab源码 1048期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[雷达通信]基于matlab GUI相控阵雷达方向图[含Matlab源码 1048期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  4. 【数据分析】基于matlab GUI齿轮箱振动数据分析【含Matlab源码 2122期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数据分析]基于matlab GUI齿轮箱振动数据分析[含Matlab源码 2122期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  5. 【光学】基于matlab GUI维达尔之眼计算【含Matlab源码 2545期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI维达尔之眼计算[含Matlab源码 2545期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  6. 【光学】基于matlab GUI双孔干涉【含Matlab源码 2119期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI双孔干涉[含Matlab源码 2119期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  7. 【光学】基于matlab GUI双缝干涉和牛顿环【含Matlab源码 2165期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI双缝干涉和牛顿环[含Matlab源码 2165期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  8. 【数字信号】基于matlab GUI电话按键识别【含Matlab源码 2382期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数字信号]基于matlab GUI电话按键识别[含Matlab源码 2382期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  9. Matlab GUI/APP 浅谈(附计算器源码)

    Matlab GUI/APP 浅谈(附计算器源码) 今天没有什么段子,也没有心灵鸡汤.毒鸡汤啥的,纯粹聊一聊这些年从有关MATLAB GUI/APP开发中悟出的一点道理,顺便把计算器的源代码给大家. ...

  10. Android实现手部检测和手势识别(可实时运行,含Android源码)

    Android实现手部检测和手势识别(可实时运行,含Android源码) 目录 Android实现手部检测和手势识别(可实时运行,含Android源码) 1. 前言 2. 手势识别的方法 (1)基于多 ...

最新文章

  1. SpringBoot+Junit在IDEA中实现查询数据库的单元测试
  2. 一个完整的gdb调试过程以及一些常用的命令
  3. FATE HDU - 2159(二维完全背包)
  4. php 完美防sql注入,PHP 完美的防XSS 防SQL注入的代码
  5. wordpress调用 php文件上传,wordpress上传的文件在哪
  6. Atitit 订单处理原理与功能设计attilax总结
  7. TK1装kuboki的USB驱动和TK1的无线网卡驱动
  8. 域名邮箱和邮件服务器
  9. Java基本数据类型之char
  10. 揭秘百度新治理结构:马东敏的谣言与李彦宏的用人观
  11. windows10服务器iis发布网站,win10系统+iis7发布网站或服务的详细办法
  12. 永洪科技怎么样_【永洪科技怎么样?】-看准网
  13. VMware VSphere Client克隆虚拟机
  14. 2013年全国计算机一级上机,2013年全国高校计算机联合考试一级机试试题(1)
  15. strong标签和b标签,dfn标签,abbr和acronym标签,em和i标签完整介绍
  16. 一起学英语第二季第十六期
  17. 家乐福中国独立上市,是苏宁的一颗“定心丸”吗?
  18. 元学习入门:MAML
  19. 物理PC机ping不通虚拟机解决方法(亲测可用)
  20. IEEE-754标准

热门文章

  1. 作为软件工程师,如何进行知识管理
  2. 解析大型.NET ERP系统 分布式应用模式设计与实现
  3. Python 学习笔记:class
  4. 多进程间不共享全局变量
  5. 传智播客java学习之面向对象(抽象类) , 接口
  6. 190405每日一句
  7. 让Latex支持中文
  8. Atitit 简历外语版 英语 日语 1.经历了很多项目实践,具备较为宽广的IT从业与信息化工作背景,具备若干创业历程,道路曲折,初心不改。在相关领域累计了较深的深度(细化度)与高度(抽象度)与广度
  9. Atitit 常用技能点体系树 os win linux android 前后端 gui h5 vue js jquery bootstrap cocos2d Jafavx wpf
  10. Atitit 缓存实施遇到的问题与解决 s420 attilax 艾提拉总结 Atitit 缓存增加最佳实践与实施流程 1. 业务准确性问题正确性问题 1 1.1. 缓存key正确性问题 1