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

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