Python 如何读取10位原始图像?其中包含RGB-IR数据
我想知道如何从我的10位原始数据(它有rgb ir imagedata)中提取rgb图像 如何用Python或MATLAB阅读 拍摄时的相机分辨率为1280x720: 室内照片 户外照片 摄像机型号:e-CAM40_CUMI4682_MODPython 如何读取10位原始图像?其中包含RGB-IR数据,python,matlab,numpy,image-processing,Python,Matlab,Numpy,Image Processing,我想知道如何从我的10位原始数据(它有rgb ir imagedata)中提取rgb图像 如何用Python或MATLAB阅读 拍摄时的相机分辨率为1280x720: 室内照片 户外照片 摄像机型号:e-CAM40_CUMI4682_MOD 非常感谢我使用了以下图像处理阶段: 拜耳马赛克彩色通道分离 线性拉伸每个颜色通道 简单白平衡 将红外颜色通道替换为绿色(将图像转换为标准拜耳格式) 恢复拜耳马赛克 简单的伽马校正 德莫萨奇 我没有处理红外颜色通道,而是将其替换为绿色通道 根据您添加的RG
非常感谢我使用了以下图像处理阶段:
- 拜耳马赛克彩色通道分离
- 线性拉伸每个颜色通道
- 简单白平衡
- 将红外颜色通道替换为绿色(将图像转换为标准拜耳格式)
- 恢复拜耳马赛克
- 简单的伽马校正
- 德莫萨奇
CFA(滤色器阵列)顺序为:
B | G
-- --
IR| R
以下Matlab代码将图像处理为RGB:
srcN=1280;
srcM=720;
f=fopen('image_raw.raw','r');
%读取为转置矩阵维度,并转置矩阵。
%原因是Matlab内存oreder是列主程序,并且
%原始图像存储在主行中(如C数组)。
I=fread(f,[srcN,srcM],'uint16');
fclose(f);
I=I′;
%从范围[0,1023]转换为范围[0,1](以双图像格式工作)。
I=I/(2^10-1);
%拜耳镶嵌色通道分离
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%假设输入格式为GBRG拜耳马赛克格式。
%分离颜色组件。
B=I(1:2:end,1:2:end);
G=I(1:2:end,2:2:end);
IR=I(2:2:结束,1:2:结束);
R=I(2:2:end,2:2:end);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%线性拉伸每个颜色通道。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%线性streatch蓝色通道。
B=imadjust(B,stretchlim(B[0.020.98]),[]);
%线性streatch绿色通道。
G=imadjust(G,stretchlim(G[0.020.98]),[]);
%线性streatch红色通道。
R=imadjust(R,stretchlim(R[0.02 0.98]),[]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%简单白平衡
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%中位数或R、G和B。
rgb_med=[中位数(R(:)、中位数(G(:)、中位数(B(:))];
rgb_比例=最大值(rgb_-med)。/rgb_-med;
%缩放每个颜色通道,使其具有相同的中间值。
R=R*rgb_标度(1);
G=G*rgb_标度(2);
B=B*rgb_标度(3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%恢复拜耳马赛克。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%将拉伸的颜色通道插入I。
I(1:2:end,1:2:end)=B;
I(1:2:end,2:2:end)=G;
%I(2:2:end,1:2:end)=G;%将IR替换为绿色。
I(2:2:end,2:2:end)=R;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%将IR替换为绿色-首先将绿色大小调整为图像的完整大小。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
T=imresize(G[srcM,srcN]);%T-临时绿色,尺寸1280x720
I(2:2:end,1:2:end)=T(2:2:end,1:2:end);%将IR替换为绿色。
I=最大值(最小值(I,1),0);%将I限制在范围[0,1]内。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%简单伽马校正
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
γ=0.45;
I=I.^gamma;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%德莫萨奇
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%转换为uint8(范围[0255])。
I=uint8(圆形(I*255));
RGB=demosaic(I,“bggr”);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
imshow(RGB);
结果:
现在颜色正常了
室外图像处理: 对室外图像进行“室内”处理,得到如下结果: 白树是近红外光谱穿透R、G和B像素(不仅仅是红外像素)的标志。
植被的叶绿素在近红外光谱中具有高反射。请参阅:,然后在谷歌上搜索。
需要从红色、绿色和蓝色通道中减去IR
我使用了以下图像处理阶段:
- 拜耳马赛克彩色通道分离
- 从红色、绿色和蓝色通道中减去红外“剩余”。
- 线性拉伸每个颜色通道
- 简单白平衡
- 恢复拜耳马赛克
- 简单的伽马校正
- Demosaic
- 调整RGB图像的大小以降低分辨率
srcN=1280;
srcM=720;
f=fopen('ir_6.raw','r');
%读取为转置矩阵维度,并转置矩阵。
%原因是Matlab内存oreder是列主程序,并且
%原始图像存储在主行中(如C数组)。
I=fread(f,[srcN,srcM],'uint16');
fclose(f);
I=I′;
%从范围[0,1023]转换为范围[0,1](以双图像格式工作)。
I=I/(2^10-1);
%拜耳镶嵌色通道分离
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%假设输入格式为GBRG拜耳马赛克格式。
%分离颜色组件。
B=I(1:2:end,1:2:end);
G=I(1:2:end,2:2:end);
IR=I(2:2:结束,1:2:结束);
R=I(2:2:end,2:2:end);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%从R、G和B中减去IR“盈余”。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%通过试错法对系数进行了调整。。。
ir_r=1.3;%130%的红外辐射被红色像素吸收???
ir_g=0.35;%35%的红外辐射被绿色像素吸收。
ir_b=0.3;%30%的红外辐射被蓝色像素吸收。
IR=imresize(IR,大小(I));%将IR的大小调整为