# 基于MATLAB的水果分级设计

9 篇文章 0 订阅

1. 在苹果大小识别方面，比较了不同的大小计算方法，选择了利用图像处理技术，找到苹果中心点，判断苹果图像实际半径长度，从而对苹果大小进行分级识别。

2. 在苹果颜色识别方面，通过对不同的颜色模型进行研究，RGB模型主要适用于硬件设备，HIS模型更符合人类视觉特征，所以我们选择HIS模型来对苹果进行颜色分级识别。

3. 在苹果缺陷识别方面，利用多种不同的算子对苹果图像进行处理，选择利用canny算子对图像进行处理。

4. 在苹果形态识别方面，通过计算公式，得到图像的圆度数值。

Research on fruit classification and

recognition technology based on the MATLAB

ABSTRACT

The fruit of this graduation design based on MATLAB was introduced automatic recognition and classification using mobile terminal access to apple's sample images, using MATLAB software programming realized the sample image preprocessing, including image filtering, image filling, grayscale image, image binarization and feature extraction, etc.

The fruit grading automatically identifies us to explore the MATLAB based apple classification in three different aspects.

The main work is as follows:

1. In terms of apple size identification, compared the different calculation method, the size of the selected using image processing technology, find the center of apple, apple image actual length of the radius, which is used to identify the grading size for apple.

2. In terms of color recognition of apple, through study of different color model, the RGB model is mainly suitable for hardware, ihs model more accord with human visual characteristic, so we choose HIS model is used to identify the color grading for apple.

3. In the aspect of apple defect recognition, the apple image is processed with a variety of different operators, and the canny operator is selected to process the image.

4. In the aspect of apple shape identification, the roundness value of the image is obtained through the calculation formula.

Key words:  MATLAB  image processing  fruit grading

1绪论 1

1.1 研究的目的与意义 1

1.2 国内外研究的现状 1

1.2.1 国外情况 1

1.2.2 国内情况 2

1.3 研究内容 2

1.4 技术路线 2

1.5 本章小结 3

2图像预处理方法研究 4

2.1 引言 4

2.2 图像的灰度化变换 4

2.3 图像的平滑处理 5

2.3.1 中值滤波法 5

2.3.2 快速中值滤波 5

2.3.3 邻域平均法 5

2.4 图像的二值化 6

2.5 本章小结 7

3 苹果的大小检测 8

3.1 引言 8

3.2 大小检测分级研究 8

3.3 苹果大小特征提取 10

3.4 苹果大小分级试验与结果 12

3.5 本章小结 12

4 苹果的颜色检测 13

4.1 引言 13

4.2 颜色模型 13

4.3苹果表面颜色特性分析 17

4.4 苹果颜色着色度提取与等级划分 17

4.5 本章小结 18

5 水果的缺陷检测 19

5.1 引言 19

5.2 水果缺陷检测研究 19

5.3 水果缺陷检测试验与结果 21

5.4 本章小结 24

6 水果的形态检测 25

6.1 引言 25

6.2 水果形态检测研究 25

6.3 水果形态检测试验与结果 25

6.4 本章小结 25

7.1引言 26

7.2系统工作原理 26

7.3本章小结 28

29

1绪论

1.1 研究的目的与意义

1.2 国内外研究的现状

1.2.1 国外情况

1.2.2 国内情况

1.3 研究内容

（1）通过采集到的苹果图像，经过一些处理后。提取出苹果大小的特征值建立分级模型。根据苹果检测出的结果作出判断，来定出水果的大小等级。

（2）对苹果的表面颜色进行分析，建立分级模型，提取出颜色特征值，进而判定出水果颜色的等级。

（3）对苹果进行灰度化，并选择适当的阀值对灰度化后的图像进行二值化，确定缺陷的区域。在通过计算缺陷面积得出缺陷的等级。

1.4 技术路线

1-1 苹果分级系统总体设计结构图

1.5 本章小结

2图像预处理方法研究

2.1 引言

RGB空间变换到HSI空间。

2.2 图像的灰度化变换

2-1 灰度化后的苹果图像

2.3 图像的平滑处理

2.3.1 中值滤波法

