W00*_*00f 5 matlab image-processing watershed

我有一个静脉图像如下.我使用分水岭算法来提取静脉的骨架.
我的代码:(K是原始图像).
level = graythresh(K);
BW = im2bw(K,level);
D = bwdist(~BW);
DL = watershed(D);
bgm = DL == 0;
imshow(bgm);
Run Code Online (Sandbox Code Playgroud)
结果是:

正如您所看到的,许多信息都会丢失.有人可以帮帮我吗?谢谢.
看起来灯光有点不均匀.这可以使用某些形态学操作来纠正.基本思想是计算仅表示不均匀照明并减去它的图像,或者除以它(这也增强了对比度).因为我们只想找到光照,所以使用足够大的结构元素非常重要,这样操作就会检查更多的全局属性而不是本地属性.
%# 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);
Run Code Online (Sandbox Code Playgroud)
这是C(左),加DL==0(中)及其在原始图像上的叠加:
