使用matlab程序,基于标准卡标定感压纸的压力分布

任务说明

使用富士感压纸(压力测试纸)测量压力,感压纸受压时会显现颜色,根据峰值应力呈现不同的颜色深度。感压制提供了标准比色卡,给出不同颜色深度对应的压力值。
在这里插入图片描述

要求使用matlab,对照标准比色卡,对实验中使用的比色卡进行计算,得出压力分布情况。
在这里插入图片描述
上图的测压纸使用了14次,每次得到一个小区域,分别计算每个小区域的压力分布情况。

解决思路

  1. 将所有图像转换为灰度图像处理,根据比色卡中的离散的(压力值,图像灰度)数据对,拟合出函数,自变量为颜色灰度,因变量为压力值。

  2. 将感压纸中的区域分别裁剪出来,对每个小区域划分网格,计算每个小格中的平均灰度值。

  3. 根据平均灰度值计算每个小格中的平均应力,将网格和应力值一起绘制在图像上,显示出来。

在这里插入图片描述

具体实现

%%手动分割各区域,对图像使用鼠标划方框圈出小区域,双击左键,对结果保存为.fig格式
%读入图片
X = rgb2gray(imread('14_press_paper.jpg'));
Area1 = imcrop(X);
imshow(Area1);
%%将.fig图片读入为二维矩阵形式
open('C:\Users\77607\Desktop\感压纸在matlab上的程序标定\AREA\area_total.fig');

h = get(gca,'Children');

Area1 = get(h,'Cdata');

%图像不足的部分全部补为0。
%图像以cell单元的方式输出,其排列顺序与原图的排向顺序相同。

N = 50;         %指定小格的Size

[Area1_hang , Area1_lie] = size(Area1);
Integer_hang = floor(Area1_hang/N);
Integer_lie = floor(Area1_lie/N);

%使用二维矩阵保存小格的总灰度和平均灰度
sum = zeros(Integer_hang, Integer_lie); 
avg = zeros(Integer_hang, Integer_lie);

for i = 1 : Integer_hang
    for j = 1 : Integer_lie
        Divided_image(i,j) = {Area1((i-1)*N+1 : i*N , (j-1)*N+1 : j * N)};
        temp = Divided_image{i, j};   %I()指的是单元数组中的某一单元,而I{}指的是单元数组中某一单元的内容             
        [m,n] = size(temp);
        for k=1:m
            for l=1:n
                sum(i, j) = sum(i, j) + double(temp(k, l));
            end
        end 
        avg(i, j) = sum(i, j)/(m*n);
    end
end

%%根据标准比色卡拟合出函数
I1 = rgb2gray(imread('1.5Mpa.jpg'));
I2 = rgb2gray(imread('1.3Mpa.jpg'));
I3 = rgb2gray(imread('1.1Mpa.jpg'));
I4 = rgb2gray(imread('0.9Mpa.jpg'));
I5 = rgb2gray(imread('0.7Mpa.jpg'));
I6 = rgb2gray(imread('0.5Mpa.jpg'));
I7 = rgb2gray(imread('0.3Mpa.jpg'));
I8 = rgb2gray(imread('0.1Mpa.jpg'));
%单元数组,每一个单元可以有不同的尺寸,使用花括号创建
I = {I1, I2, I3, I4, I5, I6, I7, I8};
sum_stand = [0 0 0 0 0 0 0 0];
avg_stand = [0 0 0 0 0 0 0 0];
for i = 1:8
    temp = I{i};               
    [m,n] = size(temp);
    for j=1:1:m
        for k=1:1:n
        sum_stand(i) = sum_stand(i) + double(temp(j, k));
        end
    end 
    avg_stand(i) = sum_stand(i)/(m*n);
end
%%
%拟合曲线
Y = [1.5 1.3 1.1 0.9 0.7 0.5 0.3 0.1];
p2 = polyfit(avg_stand, Y, 2);   %2阶多项式拟合
%根据拟合函数计算各小格平均压力
press_val = polyval(p2, avg); 

%在截取的区域图像上画分割线
for i = 1 : Integer_hang
    Area1 = insertShape(Area1,'Line',[0 N*i N*Integer_lie N*i],'LineWidth',2,'Color','blue');
end

for i = 1 : Integer_lie
    Area1 = insertShape(Area1,'Line',[N*i 0  N*i N*Integer_hang ],'LineWidth',2,'Color','blue');
end
figure;
imshow(Area1);
%text(3,4,'0.001','horiz','left','color','r','fontsize',7)
hold on;
%在每个区域上标记上对应的应力值
for i = 1:Integer_hang
    for j = 1:Integer_lie
        temp = press_val(i, j);
        text(50*j-45,50*i-25,num2str(temp),'horiz','left','color','r','fontsize',8)
    end
end
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值