最小二乘法计算圆度

最小二乘法计算圆度步骤:(1)分离出目标,目标为二值图像;
(2)检测边缘坐标;
(3)最小二乘法拟合圆;
(4)计算目标像素面积及其圆度。
结果如下所示:
在这里插入图片描述
在这里插入图片描述

MATLAB实现:

clear; close all; clc;
Origin=imread('xxx.jpg');
I=im2gray(Origin);
I=imcomplement(I);
BW=edge(I,'Canny');
[cols,rows]=size(BW);
[x, y] = meshgrid(1:rows, 1:cols);  
X = x(BW);   %所有边缘点的X坐标
Y = y(BW);   %所有边缘点的Y坐标

Area=sum(sum(I>100));   %目标面积          

%最小二乘法圆拟合
[N,M] = size(X);   
C = (N*sum(X.^2)-sum(X).^2);
D = (N*sum(X.*Y)-sum(X)*sum(Y));
E = N*sum(X.^3)+N*sum(X.*Y.^2)-sum(X.^2+Y.^2)*sum(X);
G = (N*sum(Y.^2)-sum(Y)*sum(Y));
H = N*sum(X.^2.*Y)+N*sum(Y.^3)-sum(X.^2+Y.^2)*sum(Y);

a = (H*D-E*G)/(C*G-D.^2);
b = (H*C-E*D)/(D.^2-G*C);
c = -(sum(X.^2+Y.^2)+a*sum(X)+b*sum(Y))/N;

A = -a/2;   %圆心X坐标
B = -b/2;   %圆心Y坐标
R = sqrt(a.^2+b.^2-4*c)/2; %半径

metric=4*pi*Area/(2*pi*R).^2;   %圆度
fprintf('metric = %f',metric);

figure;imshow(Origin);%画圆
alpha=0:pi/50:2*pi;%角度[0,2*pi]
hold on;
x=A+R*cos(alpha);
y=B+R*sin(alpha);
plot(x,y,'-r');axis equal 

参考文献
[1]https://blog.csdn.net/Jacky_Ponder/article/details/70314919?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163650851416780262513152%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163650851416780262513152&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-4-70314919.first_rank_v2_pc_rank_v29&utm_term=%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95%E8%AE%A1%E7%AE%97%E5%9C%86%E5%BA%A6&spm=1018.2226.3001.4187
[2]https://download.csdn.net/download/csj350867749/8908869?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163651100316780357224898%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fdownload.%2522%257D&request_id=163651100316780357224898&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2downloadfirst_rank_v2~rank_dl_default-2-8908869.pc_v2_rank_dl_default&utm_term=%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95%E8%AE%A1%E7%AE%97%E5%9C%86%E5%BA%A6&spm=1018.2226.3001.4451.2

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值