在matlab中调整图像大小,保留原始值

时间:2017-11-30 18:39:24

标签: matlab image-processing

我有一个灰度图像,代表概率分布。也就是说,它的值总和为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

1 个答案:

答案 0 :(得分: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');