Matlab对圆环进行N等分

程序的源代码如下所示:

clc;clear;close all;  

im=imread('IMG_20170619_121931.jpg'); 
figure,imshow(im);
title('源图像');

%选取图像上的一个正方形的ROI区域;  
im0 = imcrop(im,[1198 54 2210 2210]);  
figure,
imshow(im0,'DisplayRange',[])  
title('选取ROI后的图像');

%%%%%高斯滤波%%%%%
sigma = 1.6;
gausFilter = fspecial('gaussian',[5 5],sigma);
blur=imfilter(im0,gausFilter,'replicate');
figure,imshow(blur);
title('高斯滤波后的图像');

level = graythresh(blur);   %%%ostu算法求阈值进行二值化
im1 = im2bw(blur,level);
figure,imshow(im1);
title('二值图像');

bw1=bwlabel(im1,8);
stats=regionprops(bw1,'Area');
bw2 = ismember(bw1, find([stats.Area]) == max([stats.Area])); %%找到面积最大的对象
figure,imshow(bw2);
title('二值图像');
[B L] = bwboundaries(bw2);  %寻找边缘,不包括孔,L是标记矩阵
figure,   %%%创建空白的图像
hold on
for k = 1:length(B)
    boundary = B{k};  %B是一个胞元数组,所以是B{k}
    plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 2);%% 画出边缘
end%整个循环表示的是描边


%% 
%%%%%寻找hough圆的圆心%%%%%%%
Rmin = 100;
Rmax = 200;
[centersBright, radiiBright] = imfindcircles(im1,[Rmin Rmax],'ObjectPolarity' ,'bright');
viscircles(centersBright,radiiBright,'EdgeColor','b');
hold on 
plot(centersBright(1),centersBright(2),'*');
hold off;

%% 等分圆
R=1050; t=0:pi/20:2*pi;
x=R*cos(t);
y=R*sin(t);
axis equal
n=36;a=2*pi/n;
for k=0:n-1
    hold on         %%%%%其中(1077,1055)是半径,1090是半斤,即直线的长度
    plot([1077-1090*cos(pi+k*a),1077+1090*cos(pi+k*a)],[1114-1090*sin(pi+k*a),1114+1090*sin(pi+k*a)])
end

其中原始图像为:

结果如图所示:

如果文章对您有帮助,请我喝杯奶茶吧

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值