Matlab - 分水岭提取线 - 丢失信息

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)

结果是:

在此输入图像描述

正如您所看到的,许多信息都会丢失.有人可以帮帮我吗?谢谢.

rev*_*nge 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);
Run Code Online (Sandbox Code Playgroud)

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

除以结束 大津的方法 分段叠加