数字图像处理实验报告米粒
一、任务描述本次试验的主要任务是用 matlab 编写程序确定图 1(原始图像)中的米粒个数,达到能辨认连接的两个米粒和不足一个的米粒的精确度,并计算出了米粒的平均大小,标识出了最大面积的米粒。二、设计思路由于原始图像是24位彩色图像,不便于程序处理,所以首先将原始图像转换成为256级灰度图像,再将灰度图像二值化(如图2) ,并将边缘空白处赋值为临近灰度值,这样就得到了便于处理的二值图像。运用四连同准则的bwlable函数找到并大致确定米粒的个数M 0,实验中发现有的米粒面积过大(>1000) ,经分析为两个米粒连接在一起的情况,又考虑到噪声的存在,根据实验数据分析,我们设置了米粒面积的有效范围:40~0.6N1(N1为bwlable函数找到的最大面积) ,即小于40的视为噪声,大于0.6n1的视为有两个米粒连接。这样就进一步精确地计算出了米粒的个数M,再与累加的有效范围相除,就可以计算出米粒的平均大小了。最后,确定最大面积的米粒的坐标,将其赋值为白色,显示在256级灰度图像中。三、程序流程图图1图2四、程序代码clear; %清内存clc; %清命令窗口close all; %关闭图形窗口A = imread( 4.bmp ); %读入 24 位彩色图像[m n s] = size(A);C(:,:) = A(:,:,1); %将彩色图像转化 256 级灰度图像subplot(1,3,1);imshow(C); title( 原始图片 );%B(1:m*2/3,:)=im2bw(C(1:m*2/3,:),0.55); %将 256 级灰度图像二值化 %B(m*2/3:m,:)=im2bw(C(m*2/3:m,:),0.45); %适用于图片 rice.pngB(1:m*3/4,:)=im2bw(C(1:m*3/4,:),0.45); %适用于图片 4.bmpB(m*3/4:m,:)=im2bw(C(m*3/4:m,:),0.35);B(1,:) = B(2,:); %将边缘的空白赋值为邻近灰度值B(m,:) = B(m-1,:);B(:,1) = B(:,2);B(:,n) = B(:,n-1);subplot(1,3,2);imshow(B); title( 二值化图片 );L4 = bwlabel(B,4); %根据四连通准则判定目标Y = max(L4); %找矩阵 L4 每列的最大值count4 = max(Y) ; %找向量 Y 的最大值count3=count4;num1=0;for value = 1:count3;[r,c]=find(L4==value); %算面积 num=length(r); X(value)=num;N1=(max(X));if num>40num1=num1+num;end endfor i=1:count3 if X(i)>N1*0.6count4 = count4+1;X(i)=0;endif X(i)<40 count4 = count4-1;endendcount=count4average=num1/countN=(max(X))num2=find(N==X);[q,p]=find(L4==num2);for i=1:NC(q(i),p(i))=255;endsubplot(1,3,3);imshow(C)zoom on; %单击鼠标左键放大、右键缩小图像五、实验结果count =78 米粒个数average =428.9487 米粒平均面积N =635 最大面积米粒二二二二 二二二二二 二二二二二二