這個代碼我也不是很懂原理,但是效果我覺得還可以。放進來方便我以后使用。
若代碼侵權,請聯系我。
function bw = multi_detect(I,num)
if isa(I,'double')
I = double(I);
end
range = [min(I(:)) max(I(:))];
smoothValue = 0.01*diff(range).^2;
%imguidedfilter導向濾波函數。方差比較大的區域,保持值不變,在平滑區域,使用臨近像素平均(也就退化為普通均值濾波)
J = imguidedfilter(I,'DegreeOfSmoothing',smoothValue);
thresh = multithresh(J,2);
L = imquantize(J,thresh);
L = imfill(L);
bw = ones(size(L));
bw(L ==num) = 0;
放一個效果圖:

