资源描述
.
实验报告
实验课程: 数字图像处理
实验名称: 骨髓细胞计数
实验地点: 计算机中心405
学生姓名:
学 号:
指导教师:
实验时间: 年 月
一、实验要求:
将被染成紫色的白细胞从较暗的红细胞和背景中分割出来,去除细胞粘连,用数字图像处理技术实现图像中紫色细胞的自动计数。
二、实验过程
1、对原图像进行预处理
(1)由于源图像是彩色图像,为了便于进行仿真实验,在进行处理之前需要将彩色图像转换为灰度图像。用到的函数为rgb2gray
(2)获取图像的全局阈值并将图像二值化,以方便后面实验中对图像进行形态学修饰的进行
(3)在图像获取过程中,由于热传输等影响,会产生高斯噪声,较适合采用中值滤波的方法进行去噪处理。因为,中值滤波的方法能够较好的保护细胞的边缘信息,满足本实验的需求;
(4)删除小面积图像
(5)对图像进行开闭运算。开和闭这两种运算可以除去比结构元素小的特定图像细节,同时保证不产生全局几何失真。开运算可以把比结构元素小的突刺滤掉,切断细长搭接而起到分离作用;闭运算可以把比结构元素小的缺口或孔填充上,搭接短的间隔而起到连接作用。
(6)对图像进行孔洞填充,
(7)开闭运算会留下一些偏离的孤立像素,使用bwareaopen来移除少于特定像素个数的斑点。BW2= bwareaopen(BW,P)从二值图像中移除所以少于P像素值的连通块,得到另外的二值图像BW3。
实验图片显示如下:
2、分割计数
本次实验采用分水岭法对进行过预处理的图像进行分割和计数,最后计数得紫色细胞个数为35
三、实验心得体会
通过这学期的学习,我获益匪浅,学到了很多有趣的知识,知道了什么是灰度图,二值化,阈值,分水岭等很多有趣的图像处理方法,知道了怎么使用matlab帮助查找自己不会的函数,也成功的自己独立完成了细胞的计数。这门课也激起了我对图像处理的兴趣,课程结束后也会继续学习更多的函数知识,不会停止这方面的学习。
四、源代码
Image = imread('b1.bmp');
subplot(321);
imshow(Image);
title('原图');
Image=rgb2gray(Image);
subplot(322);
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(foc);
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];
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('\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
展开阅读全文