公司项目有需要,研究安卓手机拍摄RAW图像的方法,并且使用Matlab提取图像数据。
手机拍摄RAW图像
(1)选择荣耀HONOR 20作为拍摄手机
(2)设置为“专业”拍照模式
(3)点击右上角的齿轮,设置保存格式为RAW
(4)选择好场景后,拍摄图片,手机会同时保存RAW格式和JPG格式的图像。
Matlab提取数据
(1)拷贝RAW图到电脑,路径:HONOR 20\内部存储\DCIM\Camera\RAW\
(2)确定图片的分辨率:UltraEdit打开拍摄的DNG图片,查看分辨率为8000x6000
(3)编写数据提取程序
clcclearclose allimage_cols = 8000; % image widthimage_rows = 6000; % image heightbits_raw = 10; % bit length of raw databits_bmp = 8 ; % bit length of bmp data% open filefile_id = fopen('00.dng');file_data = fread(file_id);fclose(file_id);% extract image dataimage_size = image_rows * image_cols;file_data = file_data(end - image_size * 2 + 1 : end);% merge dataimage_low = file_data(1:2:end); % low 8 bitimage_high = file_data(2:2:end); % high 2 bitimage_bmp = bitshift(image_high,8) + image_low;% vector --> matriximage_bmp = bitshift(image_bmp , bits_bmp - bits_raw);image_bmp = reshape(image_bmp,[image_cols,image_rows]);image_bmp = image_bmp';image_bmp = int32(image_bmp);image_bmp = repmat(image_bmp,[1,1,3]);% save imageimage_bmp = uint8(image_bmp);imwrite(image_bmp , '00.bmp');
(4)提取出来的数据排列为图片,图片是灰度图。
PS:
经过demosaic后才能成为彩色图,但是颜色不正常,说明RAW图像没有经过AWB处理。