【问题标题】:How to open a raw YCbCr image file in MatLab?如何在 MatLab 中打开原始 YCbCr 图像文件?
【发布时间】:2019-01-16 17:51:52
【问题描述】:

我正在尝试在 Matlab 中打开一个 1920x1080 YCbCr 原始图像文件,但是我无法让以下代码正常工作:

fid = fopen(filePath);
image = fread(fid, 1920*1080, 'uint8=>uint8');
fclose(fid); 
image = reshape(image, 1080, 1920);

但是,当我去显示图像时,它看起来并不像预期的那样。

实际图像应该是彩色的,但是我得到一个奇怪的黑白图像,根本不像预期的输出。

我还尝试将其加载到 3D 数组中,每个维度代表 Y、Cb 和 Cr 通道之一,但是这也产生了与前面所述类似的输出。

任何帮助将不胜感激。

【问题讨论】:

    标签: image matlab image-processing


    【解决方案1】:

    忽略这一点,看看下面的编辑:

    我不明白你为什么使用fread?为什么不使用imread, 这不适合阅读图像?使用这个臭名昭著的original image,作为我的测试脚本的基础,我可以显示YCbCr 图片,如下面的小脚本所示。

    original = imread("lenna.jpg");
    % figure, imshow(original); % if you want to see how the original image looks
    YCbCr_version = rgb2ycbcr(original);
    % figure, imshow(YCbCr_version);  % if you want to see how the YCbCr image looks
    imwrite(YCbCr_version, "out.jpg");
    
    YCbCr_fromFile = imread("out.jpg");
    figure, imshow(YCbCr_fromFile);
    

    编辑:

    • 如果您有文件的二进制版本并且只能使用 fread 读取它,

    那么下面的脚本应该可以工作,

    clc;
    clear;
    close all;
    
    original = imread("lenna.jpg");
    % figure, imshow(original); % if you want to see how the original image looks
    YCbCr_version = rgb2ycbcr(original);
    % figure, imshow(YCbCr_version);  % if you want to see how the YCbCr image looks
    
    fileID = fopen('out.bin','w');
    fwrite(fileID, YCbCr_version, 'uint8');
    fclose(fileID);
    
    fileID = fopen('out.bin','r');
    fromFile = fread(fileID, 512*600*3, 'uint8=>uint8');
    fclose(fileID);
    image = reshape(fromFile, 512, 600, 3);
    imagesc(image)
    

    关键是,在读取操作中,您还必须在乘法器中给出 3 个通道,因为彩色图像具有此第 3 维,即512*600*3。如果你只给512*600,就像你做的那样,你将没有颜色信息。此外,还需要更改重塑功能以考虑第三维。因此,reshape(fromFile, 512,600, 3)

    • 从文件加载的 YCbCr 版本

    【讨论】:

    • @BOB,我编辑了我的答案。请参阅第二个脚本。重点是还包括第三个维度!
    【解决方案2】:

    正如您所说“任何帮助将不胜感激”,我想我会提到您可以使用 ImageMagick 将原始 YCbCr 文件简单地转换为 PNG、TIFF、JPEG 或任何其他格式文件 安装在大多数 Linux 发行版上,适用于 macOS 和 Windows。

    启动终端(或命令提示符,如果在 Windows 下),然后将 YCbCr image.raw 转换为 PNG:

    magick -size 1920x1080 -depth 8  YCbCr:image.raw  result.png
    

    或者,将 CCIR 601 YUV 文件说成 NetPBM PPM 格式:

    magick -size 800x600 -depth 8 YUV:image.raw result.ppm
    

    【讨论】:

      猜你喜欢
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多