uint8、double、mat2uint、imhist绘直方图w恩替藐视
生活随笔
收集整理的這篇文章主要介紹了
uint8、double、mat2uint、imhist绘直方图w恩替藐视
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.問題描述
<span style="font-size:18px;">ImgUS = imread('050.bmp'); Igray = rgb2gray(ImgUS); Igray = double(Igray); figure,imshow(Igray ,[]); figure;imhist(Igray);</span>圖像可以正常顯示,但是灰度直方圖卻無法顯示。
2.解答:
2.1 網友的說法:
? ???默認情況下,matlab將圖像中的數據存儲為double型,即64位浮點數;matlab還支持無符號整型(uint8和uint16);uint型的優勢在于節省空間,涉及運算時要轉換成double型。2.2 真實的原因:
? ?問題的真正的解釋其實應該是這樣的。
? ?首先是在數據類型轉換時候uint8和im2uint8的區別,uint的操作僅僅是將一個double類型的小數點后面的部分去掉;但是im2uint8是將輸入中所有小于0的數設置為0,而將輸入中所有大于1的數值設置為255,再將所有其他值乘以255。? ???圖像數據在進行計算前要轉化為double類型的,這樣可以保證圖像數據運算的精度。很多矩陣的數據也都是double的,要想顯示,必須先轉換為圖像的標準數據格式。如果轉換前的數據符合圖像數據標準(比如,如果是double則要位于0~1之間,這個是由Matlab中的規定),那么可以直接使用im2uint8。 ? ? 如果轉換前不滿足這個分布規律(也就是我們草草的用double強制將uint變成double型),則使用uint8,將其自動切割至0~255(超過255的按255)最好使用mat2gray(這個函數可以把一個double類的任意數組轉換成取值范圍在[0,1]之間的),將一個矩陣轉化為灰度圖像的數據格式(double)。另外,可以用isgray判斷矩陣是否是一個圖像數據矩陣。
3.?關于imhist:
imhist(I)?顯示圖像I的直方圖,圖像的灰度數由圖像類型指定,如果I為灰度圖像,imhist使用一個默認的256值,如果I為二值圖像,imhist則使用2值。
修訂后的代碼: <span style="font-size:18px;">ImgUS = imread('050.bmp'); Igray = rgb2gray(ImgUS); Igray = double(Igray); figure,imshow(Idenoise,[]); Igray = mat2gray(Igray);%標準化成圖像double figure;imhist(Igray);</span>或者,一開始就進行uint8向圖像標準類型double轉換,利用im2double函數 <span style="font-size:18px;">ImgUS = imread('050.bmp'); Igray = rgb2gray(ImgUS); Igray = im2double(Igray);%標準化成圖像double figure,imshow(Igray); figure;imhist(Igray );</span>
總結
以上是生活随笔為你收集整理的uint8、double、mat2uint、imhist绘直方图w恩替藐视的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于光学导航系统,矩阵变换和3D-2D配
- 下一篇: 【飞秋】JS 实现完美include