使用matlab程序,基于标准卡标定感压纸的压力分布
生活随笔
收集整理的這篇文章主要介紹了
使用matlab程序,基于标准卡标定感压纸的压力分布
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
任務說明
使用富士感壓紙(壓力測試紙)測量壓力,感壓紙受壓時會顯現顏色,根據峰值應力呈現不同的顏色深度。感壓制提供了標準比色卡,給出不同顏色深度對應的壓力值。
要求使用matlab,對照標準比色卡,對實驗中使用的比色卡進行計算,得出壓力分布情況。
上圖的測壓紙使用了14次,每次得到一個小區域,分別計算每個小區域的壓力分布情況。
解決思路
將所有圖像轉換為灰度圖像處理,根據比色卡中的離散的(壓力值,圖像灰度)數據對,擬合出函數,自變量為顏色灰度,因變量為壓力值。
將感壓紙中的區域分別裁剪出來,對每個小區域劃分網格,計算每個小格中的平均灰度值。
根據平均灰度值計算每個小格中的平均應力,將網格和應力值一起繪制在圖像上,顯示出來。
具體實現
%%手動分割各區域,對圖像使用鼠標劃方框圈出小區域,雙擊左鍵,對結果保存為.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_hangfor j = 1 : Integer_lieDivided_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:mfor l=1:nsum(i, j) = sum(i, j) + double(temp(k, l));endend 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:8temp = I{i}; [m,n] = size(temp);for j=1:1:mfor k=1:1:nsum_stand(i) = sum_stand(i) + double(temp(j, k));endend 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_hangArea1 = insertShape(Area1,'Line',[0 N*i N*Integer_lie N*i],'LineWidth',2,'Color','blue'); endfor i = 1 : Integer_lieArea1 = 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_hangfor j = 1:Integer_lietemp = press_val(i, j);text(50*j-45,50*i-25,num2str(temp),'horiz','left','color','r','fontsize',8)end end總結
以上是生活随笔為你收集整理的使用matlab程序,基于标准卡标定感压纸的压力分布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sublime text3安装插件 em
- 下一篇: 数据预测之BP神经网络具体应用以及mat