B=medfilt2(A,[m,n])

[m,n]为指定滤波模板的大小，默认值是3*3大小

2.3.2 快速中值滤波

2.3.3 邻域平均法

2-2 中值滤波后的苹果图像

2.4 图像的二值化

2-3 二值化后的苹果图像

2.5 本章小结

3 图像的特征提取

3.1 苹果的大小检测

3.2 苹果的颜色检测

3.3 苹果的缺陷检测

3.4 苹果的形态检测

3 苹果的大小检测

3.1 引言

3.2 大小检测分级研究

3-1 外接矩形法

3-2 最大果宽法

CCD摄像头拍摄的水果图像是二维的平面图，计算此投影面积S，根据大量试验找到一个合适系数K'使得K乘以S接近水果真实的表面积。最后用这个近似的表面积来表示水果大小，并用于分级。由于很难找到合适的K值使所有的苹果近似面积接近真实表面积，该方法稳定性差。准确率低，不宜用在在线苹果大小检测上。

3.3 苹果大小特征提取

A1 = sum(sum(BW));

A2 = bwarea(BW);

P = N1 + √2N0

a）8方向链码                         （b）4方向链码

3-3 方向链码

3-4 苹果图像1

3-5 苹果图像2

3-6 苹果图像3

3.4 苹果大小分级试验与结果

GB10651—2008中对于大型果、中小型果的果径大小要求如下。本课题通过对水果的投影面积法，进而计算初水果的直径大小，再利用特定的阀值来对苹果的大小进行区分。

3-1 苹果等级划分标准

 等级 优等 一等 二等 等外 大型果 >=70 >=65 >=60 <60 中型果 >=65 >=60 >=55 <55 小型果 >=60 >=55 >=50 <50

1 鲜苹果质量等级要求

 项目 等               级 优等品 一等品 二等品 果径（最大横切面直径）/mm 大型果 >=70 >=65 中小型果 >=60 >=55

If D>=th1         属于优等果

Elseif D>=th2     属于一等果

Elseif  D>=th3    属于二等果

Else              属于等外果

3.5 本章小结

4 苹果的颜色检测

4.1 引言

4.2 颜色模型

RGB模型

F=R+G+B

RGB模型采用物理三基色表示，因而物理意义很清楚，适合彩色显象管工作，显示器和扫描仪都采用RGB模型。然而这一体制并不适应人的视觉特点。这种模型从感知来说是不均匀的，并依赖于硬件设备。RGB模型的缺点有：

RGB模型用红、绿、蓝三原色的混合比例定义不同的色彩，使色彩难以用准确的数值来表示，并进行定量分析；

RGB模型中，由于彩色合成图像通道之间相关性很高，使合成图像的饱和度偏低，色调变化不大，图像视觉效果差；

4-1 RGB模型中R分量的图像

4-2 RGB模型中G分量的图像

4-3 RGB模型中B分量的图像

YUV颜色模型

YUV颜色模型也是使用比较多的颜色模型，由于人眼对于亮度的敏感度远远大于对于色度的敏感度，所以YUV这个模型中，相邻的像素间使用同样的色度值。这样的图像是用牺牲色度来达到压缩图像的目的。这个模型一般用于图像传输中对图像进行压缩处理。

HIS颜色模型

Temp1 =0.5*((r-g)+(r-b))                             4-1

temp2 =sqrt((r-g).^2 + (r-b).*(g -b))                        4-2

theta = arccos(temp1./temp2)                        4-3

H=theta          G>=B                         4-4

H=360-theta      G<=B                        4-5

S=1-3*min(R,G,B)/(R+G+B)                        4-6

I=(R+G+B)/3                              4-7

4-4  H分量的图像

4-5  V分量的图像

4-6  S分量的图像

4.3苹果表面颜色特性分析

4.4 苹果颜色着色度提取与等级划分

1 鲜苹果质量等级要求

 项目 等               级 优等品 一等品 二等品 富士系 红或条红90%以上 红或条红80%以上 红或条红55%以上

4.5 本章小结

5 水果的缺陷检测

5.1 引言

5.2 水果缺陷检测研究

