绘制重心用哪个函数
时间: 2023-12-21 16:07:31 浏览: 34
在 MATLAB 中,可以使用 `regionprops` 函数来获取二值图像中连通区域的一些统计信息,包括面积、周长、重心等。`regionprops` 函数的语法格式为:
```matlab
stats = regionprops(BW, properties)
```
其中,`BW` 是一个二值图像,`properties` 是一个字符串或字符串数组,用于指定要计算的统计量,如 `'Area'` 表示计算连通区域的面积,`'Centroid'` 表示计算连通区域的重心坐标。`regionprops` 函数返回一个结构体数组 `stats`,其中包含了每个连通区域的统计信息。例如,可以使用以下代码获取一个连通区域的重心坐标,并在图像上绘制出来:
```matlab
% 读取二值图像
BW = imread('binary_image.png');
% 获取连通区域的统计信息
stats = regionprops(BW, 'Centroid');
% 获取第一个连通区域的重心坐标
centroid = stats(1).Centroid;
% 在图像上绘制重心
hold on;
plot(centroid(1), centroid(2), 'r+', 'MarkerSize', 10, 'LineWidth', 2);
```
在上面的代码中,`plot` 函数用于在图像上绘制红色十字标记,表示连通区域的重心。
相关问题
根据多个频率对应的幅度和相位如何绘制频率的传递函数
根据多个频率对应的幅度和相位可以使用波束法绘制频率的传递函数。具体步骤如下:
1. 将频率分成一段一段,比如将频率分成10段。
2. 对于每一段频率,记录其对应的幅度和相位。
3. 将每一段频率对应的幅度和相位转换成直角坐标系中的坐标。
4. 将每一段频率对应的坐标连成一条折线,得到一个多边形。
5. 将多边形的重心作为频率响应的中心,绘制一条通过该点的直线,这条直线就是频率响应的中心线。
6. 将多边形的每个顶点与频率响应的中心线连接,得到多个三角形。
7. 对每个三角形应用波束法,绘制出频率响应的传递函数。
通过这种方法,可以绘制出具有多个频率的传递函数,从而更好地了解系统的频率响应特性。
设计被控对象为二阶过阻尼传递函数的三输入单输出的模糊控制器的M语言仿真,采用三角形隶属度函数,划分五个模糊子集,在解模糊之前将控制器的输出权值用S函数变换,再用重心法解模糊,绘制隶属度函数图像和仿真图象,编写完整代码
以下是基于Matlab的模糊控制器的代码实现,其中使用了三角形隶属度函数,划分了五个模糊子集,并使用S函数变换和重心法解模糊:
```matlab
% 设计被控对象为二阶过阻尼传递函数的三输入单输出的模糊控制器的M语言仿真
% 采用三角形隶属度函数,划分五个模糊子集,在解模糊之前将控制器的输出权值用S函数变换,再用重心法解模糊
% 绘制隶属度函数图像和仿真图象,编写完整代码
close all;clear all;clc
% 设定被控对象传递函数的参数
Wn = 1;
Zeta = 0.5;
% 设定模糊控制器的输入变量范围
e_range = [-2, 2]; % 误差范围
ec_range = [-2, 2]; % 误差变化率范围
u_range = [-10, 10]; % 控制量范围
% 设定模糊子集
e = linspace(e_range(1), e_range(2), 5); % 误差
ec = linspace(ec_range(1), ec_range(2), 5); % 误差变化率
u = linspace(u_range(1), u_range(2), 5); % 控制量
% 设定模糊控制器的输出变量
delta_u = linspace(-1, 1, 5); % 控制增量
% 设计隶属度函数
e_mf = trimf(e, [-2, -1, 0]); % 误差的隶属度函数
ec_mf = trimf(ec, [-2, -1, 0]); % 误差变化率的隶属度函数
u_mf = trimf(u, [-10, -5, 0]); % 控制量的隶属度函数
delta_u_mf = trapmf(delta_u, [-1, -0.5, 0, 0.5]); % 控制增量的隶属度函数
% 绘制隶属度函数图像
figure(1)
subplot(2, 2, 1)
plot(e, e_mf)
title('误差的隶属度函数')
xlabel('误差')
ylabel('隶属度')
subplot(2, 2, 2)
plot(ec, ec_mf)
title('误差变化率的隶属度函数')
xlabel('误差变化率')
ylabel('隶属度')
subplot(2, 2, 3)
plot(u, u_mf)
title('控制量的隶属度函数')
xlabel('控制量')
ylabel('隶属度')
subplot(2, 2, 4)
plot(delta_u, delta_u_mf)
title('控制增量的隶属度函数')
xlabel('控制增量')
ylabel('隶属度')
% 设定输入和输出的模糊矩阵
% 行数为误差的个数,列数为误差变化率的个数,第三维为控制量的个数
input_mf = zeros(5, 5, 5);
output_mf = zeros(5, 5, 5);
% 构造输入和输出的模糊矩阵
for i = 1:5
for j = 1:5
for k = 1:5
input_mf(i, j, k) = min(e_mf(i), min(ec_mf(j), u_mf(k))); % 输入模糊矩阵
output_mf(i, j, k) = delta_u_mf(3 + round((k - 3) * (1 + min(e_mf(i), ec_mf(j))))); % 输出模糊矩阵,使用S函数变换
end
end
end
% 绘制输入和输出的模糊矩阵
figure(2)
for i = 1:5
subplot(2, 3, i)
surf(ec, e, input_mf(:, :, i)')
title(['控制量为', num2str(u(i))])
xlabel('误差变化率')
ylabel('误差')
zlabel('隶属度')
end
figure(3)
for i = 1:5
subplot(2, 3, i)
surf(ec, e, output_mf(:, :, i)')
title(['控制量为', num2str(u(i))])
xlabel('误差变化率')
ylabel('误差')
zlabel('隶属度')
end
% 设定被控对象
s = tf('s');
P = Wn^2 / (s^2 + 2*Zeta*Wn*s + Wn^2);
% 设定控制器的初始状态
e0 = 0;
ec0 = 0;
u0 = 0;
% 设定仿真时间和步长
t = 0:0.01:10;
% 进行模糊控制的仿真
for i = 1:length(t)
% 计算误差和误差变化率
e1 = e0 - P * u0;
ec1 = ec0 - P * (u0 - u_range(1)) / (u_range(2) - u_range(1));
% 计算输入模糊矩阵的隶属度值
input_mf_value = zeros(5, 5, 5);
for j = 1:5
for k = 1:5
input_mf_value(:, j, k) = input_mf(:, j, k) * min(e_mf, e1)';
end
end
% 计算输出模糊矩阵的隶属度值
output_mf_value = zeros(5, 5, 5);
for j = 1:5
for k = 1:5
output_mf_value(:, j, k) = output_mf(:, j, k) * input_mf_value(:, j, k);
end
end
% 计算控制增量
delta_u_value = zeros(5, 5, 5);
for j = 1:5
for k = 1:5
delta_u_value(:, j, k) = output_mf_value(:, j, k) * delta_u';
end
end
% 解模糊,使用重心法
delta_u1 = sum(sum(sum(delta_u_value .* delta_u))) / sum(sum(sum(delta_u_value)));
% 计算控制量
u1 = u0 + delta_u1;
% 更新初始状态
e0 = e1;
ec0 = ec1;
u0 = u1;
% 记录仿真结果
e(i) = e1;
ec(i) = ec1;
u(i) = u1;
end
% 绘制仿真结果
figure(4)
subplot(3, 1, 1)
plot(t, e)
title('误差')
xlabel('时间')
ylabel('误差')
subplot(3, 1, 2)
plot(t, ec)
title('误差变化率')
xlabel('时间')
ylabel('误差变化率')
subplot(3, 1, 3)
plot(t, u)
title('控制量')
xlabel('时间')
ylabel('控制量')
```
代码中采用了重心法进行模糊控制器的解模糊,通过绘制隶属度函数图像和仿真图象,可以更直观地了解模糊控制器的性能和参数设计的合理性。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)