MATLAB 绘制圆点标定板

前言

本文主要利用Matlab中的rectangle函数,绘制圆点标定板。主要描述如何理解和设计圆点的大小、数量,如何建立标定板的原点坐标系、使得标定板正中央在原点上。

正文

建立圆点参数

如何使用MATLAB画出一个个实心圆点?这里使用到的函数是retangle( )
在MATLAB上,对于 retangle() 函数的句法如下。

rectangle(‘Position’,pos)
rectangle(‘Position’,pos,‘Curvature’,cur)
rectangle(___,Name,Value)
rectangle(ax,___)
r = rectangle(___)
可通过help rectangledoc rectangle来获得对于rectangle的详细说明。

在本文中,主要使用到的句法是rectangle(‘Position’,pos,‘Curvature’,cur)

对该函数的详细解释

% pos = [x y w h],它是一个四维的,一行四列的行向量 
% x、y元素表示的是该圆的平面位置
% w、h元素表示的是该圆的宽度和高度

注意!!!
在rectangle函数中,对于pos中的[x,y]元素表达的是,以该矩形的左下角为原点,不是以矩形的平面中心点为原点。

% cur = [horizontal vertical]
% cur为双精度类型的标量,范围[0 1]内的双精度类型的1x2矢量
% 由于我们建立的是圆点标定板,因此cur=[1,1],若方形则为[0,0]

对于曲率的解释
如何简明地解释曲率(curvature)?.

由于我们要画的是黑色的圆点标定板,因此需要在该函数后面对该圆进行格式化,即,边缘颜色edgecolor表面颜色facecolor

因此对于圆点标定板的主体就定下来了,MATLAB代码结构如下:

rectangle('Position',D{i,j},'Curvature',[1,1],...
 		  'edgecolor',[0,0,0],'facecolor',[0,0,0])
%其中[0,0,0]代表RGB为0,0,0的黑色
%需要什么颜色直接去查该颜色的RGB
%边缘颜色和表面颜色都设为RGB为0,0,0的黑色,因此该圆为黑色的实心圆

接下来解释D{i,j},先给出代码片D{i,j} = [X Y d/2 d/2];
X 表示圆的x轴坐标
Y 表示圆的y轴坐标
由于我们画的是圆,因此该圆的宽度和高度都为半径,即d/2

建立坐标系

建立圆点标定版主要完成以下三点

  1. 建立圆点标定板圆点的大小:设圆点的直径为2.5mm
  2. 设圆点标定板各圆点的间距:设间距为5mm
  3. 建立圆点标定板圆点的数量:设圆点有11行11列,共121个圆点。
  4. 建立圆点标定板的原点坐标:设圆点标定板的正中心为坐标原点。

以下给出标定板各点的分布和参数
标定板的分布和参数
设直径为d,行列为n,间隙为s,则
d = 2.5;
n = 21;
s = 5

设初始圆的x坐标为x0,y坐标为y0,在此先将x0,y0都设为0,则:
x0 = 0;
y0 = 0;

由于各圆点间有5mm的间隙,为了直观地看出各坐标系是如何分步的,因此将分布的各圆点坐标给出:

for i = 1:n
    x(i) = x0 + s*(i-1);
    y(i) = y0 + s*(i-1);
end

该[ x(i),y(i) ]坐标表示的是各圆点的坐标

下面开始画标定板

figure(1)
for i = 1:n
    X = x(i);
    for j = 1:n
        Y = y(j);
        D{
    
    i,j} = [X Y d/2 d/2];
        % 使用rectangle来画实心圆
        rectangle('Position',D{
    
    i,j},'Curvature',[1,1],...
          		  'edgecolor',[0,0,0],'facecolor',[0,0,0])
        hold on
    end
end

呈现的效果如下
起始坐标为[0,0]的图像
由于需要将标定板中心设为坐标原点,因此需要平移一段距离,经过计算后,得出起始坐标设为
x0 = -(n-1)*d-d/4;
y0 = -(n-1)*d-d/4;

呈现的效果如下
中心点坐标为[0,0]的图像

代码如下:

clear
clc
close all
warning off
% 画圆点标定板,以标定板中心为原点
d = 2.5;
n = 21;
s = 5;
x0 = -(n-1)*d-d/4;%
y0 = -(n-1)*d-d/4;%
for i = 1:n
    x(i) = x0 + s*(i-1);
    y(i) = y0 + s*(i-1);
end
figure(1)
for i = 1:n
    X = x(i);
    for j = 1:n
        Y = y(j);
        D{
    
    i,j} = [X Y d/2 d/2];
        % 使用rectangle来画实心圆
        rectangle('Position',D{
    
    i,j},'Curvature',[1,1],...
          'edgecolor',[0,0,0],'facecolor',[0,0,0])
        hold on
    end
end
    
grid on %加网格
xlabel('x轴')
ylabel('y轴')
axis equal

提供压缩包链接:绘制圆点标定板.


参考资料

MATLAB rectangle函数.

Matlab中rectangle函数使用.

猜你喜欢

转载自blog.csdn.net/AlbertDS/article/details/122370054