Roberts模板检测

 -1 0 0 1

5-1 Roberts模板

Sobel模板检测

 -1 -2 -1 0 0 0 1 2 1

5-2 Sobel模板

Prewitt模板检测

 -1 -1 -1 0 0 0 1 1 1

5-3 prewitt模板

LOG模板检测

 0 1 0 1 -4 1 0 1 0

5-4 LOG模板

Canny边缘检测算子

Canny算子检测图像边缘的步骤如下：

5.3 水果缺陷检测试验与结果

MATLAB实现五种边缘检测

常用的边缘检测算法有拉普拉斯边缘检测算法、Robert边缘检测算子、Sobel边缘检测算子、Prewitt边缘检测算子、Canny边缘检测算子。

% 'sobel', 'prewitt', 'laplacian',

%'log', 'canny'

BW5=edge(I,'Canny',0.35);
subplot(2,3,6);
imshow(BW5);

title('Canny算子边缘检测');

roberts模板检测

5-1 用Roberts检测后的图像

sobel模板检测

5-2 用Sobel检测后的图像

prewitt算子检测

5-3 用Prewitt算子检测后的图像

log算子检测

5-4 用log算子检测后的图像

Canny算子检测

5-5 用Canny检测后的图像

1 鲜苹果质量等级要求

 项目 等               级 优等品 一等品 二等品 果面缺陷 无缺陷 无缺陷 允许下列对果肉无重大伤害的果皮损伤不超过4项

5.4 本章小结

6 水果的形态检测

6.1 水果形态检测研究

6.2 水果形态检测试验与结果

1 鲜苹果质量等级要求

 项目 等               级 优等品 一等品 二等品 果形 具有本品种应有的特征 允许果形有轻微缺点 果形有缺点，但仍保持本品基本特征，不得有畸形果

6.3 本章小结

6 GUI界面设计

6.1 GUI概念

GUI 即人机交互图形化用户界面设计。纵观国际相关产业在图形化用户界面设计方面的发展现状，许多国际知名公司早已意识到 GUI 在产品方面产生的强大增值功能，以及带动的巨大市场价值，因此在公司内部设立了相关部门专门从事 GUI 的研究与设计，同业间也成立了若干机构，以互相交流 GUI 设计理论与经验为目的。随着中国 IT 产业，移动通讯产业，家电产业的迅猛发展，在产品的人机交互界面设计水平发展上日显滞后，这对于提高产业综合素质，提升与国际同等业者的竞争能力等等方面无疑起了制约的作用。

6.2 界面测试

6.3 本章小结

7.1引言

7.2系统工作原理

6-1 系统流程图

6-2 软件工作流程图

7.3本章小结

1、构建了苹果视觉分析系统，通过实验获取了视觉分级的样本图像。

2、通过对样本图像的分析，编制了一套进行图像处理和特征量提取的MATLAB程序。

3、参照苹果分级的国家标准GB1065-89，实现了苹果的自动分级。

4、对视觉分级结果和人工分级结果进行比较分析，结果表明：视觉分级可以达到较高的分级精度，且分级速度快，不受人为因素的影响，便于实现自动化。

[1]

6总结展望1回顾（干了什么，什么结果）2展望（还可以做）

5、构建了苹果视觉分析系统，通过实验获取了视觉分级的样本图像。

6、通过对样本图像的分析，编制了一套进行图像处理和特征量提取的MATLAB程序。

7、参照苹果分级的国家标准GB1065-89，实现了苹果的自动分级。

8、对视觉分级结果和人工分级结果进行比较分析，结果表明：视觉分级可以达到较高的分级精度，且分级速度快，不受人为因素的影响，便于实现自动化。

function varargout = guidetemplate0(varargin)

% GUIDETEMPLATE0 MATLAB code for guidetemplate0.fig

%      GUIDETEMPLATE0, by itself, creates a new GUIDETEMPLATE0 or raises the existing

%      singleton*.

%

%      H = GUIDETEMPLATE0 returns the handle to a new GUIDETEMPLATE0 or the handle to

%      the existing singleton*.

%

%      GUIDETEMPLATE0('CALLBACK',hObject,eventData,handles,...) calls the local

