利用Matlab实现乳腺平片的自动胸肌分割

计算机图像处理不是什么新鲜事,算法众多,各式各样的应用也比比皆是。但是,由于大公司的商业利益和技术保护,以及伦理的束缚,医学图像处理的平民化发展和应用都受到极大的限制。不过,由于开源框架的不断发展,使得全球的 developer 都可以参与到自己感兴趣的项目中去,又不断的促进开源项目进一步发展。据此,走在世界前边的当属美国,其次是印度,我们大天朝正紧追慢赶,前途不可限量!公认的乳腺钼靶图像及文本数据非欧洲乳腺影像分析协会(MIAS)提供的莫属,他们向全球公开了322幅乳腺钼靶检查的图像,及对应的诊断结果,供世界上研究和爱好乳腺平片辅助诊断的小伙伴们使用。定神一看,其实人家早在2004年就公开了这些数据,而且还是免费的,尽管不像 kaggle 那样财大气粗,动不动几百万美金的奖励,但也能时不时的举办个分割和识别大赛,毕竟 MIAS 是在欧洲又是学院派啊。欧美真是太可爱了,尤其欧洲,傻傻的 + 闷不做声,但底蕴着实深厚~

医学影像的辅助诊断,首先离不开的对图像的预处理,预处理包括:图像增强和图像分割。图像增强就是主要利用形态学对图像进行腐蚀、扩张、二值化、直方图均衡化等等操作。图像分割是图像识别之前的非常重要的一个步骤,去掉无用信息、抽取局部感兴趣区域等等。对于上述提到的乳腺平片的辅助诊断,我们仅需要对乳腺组织这个感兴趣区内识别有无结节、占位甚至钙化,而类似三角形的胸肌是不需要考虑的,就是需要分割并丢弃的组织。

数据有了,算法也有的是,剩下的就看你怎么用了!

用到的几个关键技术: 1、二值化 2、直方图均衡化 3、中值滤波 4、区域生长算法 5、sobel边缘检测 6、霍夫变换 7、指数函数拟合

部分代码:

count_left = length(find(I_left(:)==0));
count_right= length(find(I_right(:)==0));
fliped = 0;
if count_left>count_right
   fliped = 1;
   img_original_fliped = fliplr(img_original);
else
   img_original_fliped = img_original;
end

j = double(img_original_fliped);
[m,n] = size(j);
lk=j;
for p=1:m
   for q=1:n
       if j(p,q) >=50
           lk(p,q)=255;
       else lk(p,q)=0;
       end
   end
end
k = uint8(lk);

binaryImage = imfill(k, 'holes');
binaryImage = ExtractNLargestBlobs(binaryImage, 1);
j = double(maskedImage);
[m,n] = size(j);
lk=j;
for p=1:m
   for q=1:n
       if j(p,q) >=167
           lk(p,q)=255;
       else lk(p,q)=0;
       end
   end
end
k = uint8(lk);

denois = medfilt2(k,[10 4]);

x=5; y=5;
I = im2double(denois);
J = regiongrowing(I,x,y,0.2);
%J = imfill(j,'holes');
figure(), imshow(J), title(['标识胸肌',filename]);

找到胸肌边界的坐标,利用拟合工具箱,以95%置信区间找到拟合这个边界的最佳指数函数系数:

[fitresult, gof] = createFit2(col,row);
s = size(col);
x_col_position = col(s(1));
xdata = linspace(1,x_col_position);
% % % ydata = fitresult.p1*xdata.^4 + fitresult.p2*xdata.^3 + fitresult.p3*xdata.^2 + fitresult.p4*xdata + fitresult.p5;
% ydata = fitresult.p1*xdata.^5 + fitresult.p2*xdata.^4 + fitresult.p3*xdata.^3 + fitresult.p4*xdata.^2 + fitresult.p5*xdata + fitresult.p6;
ydata = fitresult.a*exp(fitresult.b*xdata) + fitresult.c*exp(fitresult.d*xdata);
figure(12),plot(xdata,ydata)
利用Matlab实现乳腺平片的自动胸肌分割

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动到顶部