2014-03-26 63 views

回答

2

無符號8位圖像佔用較少的內存,某些操作(例如中值濾波)可以在其上執行得更快。

但是,當原始圖像的動態範圍跨越256個灰度值時,您可能會丟失信息。

如果你確實想轉換圖像,你可以執行convertedImage = uint8(image - min(image(:)));,但是如果你不限制內存,你可能想把圖像轉換爲雙精度而不是convertedImage = double(image),因爲這樣,更多的數學運算,比如許多過濾方法,將爲您提供。

+1

在轉換爲uint8的情況下,可以使用uint8(mat2gray(image,[0 255])),而不是從min中減去可能導致圖像過飽和的圖像,因爲高值可能會被限制爲255. – teng

+1

更正:將圖像歸一化爲0到255應該是:uint8(mat2gray(image,[min(image(:))max(image(:))])。* 255) – teng

1

簡單的答案是,它使圖像佔用較少的內存。這不僅有助於保存存儲空間,而且很可能會加快處理時間。 另外一個在uint8上運行的算法也很適合其他類型的工作。

從INT32轉換在MATLAB中UINT8,你必須考慮你想要什麼:

貴圖像僅含有僅跨越256個值的值?那麼你可以做convertedImage = uint8(image - min(image(:)))像喬納斯說,但這樣會夾你的價值觀是超出範圍:

>> uint8([-1 0 1 200 255 256 257]) 

ans = 

    0 0 1 200 255 255 255 

>> uint8([-1 0 1 200 255 256 257] - min([-1 0 1 200 255 256 257])) 

ans = 

    0 1 2 201 255 255 255 

如果你的圖像使用的可能INT16丘壑的滿量程,你會想先對其進行縮放,以便其值的範圍從0到256.

相關問題