%      function named CALLBACK in GUIDETEMPLATE0.M with the given input arguments.

%

%      GUIDETEMPLATE0('Property','Value',...) creates a new GUIDETEMPLATE0 or raises the

%      existing singleton*.  Starting from the left, property value pairs are

%      applied to the GUI before guidetemplate0_OpeningFcn gets called.  An

%      unrecognized property name or invalid value makes property application

%      stop.  All inputs are passed to guidetemplate0_OpeningFcn via varargin.

%

%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one

%      instance to run (singleton)".

%

% Copyright 2002-2006 The MathWorks, Inc.

% Edit the above text to modify the response to help guidetemplate0

% Begin initialization code - DO NOT EDIT

gui_Singleton = 1;

gui_State = struct('gui_Name',       mfilename, ...

'gui_Singleton',  gui_Singleton, ...

'gui_OpeningFcn', @guidetemplate0_OpeningFcn, ...

'gui_OutputFcn',  @guidetemplate0_OutputFcn, ...

'gui_LayoutFcn',  [] , ...

'gui_Callback',   []);

if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

% End initialization code - DO NOT EDIT

% --- Executes just before guidetemplate0 is made visible.

function guidetemplate0_OpeningFcn(hObject, eventdata, handles, varargin)

% This function has no output args, see OutputFcn.

% hObject    handle to figure

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% varargin   command line arguments to guidetemplate0 (see VARARGIN)

axes(handles.axes1);

imshow(im);%在坐标axes1显示原图像

title('原始水印');

% Choose default command line output for guidetemplate0

handles.output = hObject;

% Update handles structure

guidata(hObject, handles);

% UIWAIT makes guidetemplate0 wait for user response (see UIRESUME)

% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.

function varargout = guidetemplate0_OutputFcn(hObject, eventdata, handles)

% varargout  cell array for returning output args (see VARARGOUT);

% hObject    handle to figure

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;

% --- Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton1 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

w=rgb2gray(x1);

L=medfilt2(w);

level=graythresh(L);

bw=im2bw(L,level);

axes(handles.axes2);

imshow(~bw)

title('面积图像');

%handles.text1=uicontrol('style','edit','position',[70 70 300 220],'max',2);%一定要设成2

strNC=['面积=   ',num2str(bwarea(~bw))];

set(handles.text1,'string',strNC);

strNC1=['一级品'];

set(handles.text5,'string',strNC1);

% --- Executes on button press in pushbutton2.

function pushbutton2_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton2 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

hv=rgb2hsv(x1);

H=hv(:,:,1);

S=hv(:,:,2);

V=hv(:,:,3);

axes(handles.axes2);

imshow(H)

title('H分量图像');

apple=im2bw(x1);

count=length(x1);

for i=1:count

red_ratio=length(find((H>0 & H<1/12) | H>11/12))/length(find(apple==1));

end

strNC=['红色比率=   ',num2str(red_ratio*100),'%'];

set(handles.text2,'string',strNC);

figure,subplot(1,3,1);imshow(H);title('H分量图像');

subplot(1,3,2);imshow(S);title('S分量图像');

subplot(1,3,3);imshow(V);title('V分量图像');

strNC1=['一级品'];

set(handles.text6,'string',strNC1);

% --- Executes on button press in pushbutton3.

function pushbutton3_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton3 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

w=rgb2gray(x1);

L=medfilt2(w);

level=graythresh(L);

bw=im2bw(L,level);

X=imclearborder(bw,4); %去除图像与边界相连通，但更高亮的区域

axes(handles.axes2);

imshow(X)

title('缺陷图像');

strNC=['缺陷率=   ',num2str(bwarea(X)/bwarea(~bw)*100),'%'];

set(handles.text3,'string',strNC);

strNC1=['一级品'];

set(handles.text7,'string',strNC1);

% --- Executes on button press in pushbutton4.

function pushbutton4_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton4 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

I2=rgb2gray(x1);

J=im2bw(I2,0.6);

I=~J;

axes(handles.axes2);

imshow(I)

title('圆度图像');

[x,y]=size(I);

BW = bwperim(I,8); % 检测目标的边缘跟踪，用于计算周长

%检测垂直方向连读的周长像素点%

P1=0;

P2=0;

Ny=0; % 记录垂直方向连续周长像素点的个数

for i=1:x

for j=1:y

if (BW(i,j)>0)

P2=j;

if ((P2-P1)==1) % 判断是否为垂直方向连续的周长像素点

Ny=Ny+1;

end

P1=P2;

end

end

end

%检测水平方向连读的周长像素点%

P1=0;

P2=0;

Nx=0; % 记录水平方向连续周长像素点的个数

for j=1:y

for i=1:x

if (BW(i,j)>0)

P2=i;

if ((P2-P1)==1) % 判断是否为水平方向连续的周长像素点

Nx=Nx+1;

end

P1=P2;

end

end

end

SN=sum(sum(BW)); % 计算周长像素点的总数

Nd=SN-Nx-Ny; % 计算奇数码的链码数目

H=max(sum(I)); % 计算目标的高度

W=max(sum(I')); % 图象I经矩阵转置后，计算宽度

L=sqrt(2)*Nd+Nx+Ny; % 计算周长

%====形态特征值计算===%

A=bwarea(I); % 计算目标的面积

%L1=zhch(I);

C=(4*pi*A)/(L*L); % 计算圆度

R=A/(H*W); % 计算矩形度

E=min(H,W)/max(H,W); % 计算伸长度

% L为周长，A为面积，C为圆形度，R为矩形度，E为伸长度

strNC=['圆形度=   ',num2str(C)];

set(handles.text4,'string',strNC);

strNC1=['一级品'];

set(handles.text8,'string',strNC1);

% --------------------------------------------------------------------

function Untitled_1_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_1 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% --------------------------------------------------------------------

function Untitled_2_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_2 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% --------------------------------------------------------------------

function Untitled_3_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_3 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% --------------------------------------------------------------------

function Untitled_4_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_4 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% --------------------------------------------------------------------

function Untitled_5_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_5 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

% --------------------------------------------------------------------

function Untitled_6_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_6 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

close

% --------------------------------------------------------------------

function Untitled_7_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_7 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

[filename,pathname]=uigetfile({'*.*';'*.bmp';'*.jpg';'*.tif';'*.jpg'},'选择图像');

image=[pathname,filename];%合成路径+文件名

im=im2double(im);

axes(handles.axes1);

imshow(im);%在坐标axes1显示原图像

title('原始图像');

handles.X1=im;

guidata(hObject,handles);

% --------------------------------------------------------------------

function Untitled_8_Callback(hObject, ~, handles)

% hObject    handle to Untitled_8 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

x2=rgb2gray(x1);

axes(handles.axes2);

imshow(x2);

title('灰度化图像');

% --------------------------------------------------------------------

function Untitled_9_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_9 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

x2=rgb2gray(x1);

x3=medfilt2(x2,[3,3]);

axes(handles.axes2);

imshow(x3);

title('中值滤波图像');

% --------------------------------------------------------------------

function Untitled_10_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_10 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

w=rgb2gray(x1);

L=medfilt2(w);

level=graythresh(L);

bw=im2bw(L,level);

axes(handles.axes2);

imshow(~bw)

title('二值化图像');

% --------------------------------------------------------------------

function Untitled_11_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_11 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

w=rgb2gray(x1);

L=medfilt2(w);

level=graythresh(L);

bw=im2bw(L,level);

I3=imfill(bw,8,'holes');%对二值化后的图像填充肺实质

I4=I3-bw;%得到肺实质的图像E

I5=bwmorph(I4,'clean'); %图像边界

I6=imfill(I5,8,'holes');%填充肺实质空洞

I7=bwperim(I6);

axes(handles.axes2);

imshow(I7)

title('边缘检测');

% --------------------------------------------------------------------

function Untitled_12_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_12 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

axes(handles.axes1);

imshow(im);%在坐标axes1显示原图像

title('绿色苹果');

% --------------------------------------------------------------------

function Untitled_13_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_13 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

axes(handles.axes1);

imshow(im);%在坐标axes1显示原图像

title('红色苹果');

% --------------------------------------------------------------------

function Untitled_14_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_14 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

w=rgb2gray(x1);

L=medfilt2(w);

level=graythresh(L);

bw=im2bw(L,level);

axes(handles.axes2);

imshow(~bw)

title('面积图像');

%handles.text1=uicontrol('style','edit','position',[70 70 300 220],'max',2);%一定要设成2

strNC=['面积=   ',num2str(bwarea(~bw))];

set(handles.text1,'string',strNC);

% --------------------------------------------------------------------

function Untitled_15_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_15 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

hv=rgb2hsv(x1);

H=hv(:,:,1);

S=hv(:,:,2);

V=hv(:,:,3);

axes(handles.axes2);

imshow(H)

title('H分量图像');

apple=im2bw(x1);

count=length(x1);

for i=1:count

red_ratio=length(find((H>0 & H<1/12) | H>11/12))/length(find(apple==1));

end

strNC=['红色比率=   ',num2str(red_ratio*100),'%'];

set(handles.text2,'string',strNC);

% --------------------------------------------------------------------

function Untitled_16_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_16 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

w=rgb2gray(x1);

L=medfilt2(w);

level=graythresh(L);

bw=im2bw(L,level);

X=imclearborder(bw,4); %去除图像与边界相连通，但更高亮的区域

axes(handles.axes2);

imshow(X)

title('缺陷图像');

strNC=['缺陷率=   ',num2str(bwarea(X)/bwarea(~bw)*100),'%'];

set(handles.text3,'string',strNC);

% --------------------------------------------------------------------

function Untitled_17_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_17 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

I2=rgb2gray(x1);

J=im2bw(I2,0.6);

I=~J;

axes(handles.axes2);

imshow(I)

title('圆度图像');

[x,y]=size(I);

BW = bwperim(I,8); % 检测目标的边缘跟踪，用于计算周长

%检测垂直方向连读的周长像素点%

P1=0;

P2=0;

Ny=0; % 记录垂直方向连续周长像素点的个数

for i=1:x

for j=1:y

if (BW(i,j)>0)

P2=j;

if ((P2-P1)==1) % 判断是否为垂直方向连续的周长像素点

Ny=Ny+1;

end

P1=P2;

end

end

end

%检测水平方向连读的周长像素点%

P1=0;

P2=0;

Nx=0; % 记录水平方向连续周长像素点的个数

for j=1:y

for i=1:x

if (BW(i,j)>0)

P2=i;

if ((P2-P1)==1) % 判断是否为水平方向连续的周长像素点

Nx=Nx+1;

end

P1=P2;

end

end

end

SN=sum(sum(BW)); % 计算周长像素点的总数

Nd=SN-Nx-Ny; % 计算奇数码的链码数目

H=max(sum(I)); % 计算目标的高度

W=max(sum(I')); % 图象I经矩阵转置后，计算宽度

L=sqrt(2)*Nd+Nx+Ny; % 计算周长

%====形态特征值计算===%

A=bwarea(I); % 计算目标的面积

%L1=zhch(I);

C=(4*pi*A)/(L*L); % 计算圆度

R=A/(H*W); % 计算矩形度

E=min(H,W)/max(H,W); % 计算伸长度

% L为周长，A为面积，C为圆形度，R为矩形度，E为伸长度

strNC=['圆形度=   ',num2str(C)];

set(handles.text4,'string',strNC);

% --------------------------------------------------------------------

function Untitled_18_Callback(hObject, eventdata, handles)

% hObject    handle to Untitled_18 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

x1=handles.X1;

w=rgb2gray(x1);

L=medfilt2(w);

level=graythresh(L);

bw=im2bw(L,level);

I3=imfill(bw,8,'holes');%对二值化后的图像填充肺实质

I4=I3-bw;%得到肺实质的图像E

I5=bwmorph(I4,'clean'); %图像边界

I6=imfill(I5,8,'holes');%填充肺实质空洞

axes(handles.axes2);

imshow(I6)

title('图像填充');

11-08
11-24

12-06
08-19 260
08-19 95
12-12
08-19 291
06-02
01-26