# Why do certain images require imshow(imagename,[]). whereas others don't?

1 ビュー (過去 30 日間)
Big Ben 2022 年 6 月 27 日
コメント済み: Big Ben 2022 年 6 月 27 日
In the following code, the convolved images require imshow(imagename,[]), whereas the original image (A) does not require the '[]' in imshow() to display it. I don't understand the reason behind why one image require this, and the other doesn't.
PSF = fspecial('gaussian',[5,5],2);
h=fspecial('motion', 10, 45);
B=conv2(PSF,A);
C=imfilter(A,h,'replicate');
D=conv2(A,A);
subplot(2,2,1), imshow(A);
subplot(2,2,2), imshow(B,[]);
subplot(2,2,3), imshow(C,[]);
subplot(2,2,4), imshow(D,[]);
I have gone through the documentation of imshow(), but I don't understand the reason behind this behavior.

サインインしてコメントする。

### 採用された回答

Jonas 2022 年 6 月 27 日
the answer loes within the variable class. the original inage is uint8 which can have values between 0 and 255, this means imshownautomatically uses 0 to 255 to interpret. by doing calculations on the uint8 without previous conversion from uint8 to double, the resulting pixels for e.g. B are also between 0 and 255, but as double. And double images are nornally in the range between 0 and 1, since most values are greater than 1, the resulting image is white everywhere. you could either tell imshow to use 0 to 255 as borders for the double images manually, or you could could cast be to uint8 ( uint8(B) ), then imshow uses the border automatically.
pay attention, that calculations on images can change the range of you numbers, throwing uints8 outside their normal range as double. there you have to decide, hiw you want to process those values
##### 1 件のコメント表示非表示 なし
Big Ben 2022 年 6 月 27 日
Thanks for the explanation.

サインインしてコメントする。

### その他の回答 (1 件)

KSSV 2022 年 6 月 27 日

You check the class of A, B.
PSF = fspecial('gaussian',[5,5],2);
h=fspecial('motion', 10, 45);
B=conv2(PSF,A);
whos A B
Name Size Bytes Class Attributes A 256x256 65536 uint8 B 260x260 540800 double
The class of A is uint8, and the class of B is double. So, you need to specify []. If you don't want to specify, you may convert double to uint8 using
B = uint8(B) ;
imshow(B)

サインインしてコメントする。

### カテゴリ

Find more on Display Image in Help Center and File Exchange

R2022a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by