1、 . 实验报告实验课程: 数字图像处理 实验名称: 骨髓细胞计数 实验地点: 计算机中心405 学生姓名: 学 号: 指导教师: 实验时间: 年 月 一、实验要求:将被染成紫色的白细胞从较暗的红细胞和背景中分割出来,去除细胞粘连,用数字图像处理技术实现图像中紫色细胞的自动计数。二、实验过程1、对原图像进行预处理(1)由于源图像是彩色图像,为了便于进行仿真实验,在进行处理之前需要将彩色图像转换为灰度图像。用到的函数为rgb2gray(2)获取图像的全局阈值并将图像二值化,以方便后面实验中对图像进行形态学修饰的进行(3)在图像获取过程中,由于热传输等影响,会产生高斯噪声,较适合采用中值滤波的方法进
2、行去噪处理。因为,中值滤波的方法能够较好的保护细胞的边缘信息,满足本实验的需求;(4)删除小面积图像(5)对图像进行开闭运算。开和闭这两种运算可以除去比结构元素小的特定图像细节,同时保证不产生全局几何失真。开运算可以把比结构元素小的突刺滤掉,切断细长搭接而起到分离作用;闭运算可以把比结构元素小的缺口或孔填充上,搭接短的间隔而起到连接作用。(6)对图像进行孔洞填充,(7)开闭运算会留下一些偏离的孤立像素,使用bwareaopen来移除少于特定像素个数的斑点。BW2= bwareaopen(BW,P)从二值图像中移除所以少于P像素值的连通块,得到另外的二值图像BW3。实验图片显示如下:2、分割计数
3、 本次实验采用分水岭法对进行过预处理的图像进行分割和计数,最后计数得紫色细胞个数为35三、实验心得体会 通过这学期的学习,我获益匪浅,学到了很多有趣的知识,知道了什么是灰度图,二值化,阈值,分水岭等很多有趣的图像处理方法,知道了怎么使用matlab帮助查找自己不会的函数,也成功的自己独立完成了细胞的计数。这门课也激起了我对图像处理的兴趣,课程结束后也会继续学习更多的函数知识,不会停止这方面的学习。四、源代码Image = imread(b1.bmp); subplot(321);imshow(Image); title(原图); Image=rgb2gray(Image);subplot(32
4、2); imshow(Image); title(灰度图); Theshold = graythresh(Image);BW = im2bw(Image,1.3*Theshold);subplot(323),imshow(BW); title(二值化图像); BW1= medfilt2(BW,13 13);BW1=bwareaopen(BW,50,4)subplot(3,2,4); imshow(BW1); title(删除小面积后图像); se=strel(disk,5);fo=imopen(BW1,se);foc=imclose(fo,se)subplot(3,2,5); imshow(f
5、oc); title(开闭运算后图像);BW2=imfill(foc,holes);subplot(3,2,6); imshow(BW2);title(孔洞填充后图像);BW3=bwareaopen(BW2,20);D=bwdist(BW3);D=-D;D(BW3)=-Inf;L=watershed(D);rgb=label2rgb(L,jet);figure;imshow(rgb,);title(分水岭分割计算后图像);number=max(max(L)-1;number方法一源程序:A=imread(y1.bmp);B=rgb2gray(A); h=0 1 0,1 -4 1,0 1 0;
6、J1=conv2(B,h,same); K1=medfilt2(J1,3 3); BW=edge(K1,canny); SE= strel(line,11,90);BW1=imdilate(BW,SE); BW2=bwmorph(BW1,thin,Inf); H, theta, rho = hough(BW2, ThetaResolution, 0.2); subplot(221),imshow(H, , XData, theta, YData, rho, InitialMagnification, fit) axis on, axis normal xlabel(theta), ylabel
7、(rho) ,peaks = houghpeaks(H, 5); hold on plot(theta(peaks(:, 2), rho(peaks(:, 1), .linestyle, none, marker, s, color, w); lines = houghlines(BW2, theta, rho, peaks); subplot(222),imshow(BW2), hold on for k = 1:length(lines) xy = lines(k).point1 ; lines(k).point2; plot(xy(:,1), xy(:,2), LineWidth, 4, Color, .8 .8 .8); end 5 / 6