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