2017-11-30 3 views
1

元の値を保存するMATLABで画像をリサイズIは、確率分布を表すグレースケール画像を有しています。つまり、その値の合計が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

ピクセルのサブセットを捨てています。あなたは基本的に画像をサブサンプリングしています。あなたは運が悪いとすべての非ゼロのものを捨てるために起こりました。

右のアプローチは、それらの値を加算し、一緒に画素のビン群になるであろう。リサンプリングや補間ではこれを行うことはできません。

一つの簡単なアプローチは、その後、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(:)) 

これが最も可能性が高いあなたが後にしているものです。これはあなたがパッドできN.で均等に割るのサイズがゼロで、あなたの入力がそうなるようにすることを要求しないことを

注:ところで

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

は、私が何とかMATLABを使用していたと仮定します。私は 'imresize'は私にそれをしたと思います。もしそうなら、あなたの質問にMATLABタグを追加したいかもしれません。 –