Пример двумерного водораздела на Mathworks.com можно резюмировать ниже. :
bw = imread('someImage.tif');
D = -bwdist(~bw);
D(~bw) = -Inf;
L = watershed(D);
Я не совсем понимаю, зачем здесь нужен D(~bw) = -Inf;
, который заставляет пиксели, не принадлежащие объектам, быть в -Inf (изначально нулевом).
Я попытался запустить программу без этого оператора, и результат оказался запутанным. Почему необходимо принудительно задавать эти пиксели в -Inf, чтобы водораздел получил правильный результат?
Как указал Фредерик, я использовал surf
для построения поверхности здесь перед запуском D(~bw) = -Inf;
, результат такой:
После запуска результат такой: