【问题标题】:Resizing an image in matlab preserving the original values在matlab中调整图像大小保留原始值
【发布时间】:2017-11-30 18:39:24
【问题描述】:

我有一张代表概率分布的灰度图像。也就是说,它的值总和为 1。我希望在不改变原始概率值的情况下缩小图像。

我尝试按照previous post 中的建议使用最近邻插值(参见下面的代码)应用 imresize,但值会发生变化。实际上,它们归零。还有其他方法可以实现吗?

> unique(prob_map)   % a grey-scale image representing a pdf
ans =
     0
0.4231
0.5769
> sum(ans)
1
> I = imresize(prob_map, [192,256], 'nearest');
> unique(I)
0

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    您正在做的是丢弃一部分像素。您基本上是在对图像进行二次采样。你只是碰巧运气不好,把所有非零的都扔掉了。

    正确的方法是将像素组合并在一起,然后添加它们的值。您无法通过重采样或插值来做到这一点。

    一种简单的方法是将 N 个连续的行相加,然后将 N 个连续的列相加:

    A; % your input
    B = reshape(A,N,size(A,1)/N,[]);
    B = squeeze(sum(B,1))';
    B = reshape(B,N,size(B,1)/N,[]);
    B = squeeze(sum(B,1))';
    

    这样做不是保留单个值,而是保留概率之和:

    sum(A(:)) == sum(B(:))
    

    这很可能是您所追求的。

    请注意,这确实要求 A 的大小除以 N。您可以用零填充您的输入以使其如此:

    A = padarray(A, ceil(size(A)/N)*N-size(A), 0, 'post');
    

    【讨论】:

    • 顺便说一句,我以某种方式假设您使用的是 MATLAB。我猜'imresize'对我做了那个。如果是这样,您可能希望将 MATLAB 标记添加到您的问题中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2015-02-24
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多