大作业数字图像处理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档