【问题标题】:Resample a matlab array of uint8's重采样 uint8 的 matlab 数组
【发布时间】:2014-09-04 22:04:48
【问题描述】:

我向 Matlab 工作区添加了一个 .JPG 文件,Matlab 将其加载为 0-255 范围内 300x300 无符号整数的二维数组。 我有兴趣分析这个矩阵的其中一行。为此,我只是使用

提取了该行
row = ones(300);
row = myMatrix(150, :);

然后,我意识到为了将它与另一个长度为 450 个元素的数组进行比较,我需要将行向量扩展 1.5 倍,即将我的数组拉伸到 450 个样本。为此,我尝试使用如下 resample 函数:

row2 = resample(row, 3, 2);

但我收到错误说重采样函数不支持 unit8 类型的数据。

在我的例子中,有没有办法使用重采样来实现插值,或者你会推荐另一种方法吗?

【问题讨论】:

    标签: arrays matlab interpolation resampling


    【解决方案1】:

    我认为您在阅读时必须将图像转换为双精度:

    imgOriginal = imread('FileName.jpg');
    imgDbl = double( imgOriginal );
    % if you need you may also convert the image to [0..1] range
    % imgDbl = double( imgOriginal ) / double( intmax(class(imgOriginal)) );
    

    要调整大小,最好使用imresize

    imgResized = imresize( imgDbl , 1.5, 'bilinear' ); % use the method you need
    

    因为对于插值方法,它将考虑您需要的行上方/下方的行。然后你可以选择正确的行

    row = imgResized(150,:);
    

    【讨论】:

    • Resample 也会给出 double 错误,表示 double 类型不受支持
    • @user3670482 您的工作区中有一个名为resample 的变量吗?这听起来像是潜在的变量阴影。尝试执行clear resample,然后再次尝试您的代码,并将图像转换为double。顺便说一句,我还建议您使用imresize。此函数专为调整图像大小而构建。
    猜你喜欢
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多