今天本来想试试mser算法的,结果没看懂。就先看看类似的分水岭算法,用c++又有些看不懂,于是就在matlab先试试,matlab上面没有源码,就拿它的例子试了试,大概明白它的用法,就把注释给贴了上来。
clear all; clc; close all;
center1 = -10;%第一个圆圆心的横坐标
center2 = -center1;%第二个圆圆心的横坐标
dist = sqrt(2*(2*center1)^2);%计算两个圆心之间的距离
radius = dist/2 * 1.4;%圆的半径为两者距离的一半的1.4倍,即两个圆肯定会相交
lims = [floor(center1-1.2*radius) ceil(center2+1.2*radius)];%floor 向下取整 ceil向上取整 为整个图像的大小
[x,y] = meshgrid(lims(1):lims(2));%生成一个69*69的网格平面
bw1 = sqrt((x-center1).^2 + (y-center1).^2) <= radius;%计算每个坐标的跟(-10,-10)和(10,10)的距离,如果小于半径则置1,否则置0
bw2 = sqrt((x-center2).^2 + (y-center2).^2) <= radius;
bw = bw1 | bw2;%两个二值图像按位相或,合并在一起
figure, imshow(bw,'InitialMagnification','fit'), title('bw')%显示两个相或之后的结果
D = bwdist(~bw);%对bw求反,然后求距离变