大作业数字图像处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与通信工程学院
课程报告
课程
实验题目
学生姓名
学号
专业班级
摘要在生产生活中可以利用matlab函数将苹果从纷杂的大量水果中分离出来,也可根据果径和果面缺陷实现水果的等级划分。从而提高生产方的工作效率。进而降低水果的生产成本迎合市场需求。
1. 引言
近年来,随着人们生活水平的提高,人们对于水果的品质要求也不断提高。实行水果的分级销售似乎成为当前市场的一个趋势。在传统的水果等级评判主要依靠人工操作。但我们也知道,人对图像的感知是十分主观的。因此每个人的评价指标不同,而且人工的费用较高。在劳动成本越发提升的今天显然这是十分落后的。
即便应用了计算机作为辅助道具,使用基于matlab的识别与检测仍旧是其中成本较为低廉的一种。对于果农等生产方来讲这就显得尤为重要。同样这也能让消费者从中获利。显然这是一种很好的方式,但实际操作起来仍旧有很大的难度。
因此,利用计算机图像处理的技术研究客观、方便、高效并且便宜的水果品质检测方法越来越受到人们的重视。
2. 基本知识
需要掌握图像的分割技术和图像的识别技术,并利用相应的函数将所需要显示的部位从背景中提取出来。我们日常所获得的便是RGB彩色图像。在处理过程中基本思路都是首先将图像处理为灰度图像,接下来处理为二值图像。进而利用其它函数处理。
2.1 RGB图像
RGB图像被用来表示彩色图像。与索引图像一样,它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。它的每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由R、G、B三个分量来表示,M、N分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的R、G、B三个颜色分量。RGB图像的数据类型一般为8位无符号整形,通常用于表示和存放真彩色图像,当然也可以存放灰度图像。
2.2 灰度图像
灰度图像矩阵元素的取值范围通常为[0,255]。因此其数据类型一般为8位无符号整数的(int8),这就是所谓256灰度图像。“0”表示纯黑色,“255”表示纯白色,中间的数字从小到大表示由黑到白的过渡色。
2.3二值图像
二值图像的二维矩阵则是仅由0、1两个值构成。“0”代表黑色,“1”代白色。由于每一像素取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常为1个二进制位。二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储。
2.4 图像分割
图像分割是数字图像处理中的关键技术之一。它将图像中有意义的特征部分提取出来,其有意义的特征有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。虽然目前已研究出不少边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热点之一。
2.5 图像描述
图像描述是图像识别和理解的必要前提。作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。
2.6 图像识别
图像识别属于模式识别的范畴,其主要内容是图像经过某些预处理后,进行图像分割和特征提取,从而进行判决分类。
3. 功能分析及设计
在本题中,苹果的形状与其它水果是不同的,因此可以利用这一特点将其从混杂的水果中寻找出来,也可以根据它的形状进而使用直径这一特性来描述它的大小。
苹果表面上的伤痕拥有与苹果本身不同的色泽,其形状虽然不规则但是也多为圆形。也可以根据类似的方式来进行设计。
首先可以考虑将苹果从各种水果中识别出来。
%读取原图,并处理成二值图像
I=imread('d:\50.jpg');
I2=rgb2gray(I);
BW=im2bw(I2,0.9);
total=bwarea(~BW);
figure,subplot(1,3,1),imshow(I),title('原始图像');
subplot(1,3,2),imshow(I2),title('灰度图像');
subplot(1,3,3),imshow(BW),title('二值图像');
%进行边缘检测得到了不连续的图形边界(采用sobel算子或区域增长)
%得到各个图形的连续边界
SE=strel('rectangle',[40 30]); % 结构定义
J2=imopen(BW,SE); % 开启运算
figure,imshow(J2),title('对二值图像进行开运算后的结果图像');
SE=strel('square',5); % 定义3×3腐蚀结构元素
J=imerode(~J2,SE);
BW2=(~J2)-J; % 检测边缘
figure,imshow(BW2),title('3*3腐蚀运算后的图像边界轮廓');
%填充了已有的检测的连续形状边界
B = imfill(BW2,'holes');
B = bwmorph(B,'remove');
figure,imshow(B),title('提取出的边界图像');
%将不同的图形进行分别标记,num表示连接的图形对象的个数
[Label,num] = bwlabel(B,8);
%得到各个图像的边界像素的数组
%计算各个图形单元的周长用连接像素点或数边界像素点个数的方法numPoints数组表示各个图形边界的像素个数(即用个数来表示周长)
%num = max(max(Label));
for i = 1 : num
Premeter(i) = 0;
end
[row,col] = size(Label);
for i = 1 : row
for j = 1 : col
if(Label(i,j) > 0)
Premeter(Label(i,j)) = Premeter(Label(i,j)) + 1; %计算标记后的各块图形边界中像素的个数的总数
end
end
end
%5计算各个图形单元的面积
FilledLabel = imfill(Label,'holes'); %填充打过标记的边界线中间围成的图形区域
figure,imshow(FilledLabel),title('打过标记后并已被填充的结果图像');
for i = 1 : num
Area(i) = 0;
end
[row,col] = size(FilledLabel);
for i = 1 : row
for j = 1 : col
if(FilledLabel(i,j) > 0)
Area(FilledLabel(i,j)) = Area(FilledLabel(i,j)) + 1; %通过统计像素点个数的方式来求各形状的面积
end
end