【问题标题】:Conversion to binary : Matlab转换为二进制:Matlab
【发布时间】:2015-07-10 01:33:17
【问题描述】:

我正在尝试使用细化算法提取静脉。到目前为止,我为图像增强做了很多代码,而且效果很好。但是当我计算二进制阈值时,我无法识别背景中的静脉。由于输出模糊,我无法进行进一步的细化处理。谁能告诉我这段代码有什么问题?还是因为阈值必须以其他方式完成。

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);

【问题讨论】:

  • 你能把原图也发一下吗(在颜色处理之前)?

标签: matlab image-processing


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-08-07
    • 2016-03-16
    • 2013-08-14
    • 2015-10-27
    • 1970-01-01
    • 2019-02-13
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多