なぜこうなってしまうのかというと、使用後の平均的なイメージfilter2
がダブルタイプのイメージだからです。あなたはimshow
. imshow
実際、ここ StackOverflowに関して私が解決したほとんどすべての問題は、 imshow
.
この関数を使用する前に、表示しようとしている画像の種類を認識しておく必要があります。imshow
タイプの画像はdouble
、その強度/カラー チャンネルが の間の範囲にあることが期待されます[0,1]
。以下0
はすべて黒に設定され、それ以外1
は白に設定されているため、完全に白い画像が得られます。
uint8
画像を正しく表示するには、元に戻す必要があります。そのため、画像を表示する前にこれを試してください。
down1 = uint8(down1);
imshow(down1);
これを行うと、ダウンサンプリングされた画像を表示すると、これが得られます。

軽微なコメント
FWIW、画像フィルタリングに関しては、imfilter
代わりに個人的に使用します。 imfilter
は画像フィルタリング用に設計されていますが、filter2
はより一般的な 2D 信号用です。良い点の 1 つは、同じタイプの画像をデフォルトでimfilter
出力することです。あなたが画像でそれを使用することを余儀なくされない限り、私は近づかないでしょう.filter2
double
filter2
filter2
そのため、構文を次のように置き換えます。
avgimg = imfilter(img, avgfilter);
代わりにこれを行う場合、イメージを にキャストする必要はありませんuint8
。を使用すると、結果を適切に視覚化できますimshow
。