5

在此处输入图像描述

我有如下的静脉图像。我使用分水岭算法来提取静脉的骨架。

我的代码:(K是原始图像)。

level = graythresh(K);
BW = im2bw(K,level);
D = bwdist(~BW);
DL = watershed(D);
bgm = DL == 0;
imshow(bgm);

结果是:

在此处输入图像描述

正如你所看到的,很多信息都丢失了。有人可以帮帮我吗?谢谢。

4

3 回答 3

8

看起来光线有些不均匀。这可以使用某些形态学操作来纠正。基本思想是计算仅代表不均匀照明的图像并将其减去,或除以它(这也增强了对比度)。因为我们只想找到光照,所以使用足够大的结构元素很重要,这样操作会检查更多的全局属性而不是局部属性。

%# Load image and convert to [0,1].
A = im2double(imread('http://i.stack.imgur.com/TQp1i.png'));
%# Any large (relative to objects) structuring element will do.
%# Try sizes up to about half of the image size.
se = strel('square',32);
%# Removes uneven lighting and enhances contrast.
B = imdivide(A,imclose(A,se));
%# Otsu's method works well now.
C = B > graythresh(B);
D = bwdist(~C);
DL = watershed(D);
imshow(DL==0);

这是C(左)、加DL==0(中)及其在原始图像上的叠加:

按收盘分 大津的方法 分割叠加

于 2012-04-16T03:28:12.460 回答
1

是的,您可能需要降低阈值(低于 Otsu 的方法给您的阈值)。如果降低阈值时边缘图有噪声,则应在降低阈值之前应用二维高斯平滑滤波器。这会稍微移动边缘,但也会清除噪音,所以这是一个折衷方案。

二维高斯可以应用做类似的事情

w=gausswin(N,Alpha)  % you'll have to play with N and alpha
K = imfilter(K,w,'same','symmetric'); % something like these options

在应用算法的其余部分之前。

于 2012-04-15T21:56:03.247 回答
1

您正在丢失信息,因为当您应用 时im2bw,您基本上是将uint8像素亮度从intmin('uint8')==0到取值intmax('uint8')==255的图像转换为二进制图像(仅logical使用值)。这会导致您观察到的信息丢失。如果显示图像BW,您将看到其所有K值大于阈值的元素都level变为 1,而低于阈值的元素变为 0。

于 2012-04-15T22:07:57.890 回答