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