【疾病分类】基于matlab LBP果实病害检测分类【含Matlab源码 1714期】

举报
海神之光 发表于 2022/05/29 00:13:30 2022/05/29
【摘要】 一、LBP简介 1 基本LBP算子 基本LBP算子其定义为在3×3像素块中,以其中心像素点的灰度值作为阈值,与周围8个相邻的像素点的灰度值进行比较,若周围某一像素点的值大于等于阈值,则该像素点记为“1”...

一、LBP简介

1 基本LBP算子
基本LBP算子其定义为在3×3像素块中,以其中心像素点的灰度值作为阈值,与周围8个相邻的像素点的灰度值进行比较,若周围某一像素点的值大于等于阈值,则该像素点记为“1”,否则记为“0”。通过对邻域内的8个像素点作比较可产生一个8位二进制数,将其转为十进制数即为该3×3像素块中心像素点的LBP值(共256种),如图1所示。
在这里插入图片描述
图1 原始LBP值的定义
为了改善LBP尺度大小的局限性以适应不同尺度和频率的纹理特征,Ojala等[7]将LBP算子从3×3邻域扩展到不同半径大小的圆形邻域。则有:
在这里插入图片描述
式中,R表示圆形邻域的半径,P表示中心像素点邻域内采样点个数,gi表示邻域内第i个像素点的灰度值,gc表示中心像素点的灰度值。若圆形LBP的邻域点不在像素中心位置,则通过双线性插值确定其值。

2 缺陷图像的SVM分类
2.1 SVM模型

SVM最早由Vapnik等提出[10],属于机器学习中的监督学习,是一种对数据进行二元分类的广义线性分类器,其对小样本分类和多类分类有着良好的分类效果。其决策边界是对学习样本求解的最大边距超平面。

SVM方法是从两类模式识别时,线性可分情况下的最优分类面提出的。设大小为n、且每个训练样本向量维数为N的两类训练样本集{(xi,yi)},i=1,2,⋯,n,xi∈RN,yi∈{+1,−1}为模式标号,将建立线性SVM的问题转化为求解二次凸规划问题,即:
在这里插入图片描述
式中,ω为权值向量,b为类阈值;C为惩罚因子,表示存在不能被超平面正确分类的样本;ξi为松弛因子,表示存在分类间隔和错误率之间的折中。

Vapnik等[11]给出最优超平面的决策分类函数为:
在这里插入图片描述
式中,sgn为符号函数,λi称为Lagrange乘子,xi为支持向量。

对于非线性问题,通过引入非线性映射函数Φ(xi)将样本数据映射到高维空间,然后在这个特征空间中利用结构风险最小化原则构造最优分类超平面。为了避免产生维数灾难,故引入核函数:
在这里插入图片描述
选择适当的核函数K(xi,yj)实现某一非线性变换后的线性分类,此时,相应的分类函数为:
在这里插入图片描述
式中,xi为样本数据中的支持向量,λi称为Lagrange乘子。这就是SVM,由分类函数f(x)的正负即可判定x所属类别。

对于多分类问题,可将SVM二分类进行扩展为多分类。常用的方法有,一是通过一次构造包含多个最优超平面的模型实现对样本的多分类,看似简单,但其计算复杂,实现起来较为困难;二是组合多个二分类SVM实现多分类,本文采用第二种方法。

2.2 SVM分类结果
缺陷识别分类的步骤如下:
(1) 样本数据集的准备。
(2) 核函数和相关参数选取。目前常用的核函数形式主要有线性(linear)核函数、Sigmoid核函数、多项式(polyn-omial)核函数和径向基型(radial basis function)核函数等。径向基核函数非线性能力强,也是目前应用最广泛的核函数,本文选径向基核函数作为分类器核函数。通过调整惩罚因子C和径向基核函数的核函数参数γ来达到最佳分类率;
(3) 缺陷的识别分类。

二、部分源代码

clc;
clear all;
close all;
warning off all;

%% Read input image

[f,p] = uigetfile('*.jpg;*.bmp');
I = imread([p f]);
I = imresize(I,[256 256]);


%% rgb to lab color space conversion

im = I;
R = im(:,:,1);
G = im(:,:,2);
B = im(:,:,3);

figure('name','Input Image result');
subplot(221);imshow(I,[]);title('Input Image');
subplot(222);imshow(R,[]);title('Red band Image');
subplot(223);imshow(G,[]);title('Green band Image');
subplot(224);imshow(B,[]);title('Blue Image');

[L, a, b] = RGB2Lab(R, G, B);

figure('name','RGB to LAB color space result');
subplot(131);imshow(L,[]);title('L color space result');
subplot(132);imshow(a,[]);title('a color space result');
subplot(133);imshow(b,[]);title('b color space result');
labb = cat(3,L,a,b);
cform = makecform('srgb2lab');
lab = applycform(I,cform); 

figure('name','Input Image & L*a*b Color space Result');
subplot(121);imshow(I,[]);title('Input RGB image');
subplot(122);imshow(lab);title('L*a*b color space result');

ll = lab(:,:,1);
aa = lab(:,:,2);
bb = lab(:,:,3);

%% K-Means segmentation

 cl = 4;
 [ABC,c] = k_means(ll,cl);
 [d,e]=size(c);
 for i=1:d
     for j=1:e
         if c(i,j)==3
             new(i,j)=0;
         else
             new(i,j)=c(i,j);
         end
     end
 end
function [mu,mask]=k_means(ima,k)
%% check image
%cluster center initialization
ima=double(ima);
copy=ima;         % make a copy
ima=ima(:);       % vectorize ima
mi=min(ima);      % deal with negative 
ima=ima-mi+1;     % and zero values

s=length(ima);

%% create image histogram

m=max(ima)+1;

h=zeros(1,m);
hc=zeros(1,m);

for i=1:s
  if(ima(i)>0) h(ima(i))=h(ima(i))+1;
  end;
end
ind=find(h);
hl=length(ind);

%% initiate centroids

mu=(1:k)*m/(k+1);
fprintf('Initiated centroid value = %f\n',mu);

%% start process

while(true)
  
  oldmu=mu;
  % current classification  
 
  for i=1:hl
      c=abs(ind(i)-mu);
      cc=find(c==min(c));
      hc(ind(i))=cc(1);
  end
  
  %recalculation of means  
  
  for i=1:k, 
      a=find(hc==i);
      mu(i)=sum(a.*h(a))/sum(h(a));
  end
  
  if(mu==oldmu) 
      break;
  end;
  
end

%% calculate mask
s=size(copy);
mask=zeros(s);

for i=1:s(1),
for j=1:s(2),
  c=abs(copy(i,j)-mu);
  a=find(c==min(c));  
  mask(i,j)=a(1);
end
end

mu=mu+mi-1;   % recover real range



  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]刘启浪,汤勃,孔建益,王兴东.基于多尺度LBP特征的带钢表面缺陷图像SVM分类[J].组合机床与自动化加工技术. 2020,(12)

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/122971796

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。