Part 1
我们拿到的是这样一张卫星图 要求对中间部分的几个大油罐(白色圆形区域)进行计数,就是下图中间的部分(图片被裁剪后) 这里我们使用MATLAB来实现功能
Part 2
因为不会自己写算法,就用了MATLAB中自带的寻找圆形区域的函数 imfindcircles(); (使用圆形 Hough 变换查找圆)
具体用法可在官方文档查找,在这里就不做过多介绍, 附上链接
其他图像处理部分在代码中均有注释,可自行参考,附上代码:
img = imread('circle.jpg'); %读取图像
img = rgb2gray(img); %转换为灰度图
img = filter2(fspecial('average',5),img)/255; %进行3*3模板平滑滤波
img = imresize(img,1.3); %比例放大1.3倍
img = imbinarize(img,0.89); %转换为二值图像
img=imopen(img,strel('disk',6)); % 对图像开运算
img=imclose(img,strel('disk',7)); % 对图像闭运算
se=strel('disk',11); % 形态结构元素
img=imdilate(img,se); % 灰度图像膨胀
figure
imshow(img);
b=img;
[centers,radii] = imfindcircles(b,[16 90],'ObjectPolarity','bright','Sensitivity',0.90,'EdgeThreshold',0.82); %在图片中寻找圆形
viscircles(centers,radii,'Color','r'); %绘制圆形
a=length(radii); %显示圆形个数
disp('圆形区域的个数是');
disp(a); %输出结果
运行的结果就是下图这个鬼样子: 可以看到,图片中圆形白色区域都被红实线标记,最后输出结果: 算是大概完成了要求,但不具有普适性,函数参数不适用于其他图片,仅提供一个思路,还望各位大佬指正。
|