数字图像处理课程设计.docx
《数字图像处理课程设计.docx》由会员分享,可在线阅读,更多相关《数字图像处理课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
数字图像处理课程设计
上海理工大学
计算机工程学院
实验报告
红细胞数目统计实验名称
课程名称数字图像处理
学号06姓名王磊
日期2012-11-27地点图文信息中心
成绩教师韩彦芳
一、设计内容:
主题:
《红细胞数目检测》
详细说明:
读入红细胞图片,通过中值滤波,开运算,闭运算,以及贴标签等方法获得细胞个数。
二、现实意义:
细胞数目检测在现实生活中的意义主要体现在医学上的作用,可通过细胞数目的检测来查看并估计病人或动物的血液中细胞数,如估测血液中红细胞、白细胞、血小板、淋巴细胞等细胞的数目,同时也可检测癌细胞的数目来查看医疗效果,根据这一系列的指标来对病人或动物进行治疗,是具有极其重要的现实作用的。
三、涉及知识内容:
1、中值滤波
2、开运算
3、闭运算
4、二值化
5、贴标签
四、实例分析及截图效果:
(1)代码如下:
1、程序中定义图像变量说明
(1)Image-------------------------------------------------;原图变量-------------
(2)Image_BW-------------------------------------------------------值化图象;
(3)Image_BW_medfilt-------------------------中值滤波后的二值化图像;
(4)Optimized_Image_BW---通过“初次二值化图像”与“中值滤波后的二值化图像”进行“或”运算优化图像效果;
(5)Reverse_Image_BW--------------------------优化后二值化图象取反;
(6)Filled_Image_BW----------------------已填充背景色的二进制图像;
(7)Open_Image_BW--------------------------------------开运算后的图像;
2、实现代码:
%-------图片前期处理-------------------
%第一步:
读取原图,并显示
A=imread('E:
\红细胞');
Image=rgb2gray(A);%RGB转化成灰度图
figure,imshow(Image);
title('【原图】');
%第二步:
进行二值化
Theshold=graythresh(Image);%取得图象的全局域值
Image_BW=im2bw(Image,Theshold);%二值化图象
figure,imshow(Image_BW);
title('【初次二值化图像】');
%第三步二值化图像进行中值滤波
Image_BW_medfilt=medfilt2(Image_BW,[1313]);
figure,imshow(Image_BW_medfilt);
title('【中值滤波后的二值化图像】');
第四步:
通过“初次二值化图像”与“中值滤波后的二值化图像”进行“或”运算优化图%.
像效果
Optimized_Image_BW=Image_BW_medfilt|Image_BW;
figure,imshow(Optimized_Image_BW);
title('【进行“或”运算优化图像效果】');
%第五步:
优化后二值化图象取反,保证:
‘1'-〉‘白色',‘0'-〉‘黑色'
%方便下面的操作
Reverse_Image_BW=~Optimized_Image_BW;
figure,imshow(Reverse_Image_BW);
title('【优化后二值化图象取反】');
%第六步:
填充二进制图像的背景色,去掉细胞内的黑色空隙
Filled_Image_BW=bwfill(Reverse_Image_BW,'holes');
figure,imshow(Filled_Image_BW);
title('【已填充背景色的二进制图像】');
%第七步:
对图像进行开运算,去掉细胞与细胞之间相粘连的部分
SE=strel('disk',4);
Open_Image_BW=imopen(Filled_Image_BW,SE);
figure,imshow(Open_Image_BW);
title('【开运算后的图像】');
%-------------开始计算细胞数--------------------
[LabelNumber]=bwlabel(Open_Image_BW,8)%初步取得细胞个数
Array=bwlabel(Open_Image_BW,8);%取得贴标签处理后的图像
Sum=[];
%依次统计贴标签后数组
fori=1:
Number
[r,c]=find(Array==i);%获取相同标签号的位置,将位置信息存入[r,c]
rc=[rc];
Num=length(rc);%取得vc数组的元素的个数
Sum([i])=Num;%将元素个数存入Sum数组
End
Sum
N=0;
%假如Sum数组中的元素大于了400,表示有两个细胞相连,像素点较多,即分为两个细胞数
fori=1:
length(Sum)
if(Sum([i]))>1500
N=N+1;
end
end
%------------------统计最终细胞数-----------
Number=Number+N
3、运行效果截图:
第一步:
读取原图,并显示
A=imread('E:
\红细胞');
Image=rgb2gray(A);
figure,imshow(Image);
title('【原图】');
第二步:
进行二值化
Theshold=graythresh(Image);%取得图象的全局域值
Image_BW=im2bw(Image,Theshold);%二值化图象
figure,imshow(Image_BW);
title('【初次二值化图像】');
第三步:
进行二值化图像
Image_BW_medfilt=medfilt2(Image_BW,[1313]);
figure,imshow(Image_BW_medfilt);
title('【中值滤波后的二值化图像】');
第四步:
通过“初次二值化图像”与“中值滤波后的二值化图像”进行“或”运算优化图像效果
Optimized_Image_BW=Image_BW_medfilt|Image_BW;
figure,imshow(Optimized_Image_BW);
title('【进行“或”运算优化图像效果】');
'黑色'为',0'白色'为:
'1'保证,第五步:
优化后二值化图象取反
Reverse_Image_BW=~Optimized_Image_BW;
figure,imshow(Reverse_Image_BW);
title('【优化后二值化图象取反】');
第六步:
填充二进制图像的背景色,去掉细胞内的黑色空隙
Filled_Image_BW=bwfill(Reverse_Image_BW,'holes');
figure,imshow(Filled_Image_BW);
title('【已填充背景色的二进制图像】');
第七步:
对图像进行开运算,去掉细胞与细胞之间相粘连的部分
SE=strel('disk',4);
Open_Image_BW=imopen(Filled_Image_BW,SE);
figure,imshow(Open_Image_BW);
title('【开运算后的图像】');
第八步:
开始计算细胞数
[LabelNumber]=bwlabel(Open_Image_BW,8)%初步取得细胞个数
Array=bwlabel(Open_Image_BW,8);%取得贴标签处理后的图像
Sum=[];
%依次统计贴标签后数组
fori=1:
Number
[r,c]=find(Array==i);%获取相同标签号的位置,将位置信息存入[r,c]
rc=[rc];
数组的元素的个数vc取得Num=length(rc);%.
Sum([i])=Num;%将元素个数存入Sum数组
end
Sum
N=0;
-----假如Sum数组中的元素大于了1500,表示有两个细胞相连,像素点较多,即分为两个细胞数---
fori=1:
length(Sum)
if(Sum([i]))>1500
N=N+1;
end
end
Number=Number+N%----统计最终细胞数
第九步:
最终检测结果:
四、算法分析
(1)中值滤波
利用中值滤波可以对图像进行平滑处理。
算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。
很容易自适应化。
(2)开运算
先腐蚀后膨胀的过程称为开运算。
用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
(3)闭运算
先膨胀后腐蚀的过程称为闭运算。
用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。
五、心得体会
耗费了半个月的时间来处理这份课程设计,期间虽然要去复习研究生考试但是我还是坚持了下来,也许实验不是很完美,但却是自己努力完成,因此很有成就感。
最开始以为自己做的很好,都自己完成了,但是跟大家对比后才发现原来自己已经做错了,还好有老师和同学的教导与指点,再次在此表示感谢。
对于这次的课程设计来说,由于是我我首次通过编写代码来完成对图像的处理,这些都是以前没有接触过的,难免出现一些失误,而且又由于自己以前没有接触过matlab,第一次的接触使用中也出现一些错误,不过都通过了后来的翻阅资料等一一解决,这实在是一份难得的经验。
在学习了很多之后我开始慢慢的对MATLAB的操作熟练起来,并且在实践中找到了学习的乐趣。
虽然在这短时间里需要不断查资料,然后对着电脑,把一个个的问题通过这样或那样的方法解决。
我坚信虽然道路是曲折的,但是前途是光明的。