我有一個DICOM圖像,其類型是16位有符號的。我看到一些論文,作者經常將它轉換爲無符號的8位。但他們沒有解釋他們爲什麼這樣做。你能解釋一下這項工作的好處嗎?以及如何通過matlab代碼實現它?在醫學圖像中將有符號16位轉換爲無符號8位時有什麼好處?
0
A
回答
2
無符號8位圖像佔用較少的內存,某些操作(例如中值濾波)可以在其上執行得更快。
但是,當原始圖像的動態範圍跨越256個灰度值時,您可能會丟失信息。
如果你確實想轉換圖像,你可以執行convertedImage = uint8(image - min(image(:)));
,但是如果你不限制內存,你可能想把圖像轉換爲雙精度而不是convertedImage = double(image)
,因爲這樣,更多的數學運算,比如許多過濾方法,將爲您提供。
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.
相關問題
- 1. 將無符號16位int轉換爲C#中有符號16位int int#
- 2. QT轉換16位QImage爲8位無符號字符在QT
- 3. 將8位無符號PCM轉換爲8位帶符號PCM
- 4. 將16位帶符號的PCM轉換爲帶有符號的16位
- 5. 將原始二進制8位無符號文件轉換爲16位無符號的Python成像庫
- 6. 將n位整數從無符號轉換爲有符號
- 7. 如何將有符號的32位int轉換爲無符號的32位int?
- 8. 將帶符號的13位值轉換爲帶符號的16位
- 9. Qt5將字符轉換爲8位無符號值
- 10. 將32位無符號「真實」數據類型(分成兩個16位有符號字)轉換爲javascript
- 11. 將值轉換爲無符號32位
- 12. 將原始14位二進制補碼轉換爲有符號16位整數
- 13. 在python中將字符串轉換爲8位有符號整數
- 14. C++有符號整數轉換爲無符號位數更多位
- 15. C++將字符串轉換爲16位無符號/有符號整型/浮點型
- 16. 從BitArray轉換爲16位無符號整數在C#
- 17. 將位圖轉換爲無符號字符的矢量
- 18. 將4位8位無符號整數轉換爲32位浮點型
- 19. 無符號16位和64位整數
- 20. 學位符號的UTF 16代碼
- 21. DICOM將16位轉換爲8位
- 22. 如何在Java中將16位.tiff圖像轉換爲8位.tiff圖像?
- 23. 將RGB圖像轉換爲RGB 16位和8位
- 24. 有效地將無符號數轉換爲有符號數
- 25. 高效地將16位短轉換爲8位字符
- 26. 如何將無符號的24位int轉換爲帶符號的int並將符號擴展爲32位?
- 27. 爲什麼學位符號與unicode的UTF-8不同?
- 28. 如何將無符號16位和無符號32位整數編碼爲無符號8位存儲器陣列?
- 29. 將符號從一種位置轉換爲另一種符號
- 30. 8位無符號字符數組到無符號字符
在轉換爲uint8的情況下,可以使用uint8(mat2gray(image,[0 255])),而不是從min中減去可能導致圖像過飽和的圖像,因爲高值可能會被限制爲255. – teng
更正:將圖像歸一化爲0到255應該是:uint8(mat2gray(image,[min(image(:))max(image(:))])。* 255) – teng