1、数字图像处理课程设计实验报告参考模板上 海 理 工 大 学计 算 机 工 程 学 院实 验 报 告实验名称红细胞数目统计课程名称数字图像处理姓名王磊学号0916020226日期2012-11-27地点图文信息中心成绩教师韩彦芳一、设计内容:主题:红细胞数目检测详细说明:读入红细胞图片,通过中值滤波,开运算,闭运算,以及贴标签等方法获得细胞个数。二、现实意义:细胞数目检测在现实生活中的意义主要体现在医学上的作用,可通过细胞数目的检测来查看并估计病人或动物的血液中细胞数,如估测血液中红细胞、白细胞、血小板、淋巴细胞等细胞的数目,同时也可检测癌细胞的数目来查看医疗效果,根据这一系列的指标来对病人或动
2、物进行治疗,是具有极其重要的现实作用的。三、涉及知识内容: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-开运算后的图像;
3、2、实现代码:%-图片前期处理-%第一步:读取原图,并显示A = imread(E:红细胞3.png);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,13
4、13);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_
5、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( 【开运算后的图像】);%
6、-开始计算细胞数-Label Number=bwlabel(Open_Image_BW,8) %初步取得细胞个数Array = bwlabel(Open_Image_BW,8); %取得贴标签处理后的图像Sum = ;%依次统计贴标签后数组for i=1:Numberr,c = find(Array=i); %获取相同标签号的位置,将位置信息存入r,crc = r c;Num = length(rc); %取得vc数组的元素的个数Sum(i)=Num; %将元素个数存入Sum数组EndSumN = 0;%假如Sum数组中的元素大于了400,表示有两个细胞相连,像素点较多,即分为两个细胞数for
7、 i=1:length(Sum)if(Sum(i) 1500N = N+1;endend%-统计最终细胞数-Number = Number+N 3、运行效果截图:第一步:读取原图,并显示A = imread(E:红细胞3.png );Image=rgb2gray(A);figure,imshow(Image);title( 【原图】); 第二步:进行二值化Theshold = graythresh(Image);%取得图象的全局域值Image_BW = im2bw(Image,Theshold);%二值化图象figure,imshow(Image_BW);title( 【初次二值化图像】);第
8、三步:进行二值化图像Image_BW_medfilt= medfilt2(Image_BW,13 13);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 =
9、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,
10、imshow(Open_Image_BW);title( 【开运算后的图像】);第八步:开始计算细胞数Label Number=bwlabel(Open_Image_BW,8)%初步取得细胞个数Array = bwlabel(Open_Image_BW,8);%取得贴标签处理后的图像Sum = ;%依次统计贴标签后数组for i=1:Numberr,c = find(Array=i);%获取相同标签号的位置,将位置信息存入r,crc = r c;Num = length(rc);%取得vc数组的元素的个数Sum(i)=Num;%将元素个数存入Sum数组endSumN = 0;-假如Sum数组中
11、的元素大于了1500,表示有两个细胞相连,像素点较多,即分为两个细胞数-for i=1:length(Sum)if(Sum(i) 1500N = N+1;endendNumber = Number+N %-统计最终细胞数第九步:最终检测结果:四、算法分析(1)中值滤波 利用中值滤波可以对图像进行平滑处理。算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。很容易自适应化。(2)开运算先腐蚀后膨胀的过程称为开运算。用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。(3)闭运算 先膨胀后腐蚀的过程称为闭运算。用来填充物体内细小空洞、连接邻近物体、平滑其
12、边界的同时并不明显改变其面积。 五、心得体会耗费了半个月的时间来处理这份课程设计,期间虽然要去复习研究生考试但是我还是坚持了下来,也许实验不是很完美,但却是自己努力完成,因此很有成就感。最开始以为自己做的很好,都自己完成了,但是跟大家对比后才发现原来自己已经做错了,还好有老师和同学的教导与指点,再次在此表示感谢。对于这次的课程设计来说,由于是我我首次通过编写代码来完成对图像的处理,这些都是以前没有接触过的,难免出现一些失误,而且又由于自己以前没有接触过matlab,第一次的接触使用中也出现一些错误,不过都通过了后来的翻阅资料等一一解决,这实在是一份难得的经验。在学习了很多之后我开始慢慢的对MATLAB的操作熟练起来,并且在实践中找到了学习的乐趣。虽然在这短时间里需要不断查资料,然后对着电脑,把一个个的问题通过这样或那样的方法解决。我坚信虽然道路是曲折的,但是前途是光明的。 友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!