imwrite
首先在寫入文件之前檢查數據類型,以確定如何處理輸入中的值。如果輸入是double
,則假定範圍是0到1.如果輸入是uint8
,則它假定[0,255]。
您的兩個選項是將數據轉換爲uint8
或在0和1之間進行歸一化,並將其保留爲double
。
投作爲一個uint8
爲了您具體例如,你已經有0和255之間的大概數據不希望這樣的比例數據,所以你可能會想要去的uint8
投路線。
imwrite(uint8(finalMat), 'file.jpg');
請記住,因爲你有一個double
圖像矩陣,這將迫使所有的數字是整數值,所以當你加載它放回MATLAB它可能不準確等於。
規範化圖像數據
更廣泛地說,你通常會想要去使用mat2gray
爲你做的正常化,它允許您利用完整的8位範圍內的標準化方法。
imwrite(mat2gray(finalMat), 'file.jpg')
注意:你提到你希望得到的圖像是正好等於你傳遞到它的基質。不幸的是,你的輸入數據是double
,它需要每像素64位。 無由MATLAB支持的成像格式實際上可以存儲全部 64位,所以無論你如何做到這一點,你最終都會遇到一些不同。如果要將這種影響降至最低,請查找支持16位或32位數據的圖像格式(您當前創建的JPEG爲8位)。此外,我會建議對使用JPEG,因爲這可能是一種有損壓縮類型。如果您想要無損壓縮,請使用TIFF或PNG。
我絕對不會使用'uin8',因爲它只是一個類型轉換。可能更好'mat2gray' –
@AnderBiguri無論如何,即使是雙重進入,「imwrite」只是將它寫成'uint8'嗎?該文檔說它被轉換爲8位圖像:「如果A是數據類型爲double或single的灰度或RGB彩色圖像,則imwrite假定動態範圍爲[0,1],並自動按比例縮放數據255,然後將它作爲8位值寫入文件,如果A中的數據是單個數據,則在寫入GIF或TIFF文件之前將A轉換爲2。 – Suever
是的,但是當你使用'uint8()'圖像時,它只是施加這些值。 'mat2gray'是一樣的東西,但確保它也被縮放。不加限制地使用'uint8'將導致未知的結果。 –