转换为二进制:Matlab

时间:2015-04-30 11:11:36

标签: matlab image-processing

我正在尝试使用细化算法提取静脉。到目前为止,我做了大量的图像增强代码,并且它非常有效。但是当我计算二进制阈值时,我无法识别背景中的静脉。由于模糊的输出,我无法进行进一步的细化处理。任何人都可以告诉我这段代码有什么不对吗?或者是因为阈值必须以其他方式完成。

a=imread('vein.jpg');
cform = makecform('srgb2lab');
for ii = 1:3
  a(:,:,ii) = medfilt2(a(:,:,ii),[5 5]);
end
lab = applycform(a,cform); 
b=lab(:,:,1);
c=im2bw(b,0.2);
neg=1-c;
color=a;
r=color(:,:,1);
r(~c)= 0;
g = color(:,:,2);
g(~c)= 0;
b = color(:,:,3);
b(~c)= 0;
color = cat(3,r,g,b);
gray=rgb2gray(color);
i1=imresize(gray,[256 256],'bilinear');
i2=histeq(i1,256);
e=medfilt2(i2,[5 5]);
figure(1),imshow(e);
f=medfilt2(e,[5 5]);
figure(2),imshow(f);
thresh_level = graythresh(g); 
BW = im2bw(g, thresh_level);          
figure(10),imshow(BW);

original image enhanced image BINARIZED

1 个答案:

答案 0 :(得分:0)

greythresh使用Otsu的方法,这是一种很好的通用方法,可用于强度分布。然而,它并不适用于所有情况,特别是如果您首先对图像应用了大量非线性处理(例如剪切通道)。

您可以尝试生成自己的阈值 - 查看强度分布,或者,因为您拥有它们,在颜色通道中分布,看看是否有合理的位置将它们分开。您可以尝试将其建模为高斯混合体(2似乎是一个很好的数字开始,查找gmdistribution.fit)或做一些其他类型的聚类。您可以使用颜色通道中的任何信息吗?

如果你以另一种方式结束 - 静脉更暗但是连续 - 那么你可以在二值化图像上使用形态学运算符使其恢复到预期范围。也许这就是细化算法的作用。

相关问题