加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab图像处理应用实验:染色体识别与统计

(2011-01-03 10:47:13)
标签:

杂谈

分类: matlab使用

一、染色体识别与统计

待处理的图像如下所示。图像有明显的噪音,部分染色体有断开和粘连的情况。

http://76.13.18.77/3068/2573028434_76ccda2baa.jpg

要识别其中的染色体并统计其数目,我们采用Matlab平台提供的一些图像处理函数。基本方法如下:

1、读取待处理的图像,将其转化为灰度图像,然后反白处理。

I = imread(’chrimage.bmp’);I2 = rgb2gray(I);s = size(I2);

 

I4 = 255*ones(s(1), s(2), ‘uint8′);

I5 = imsubtract(I4,I2);

2、对图像进行中值滤波去除噪音。经试验,如果采用3×3的卷积因子,噪音不能较好地去除,染色体附近毛糙严重。而5×5和7×7的卷积因子能取得较好的效果。图示滤噪前后的效果对比。

I3 = medfilt2(I5,[5 5]);

http://76.13.18.77/3136/2573022640_4f1193fbb3.jpg

3、将图像转化为二值图像。经试验,采用门限值为0.3附近时没有染色体断开和粘连(如下左图),便于后期统计。

I3 = imadjust(I3);bw = im2bw(I3, 0.3);

在此步骤,如果使用graythresh函数自动寻找门限,得到的图像染色体断开的比较多(如下中图),此时可以将白色区域膨胀,使断开的的染色体连接(如下右图)。

level = graythresh(I3);bw = im2bw(I3,level);se = strel(’disk’,5);

 

bw = imclose(bw,se);

http://76.13.18.77/3126/2573022808_e084b680da.jpg

两种方法相比,前者对染色体面积的计算比较准确,后者对不同图像的适应性较强。下面的步骤将基于前一种方法。

4、去除图像中面积过小的,可以肯定不是染色体的杂点。这些杂点一部分是滤噪没有滤去的染色体附近的小毛糙,一部分是图像边缘亮度差异产生的。

bw = bwareaopen(bw, 10);

5、标记连通的区域,以便统计染色体数量与面积。

[labeled,numObjects] = bwlabel(bw,4);

6、用颜色标记每一个染色体,以便直观显示。此时染色体的断开与粘连问题已基本被解决。最终效果如下图。

RGB_label=label2rgb(labeled,@spring,’c',’shuffle’);

http://76.13.18.77/3151/2572198295_130b67eee5.jpg

7、统计被标记的染色体区域的面积分布,显示染色体总数。统计总数为46,与人工数出数目的相同。

chrdata = regionprops(labeled,’basic’)allchrs = [chrdata.Area];num = size(allchrs)

 

nbins = 20;

figure,hist(allchrs,nbins);

title(num(2))

http://76.13.18.77/3013/2573022892_e7b91c26d6.jpg

至此,染色体识别与统计完成。此方法采用Matlab已有的函数,简单且快捷。但缺点是此程序是专为这一幅待处理图像写的,诸如门限、滤噪方法的特定性强。同时没有经过大量同类待处理图像的测试,系统通用性不强。不过作为实验,了解提取与分析目标图像中的有效信息的基本方法,是足够的。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有