投影仪的非线性校正

来源:互联网 发布:找不到导航软件怎么办 编辑:程序博客网 时间:2024/04/30 13:50

由于工作需要,在使用投影仪进行三维轮廓测量的时候,发现需要对投影仪发出的光强进行非线性校正,故借此谈谈如何对投影仪进行非线性校正。
比如,当我们用投影仪投出0到255的光强时,因为工艺问题、投影空间背景光、反射光以及噪声等问题,我们使用相机拍摄到的投影图片,是不能得到理想的线性对应的光强。
因此针对这一现象,我们就要使用非线性校正来解决。
通过非线性校正的方法,我们可以使投影仪投出来的光强,与相机拍到的光强之间是线性关系。
本次实验使用的投影仪是DELL投影仪M115HD。具体的操作流程如下:
1、在投影空间摆放一个白板(反射率不高),白板尽量正对投影仪,用投影仪分别投影出光强为全0到全255的图像,然后使用相机连续拍摄得到256张图片。
这里写图片描述
2、接下来就把任务交给MATLAB了,我们读取256张图片,为了减少计算量,以及减少误差。由于相机的分辨率为640*480,我们选取图片的中心部分(200*200)这一局域进行计算。

clear;clc;mat(:,:,001) = im2double(imread('新建文件夹\Image0000.bmp'));mat(:,:,002) = im2double(imread('新建文件夹\Image0001.bmp'));mat(:,:,003) = im2double(imread('新建文件夹\Image0002.bmp'));mat(:,:,004) = im2double(imread('新建文件夹\Image0003.bmp'));mat(:,:,005) = im2double(imread('新建文件夹\Image0004.bmp'));mat(:,:,006) = im2double(imread('新建文件夹\Image0005.bmp'));mat(:,:,007) = im2double(imread('新建文件夹\Image0006.bmp'));mat(:,:,008) = im2double(imread('新建文件夹\Image0007.bmp'));mat(:,:,009) = im2double(imread('新建文件夹\Image0008.bmp'));mat(:,:,010) = im2double(imread('新建文件夹\Image0009.bmp'));mat(:,:,011) = im2double(imread('新建文件夹\Image0010.bmp'));mat(:,:,012) = im2double(imread('新建文件夹\Image0011.bmp'));mat(:,:,013) = im2double(imread('新建文件夹\Image0012.bmp'));mat(:,:,014) = im2double(imread('新建文件夹\Image0013.bmp'));mat(:,:,015) = im2double(imread('新建文件夹\Image0014.bmp'));mat(:,:,016) = im2double(imread('新建文件夹\Image0015.bmp'));mat(:,:,017) = im2double(imread('新建文件夹\Image0016.bmp'));mat(:,:,018) = im2double(imread('新建文件夹\Image0017.bmp'));mat(:,:,019) = im2double(imread('新建文件夹\Image0018.bmp'));mat(:,:,020) = im2double(imread('新建文件夹\Image0019.bmp'));mat(:,:,021) = im2double(imread('新建文件夹\Image0020.bmp'));mat(:,:,022) = im2double(imread('新建文件夹\Image0021.bmp'));mat(:,:,023) = im2double(imread('新建文件夹\Image0022.bmp'));mat(:,:,024) = im2double(imread('新建文件夹\Image0023.bmp'));mat(:,:,025) = im2double(imread('新建文件夹\Image0024.bmp'));mat(:,:,026) = im2double(imread('新建文件夹\Image0025.bmp'));mat(:,:,027) = im2double(imread('新建文件夹\Image0026.bmp'));mat(:,:,028) = im2double(imread('新建文件夹\Image0027.bmp'));mat(:,:,029) = im2double(imread('新建文件夹\Image0028.bmp'));mat(:,:,030) = im2double(imread('新建文件夹\Image0029.bmp'));mat(:,:,031) = im2double(imread('新建文件夹\Image0030.bmp'));mat(:,:,032) = im2double(imread('新建文件夹\Image0031.bmp'));mat(:,:,033) = im2double(imread('新建文件夹\Image0032.bmp'));mat(:,:,034) = im2double(imread('新建文件夹\Image0033.bmp'));mat(:,:,035) = im2double(imread('新建文件夹\Image0034.bmp'));mat(:,:,036) = im2double(imread('新建文件夹\Image0035.bmp'));mat(:,:,037) = im2double(imread('新建文件夹\Image0036.bmp'));mat(:,:,038) = im2double(imread('新建文件夹\Image0037.bmp'));mat(:,:,039) = im2double(imread('新建文件夹\Image0038.bmp'));mat(:,:,040) = im2double(imread('新建文件夹\Image0039.bmp'));mat(:,:,041) = im2double(imread('新建文件夹\Image0040.bmp'));mat(:,:,042) = im2double(imread('新建文件夹\Image0041.bmp'));mat(:,:,043) = im2double(imread('新建文件夹\Image0042.bmp'));mat(:,:,044) = im2double(imread('新建文件夹\Image0043.bmp'));mat(:,:,045) = im2double(imread('新建文件夹\Image0044.bmp'));mat(:,:,046) = im2double(imread('新建文件夹\Image0045.bmp'));mat(:,:,047) = im2double(imread('新建文件夹\Image0046.bmp'));mat(:,:,048) = im2double(imread('新建文件夹\Image0047.bmp'));mat(:,:,049) = im2double(imread('新建文件夹\Image0048.bmp'));mat(:,:,050) = im2double(imread('新建文件夹\Image0049.bmp'));mat(:,:,051) = im2double(imread('新建文件夹\Image0050.bmp'));mat(:,:,052) = im2double(imread('新建文件夹\Image0051.bmp'));mat(:,:,053) = im2double(imread('新建文件夹\Image0052.bmp'));mat(:,:,054) = im2double(imread('新建文件夹\Image0053.bmp'));mat(:,:,055) = im2double(imread('新建文件夹\Image0054.bmp'));mat(:,:,056) = im2double(imread('新建文件夹\Image0055.bmp'));mat(:,:,057) = im2double(imread('新建文件夹\Image0056.bmp'));mat(:,:,058) = im2double(imread('新建文件夹\Image0057.bmp'));mat(:,:,059) = im2double(imread('新建文件夹\Image0058.bmp'));mat(:,:,060) = im2double(imread('新建文件夹\Image0059.bmp'));mat(:,:,061) = im2double(imread('新建文件夹\Image0060.bmp'));mat(:,:,062) = im2double(imread('新建文件夹\Image0061.bmp'));mat(:,:,063) = im2double(imread('新建文件夹\Image0062.bmp'));mat(:,:,064) = im2double(imread('新建文件夹\Image0063.bmp'));mat(:,:,065) = im2double(imread('新建文件夹\Image0064.bmp'));mat(:,:,066) = im2double(imread('新建文件夹\Image0065.bmp'));mat(:,:,067) = im2double(imread('新建文件夹\Image0066.bmp'));mat(:,:,068) = im2double(imread('新建文件夹\Image0067.bmp'));mat(:,:,069) = im2double(imread('新建文件夹\Image0068.bmp'));mat(:,:,070) = im2double(imread('新建文件夹\Image0069.bmp'));mat(:,:,071) = im2double(imread('新建文件夹\Image0070.bmp'));mat(:,:,072) = im2double(imread('新建文件夹\Image0071.bmp'));mat(:,:,073) = im2double(imread('新建文件夹\Image0072.bmp'));mat(:,:,074) = im2double(imread('新建文件夹\Image0073.bmp'));mat(:,:,075) = im2double(imread('新建文件夹\Image0074.bmp'));mat(:,:,076) = im2double(imread('新建文件夹\Image0075.bmp'));mat(:,:,077) = im2double(imread('新建文件夹\Image0076.bmp'));mat(:,:,078) = im2double(imread('新建文件夹\Image0077.bmp'));mat(:,:,079) = im2double(imread('新建文件夹\Image0078.bmp'));mat(:,:,080) = im2double(imread('新建文件夹\Image0079.bmp'));mat(:,:,081) = im2double(imread('新建文件夹\Image0080.bmp'));mat(:,:,082) = im2double(imread('新建文件夹\Image0081.bmp'));mat(:,:,083) = im2double(imread('新建文件夹\Image0082.bmp'));mat(:,:,084) = im2double(imread('新建文件夹\Image0083.bmp'));mat(:,:,085) = im2double(imread('新建文件夹\Image0084.bmp'));mat(:,:,086) = im2double(imread('新建文件夹\Image0085.bmp'));mat(:,:,087) = im2double(imread('新建文件夹\Image0086.bmp'));mat(:,:,088) = im2double(imread('新建文件夹\Image0087.bmp'));mat(:,:,089) = im2double(imread('新建文件夹\Image0088.bmp'));mat(:,:,090) = im2double(imread('新建文件夹\Image0089.bmp'));mat(:,:,091) = im2double(imread('新建文件夹\Image0090.bmp'));mat(:,:,092) = im2double(imread('新建文件夹\Image0091.bmp'));mat(:,:,093) = im2double(imread('新建文件夹\Image0092.bmp'));mat(:,:,094) = im2double(imread('新建文件夹\Image0093.bmp'));mat(:,:,095) = im2double(imread('新建文件夹\Image0094.bmp'));mat(:,:,096) = im2double(imread('新建文件夹\Image0095.bmp'));mat(:,:,097) = im2double(imread('新建文件夹\Image0096.bmp'));mat(:,:,098) = im2double(imread('新建文件夹\Image0097.bmp'));mat(:,:,099) = im2double(imread('新建文件夹\Image0098.bmp'));mat(:,:,100) = im2double(imread('新建文件夹\Image0099.bmp'));mat(:,:,101) = im2double(imread('新建文件夹\Image0100.bmp'));mat(:,:,102) = im2double(imread('新建文件夹\Image0101.bmp'));mat(:,:,103) = im2double(imread('新建文件夹\Image0102.bmp'));mat(:,:,104) = im2double(imread('新建文件夹\Image0103.bmp'));mat(:,:,105) = im2double(imread('新建文件夹\Image0104.bmp'));mat(:,:,106) = im2double(imread('新建文件夹\Image0105.bmp'));mat(:,:,107) = im2double(imread('新建文件夹\Image0106.bmp'));mat(:,:,108) = im2double(imread('新建文件夹\Image0107.bmp'));mat(:,:,109) = im2double(imread('新建文件夹\Image0108.bmp'));mat(:,:,110) = im2double(imread('新建文件夹\Image0109.bmp'));mat(:,:,111) = im2double(imread('新建文件夹\Image0110.bmp'));mat(:,:,112) = im2double(imread('新建文件夹\Image0111.bmp'));mat(:,:,113) = im2double(imread('新建文件夹\Image0112.bmp'));mat(:,:,114) = im2double(imread('新建文件夹\Image0113.bmp'));mat(:,:,115) = im2double(imread('新建文件夹\Image0114.bmp'));mat(:,:,116) = im2double(imread('新建文件夹\Image0115.bmp'));mat(:,:,117) = im2double(imread('新建文件夹\Image0116.bmp'));mat(:,:,118) = im2double(imread('新建文件夹\Image0117.bmp'));mat(:,:,119) = im2double(imread('新建文件夹\Image0118.bmp'));mat(:,:,120) = im2double(imread('新建文件夹\Image0119.bmp'));mat(:,:,121) = im2double(imread('新建文件夹\Image0120.bmp'));mat(:,:,122) = im2double(imread('新建文件夹\Image0121.bmp'));mat(:,:,123) = im2double(imread('新建文件夹\Image0122.bmp'));mat(:,:,124) = im2double(imread('新建文件夹\Image0123.bmp'));mat(:,:,125) = im2double(imread('新建文件夹\Image0124.bmp'));mat(:,:,126) = im2double(imread('新建文件夹\Image0125.bmp'));mat(:,:,127) = im2double(imread('新建文件夹\Image0126.bmp'));mat(:,:,128) = im2double(imread('新建文件夹\Image0127.bmp'));mat(:,:,129) = im2double(imread('新建文件夹\Image0128.bmp'));mat(:,:,130) = im2double(imread('新建文件夹\Image0129.bmp'));mat(:,:,131) = im2double(imread('新建文件夹\Image0130.bmp'));mat(:,:,132) = im2double(imread('新建文件夹\Image0131.bmp'));mat(:,:,133) = im2double(imread('新建文件夹\Image0132.bmp'));mat(:,:,134) = im2double(imread('新建文件夹\Image0133.bmp'));mat(:,:,135) = im2double(imread('新建文件夹\Image0134.bmp'));mat(:,:,136) = im2double(imread('新建文件夹\Image0135.bmp'));mat(:,:,137) = im2double(imread('新建文件夹\Image0136.bmp'));mat(:,:,138) = im2double(imread('新建文件夹\Image0137.bmp'));mat(:,:,139) = im2double(imread('新建文件夹\Image0138.bmp'));mat(:,:,140) = im2double(imread('新建文件夹\Image0139.bmp'));mat(:,:,141) = im2double(imread('新建文件夹\Image0140.bmp'));mat(:,:,142) = im2double(imread('新建文件夹\Image0141.bmp'));mat(:,:,143) = im2double(imread('新建文件夹\Image0142.bmp'));mat(:,:,144) = im2double(imread('新建文件夹\Image0143.bmp'));mat(:,:,145) = im2double(imread('新建文件夹\Image0144.bmp'));mat(:,:,146) = im2double(imread('新建文件夹\Image0145.bmp'));mat(:,:,147) = im2double(imread('新建文件夹\Image0146.bmp'));mat(:,:,148) = im2double(imread('新建文件夹\Image0147.bmp'));mat(:,:,149) = im2double(imread('新建文件夹\Image0148.bmp'));mat(:,:,150) = im2double(imread('新建文件夹\Image0149.bmp'));mat(:,:,151) = im2double(imread('新建文件夹\Image0150.bmp'));mat(:,:,152) = im2double(imread('新建文件夹\Image0151.bmp'));mat(:,:,153) = im2double(imread('新建文件夹\Image0152.bmp'));mat(:,:,154) = im2double(imread('新建文件夹\Image0153.bmp'));mat(:,:,155) = im2double(imread('新建文件夹\Image0154.bmp'));mat(:,:,156) = im2double(imread('新建文件夹\Image0155.bmp'));mat(:,:,157) = im2double(imread('新建文件夹\Image0156.bmp'));mat(:,:,158) = im2double(imread('新建文件夹\Image0157.bmp'));mat(:,:,159) = im2double(imread('新建文件夹\Image0158.bmp'));mat(:,:,160) = im2double(imread('新建文件夹\Image0159.bmp'));mat(:,:,161) = im2double(imread('新建文件夹\Image0160.bmp'));mat(:,:,162) = im2double(imread('新建文件夹\Image0161.bmp'));mat(:,:,163) = im2double(imread('新建文件夹\Image0162.bmp'));mat(:,:,164) = im2double(imread('新建文件夹\Image0163.bmp'));mat(:,:,165) = im2double(imread('新建文件夹\Image0164.bmp'));mat(:,:,166) = im2double(imread('新建文件夹\Image0165.bmp'));mat(:,:,167) = im2double(imread('新建文件夹\Image0166.bmp'));mat(:,:,168) = im2double(imread('新建文件夹\Image0167.bmp'));mat(:,:,169) = im2double(imread('新建文件夹\Image0168.bmp'));mat(:,:,170) = im2double(imread('新建文件夹\Image0169.bmp'));mat(:,:,171) = im2double(imread('新建文件夹\Image0170.bmp'));mat(:,:,172) = im2double(imread('新建文件夹\Image0171.bmp'));mat(:,:,173) = im2double(imread('新建文件夹\Image0172.bmp'));mat(:,:,174) = im2double(imread('新建文件夹\Image0173.bmp'));mat(:,:,175) = im2double(imread('新建文件夹\Image0174.bmp'));mat(:,:,176) = im2double(imread('新建文件夹\Image0175.bmp'));mat(:,:,177) = im2double(imread('新建文件夹\Image0176.bmp'));mat(:,:,178) = im2double(imread('新建文件夹\Image0177.bmp'));mat(:,:,179) = im2double(imread('新建文件夹\Image0178.bmp'));mat(:,:,180) = im2double(imread('新建文件夹\Image0179.bmp'));mat(:,:,181) = im2double(imread('新建文件夹\Image0180.bmp'));mat(:,:,182) = im2double(imread('新建文件夹\Image0181.bmp'));mat(:,:,183) = im2double(imread('新建文件夹\Image0182.bmp'));mat(:,:,184) = im2double(imread('新建文件夹\Image0183.bmp'));mat(:,:,185) = im2double(imread('新建文件夹\Image0184.bmp'));mat(:,:,186) = im2double(imread('新建文件夹\Image0185.bmp'));mat(:,:,187) = im2double(imread('新建文件夹\Image0186.bmp'));mat(:,:,188) = im2double(imread('新建文件夹\Image0187.bmp'));mat(:,:,189) = im2double(imread('新建文件夹\Image0188.bmp'));mat(:,:,190) = im2double(imread('新建文件夹\Image0189.bmp'));mat(:,:,191) = im2double(imread('新建文件夹\Image0190.bmp'));mat(:,:,192) = im2double(imread('新建文件夹\Image0191.bmp'));mat(:,:,193) = im2double(imread('新建文件夹\Image0192.bmp'));mat(:,:,194) = im2double(imread('新建文件夹\Image0193.bmp'));mat(:,:,195) = im2double(imread('新建文件夹\Image0194.bmp'));mat(:,:,196) = im2double(imread('新建文件夹\Image0195.bmp'));mat(:,:,197) = im2double(imread('新建文件夹\Image0196.bmp'));mat(:,:,198) = im2double(imread('新建文件夹\Image0197.bmp'));mat(:,:,199) = im2double(imread('新建文件夹\Image0198.bmp'));mat(:,:,200) = im2double(imread('新建文件夹\Image0199.bmp'));mat(:,:,201) = im2double(imread('新建文件夹\Image0200.bmp'));mat(:,:,202) = im2double(imread('新建文件夹\Image0201.bmp'));mat(:,:,203) = im2double(imread('新建文件夹\Image0202.bmp'));mat(:,:,204) = im2double(imread('新建文件夹\Image0203.bmp'));mat(:,:,205) = im2double(imread('新建文件夹\Image0204.bmp'));mat(:,:,206) = im2double(imread('新建文件夹\Image0205.bmp'));mat(:,:,207) = im2double(imread('新建文件夹\Image0206.bmp'));mat(:,:,208) = im2double(imread('新建文件夹\Image0207.bmp'));mat(:,:,209) = im2double(imread('新建文件夹\Image0208.bmp'));mat(:,:,210) = im2double(imread('新建文件夹\Image0209.bmp'));mat(:,:,211) = im2double(imread('新建文件夹\Image0210.bmp'));mat(:,:,212) = im2double(imread('新建文件夹\Image0211.bmp'));mat(:,:,213) = im2double(imread('新建文件夹\Image0212.bmp'));mat(:,:,214) = im2double(imread('新建文件夹\Image0213.bmp'));mat(:,:,215) = im2double(imread('新建文件夹\Image0214.bmp'));mat(:,:,216) = im2double(imread('新建文件夹\Image0215.bmp'));mat(:,:,217) = im2double(imread('新建文件夹\Image0216.bmp'));mat(:,:,218) = im2double(imread('新建文件夹\Image0217.bmp'));mat(:,:,219) = im2double(imread('新建文件夹\Image0218.bmp'));mat(:,:,220) = im2double(imread('新建文件夹\Image0219.bmp'));mat(:,:,221) = im2double(imread('新建文件夹\Image0220.bmp'));mat(:,:,222) = im2double(imread('新建文件夹\Image0221.bmp'));mat(:,:,223) = im2double(imread('新建文件夹\Image0222.bmp'));mat(:,:,224) = im2double(imread('新建文件夹\Image0223.bmp'));mat(:,:,225) = im2double(imread('新建文件夹\Image0224.bmp'));mat(:,:,226) = im2double(imread('新建文件夹\Image0225.bmp'));mat(:,:,227) = im2double(imread('新建文件夹\Image0226.bmp'));mat(:,:,228) = im2double(imread('新建文件夹\Image0227.bmp'));mat(:,:,229) = im2double(imread('新建文件夹\Image0228.bmp'));mat(:,:,230) = im2double(imread('新建文件夹\Image0229.bmp'));mat(:,:,231) = im2double(imread('新建文件夹\Image0230.bmp'));mat(:,:,232) = im2double(imread('新建文件夹\Image0231.bmp'));mat(:,:,233) = im2double(imread('新建文件夹\Image0232.bmp'));mat(:,:,234) = im2double(imread('新建文件夹\Image0233.bmp'));mat(:,:,235) = im2double(imread('新建文件夹\Image0234.bmp'));mat(:,:,236) = im2double(imread('新建文件夹\Image0235.bmp'));mat(:,:,237) = im2double(imread('新建文件夹\Image0236.bmp'));mat(:,:,238) = im2double(imread('新建文件夹\Image0237.bmp'));mat(:,:,239) = im2double(imread('新建文件夹\Image0238.bmp'));mat(:,:,240) = im2double(imread('新建文件夹\Image0239.bmp'));mat(:,:,241) = im2double(imread('新建文件夹\Image0240.bmp'));mat(:,:,242) = im2double(imread('新建文件夹\Image0241.bmp'));mat(:,:,243) = im2double(imread('新建文件夹\Image0242.bmp'));mat(:,:,244) = im2double(imread('新建文件夹\Image0243.bmp'));mat(:,:,245) = im2double(imread('新建文件夹\Image0244.bmp'));mat(:,:,246) = im2double(imread('新建文件夹\Image0245.bmp'));mat(:,:,247) = im2double(imread('新建文件夹\Image0246.bmp'));mat(:,:,248) = im2double(imread('新建文件夹\Image0247.bmp'));mat(:,:,249) = im2double(imread('新建文件夹\Image0248.bmp'));mat(:,:,250) = im2double(imread('新建文件夹\Image0249.bmp'));mat(:,:,251) = im2double(imread('新建文件夹\Image0250.bmp'));mat(:,:,252) = im2double(imread('新建文件夹\Image0251.bmp'));mat(:,:,253) = im2double(imread('新建文件夹\Image0252.bmp'));mat(:,:,254) = im2double(imread('新建文件夹\Image0253.bmp'));mat(:,:,255) = im2double(imread('新建文件夹\Image0254.bmp'));mat(:,:,256) = im2double(imread('新建文件夹\Image0255.bmp'));%% 求每个像素点的最大值和最小值for i = 1:640    for j = 1:480        max(i,j) = 0;        min(i,j) = 255;    endendfor i = 221:420    for j = 141:340        for n = 1:256            if(max(i,j)<=mat(i,j,n))                max(i,j) = mat(i,j,n);            end            if(min(i,j)>=mat(i,j,n))                min(i,j) = mat(i,j,n);            end        end    endend%% 去除背景光和反射光的影响for i = 1:640    for j = 1:480        for n = 1:256            Nmat(i,j,n) = 255;        end    endendfor i = 221:420    for j = 141:340        for n = 1:256            Nmat(i,j,n) = 255 * (mat(i,j,n) - min(i,j))/(max(i,j) - min(i,j));        end    endend%% 去除高斯噪声for n = 1:256    Nemat(n) = 0;    Newmat(n) = 0;end%% 得到最后的输入输出对应关系Newmat数组for n = 1:256    for i = 221:420        for j = 141:340            Nemat(n) = Nmat(i,j,n) + Nemat(n);        end    end        Newmat(n) = Nemat(n)/40000;    end

Newmat数组数据如下图所示,
这里写图片描述
到这里,我们就可以发现,投影仪投出来的光强确实是非线性的,而这带来的结果会导致三维测量的误差。
总之,我们的最终目标是要得到线性的光强即,投影仪的光强值与相机拍到的光强值成线性关系。
3、求Newmat数组对应的反函数

clc;clear;load('Newmat.mat');x = 1:256;n = 21;[p,s]= polyfit(Newmat,x,n);Newmat1 = polyval(p,Newmat);plot(Newmat1);

这里写图片描述
如此,我们就得到了一个近似线性的对应关系,如图所示,直线的前端和后端不满足线性关系,所以我们只选取中间(10-250)的线段。
经过上述工作,在使用投影仪投出图像时,我们需先让光强值在10-250之内,然后在经过上图的函数关系转换,得到最终传递给投影仪的值,这样相机拍到的值就与我们初始设定的光强值成线性关系了。

0 0
原创粉丝点击