簡體   English   中英

uint8和單個圖像有什么區別?

[英]What is the difference between a uint8 and a single image?

我已經知道uint8包含0到255(2 8 -1)之間的強度值,single包含0到1之間的強度值,它用於保存較大的值而不會改變范圍誤差。 但是,除此之外,還有其他區別嗎?

imagesc((I/64)*64)imagesc((Is/64)*64)之間有什么區別,其中Iuint8Issingle

imagesc只是在下面調用image 對於image ,如果提供整數或浮點數,則其行為會有所不同,可以從image的文檔中了解到:

如果Cdouble類型,則[0 0 0]的RGB三元組值對應於黑色, [1 1 1]對應於白色。

如果C整數類型,則圖像將使用整個數據范圍來確定顏色。 例如,如果C的類型為uint8 ,則[0 0 0]對應於黑色, [255 255 255]對應於白色。 如果CData的類型為int8 ,則[-128 -128 -128]對應於黑色, [127 127 127]對應於白色。

...

在數據類型之間轉換

要將索引圖像數據從整數類型轉換為double類型,請添加1。例如,如果X8uint8類型的索引圖像數據,請使用以下命令將其轉換為double類型:

 X64 = double(X8) + 1; 

要將索引圖像數據從double類型轉換為整數類型,請減去1並使用round來確保所有值都是整數。 例如,如果X64double類型的索引圖像數據,請使用以下命令將其轉換為uint8

 X8 = uint8(round(X64 - 1)); 

要將真彩色圖像數據從整數類型轉換為double類型,請重新縮放數據。 例如,如果RGB8uint8類型的真彩色圖像數據,則使用以下命令將其轉換為double:

 RGB64 = double(RGB8)/255; 

要將真彩色圖像數據從double類型轉換為整數類型,請重新縮放數據並使用round確保所有值都是整數。 例如,如果RGB64double類型的圖像數據,則使用以下命令將其轉換為uint8

 RGB8 = uint8(round(RGB64*255)); 
I = uint8(255*rand(1e3));
Is = single(I)/255;

tmpI = (I/64)*64;
tmpIs = (Is/64)*64;

% plot for prosterity
% figure;
% subplot(211)
% imagesc(tmpI)
% subplot(212)
% imagesc(tmpIs)

numel(unique(tmpI(:))) % gives 5
numel(unique(tmpIs(:))) % gives 256

除以整數基本上意味着對值進行分箱,然后將數據拉伸回原始擴展以進行繪圖。 在這種情況下,您將獲得256/64 = 4 bin,也為0,因此uint8映像可能有5個值。 但是,使用single會保留所有唯一數字,因為精度要高得多。

如果對rand的很多元素(階數2 ^ 52)進行相同的測試並使用double您會發現它再次具有single唯一元素數的2 ^ 32倍,就像uint16將具有2 ^ 8 uint8的唯一元素的數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM