2012-02-12 149 views
1

我已經開始學習Matlab中的圖像處理,並且遇到一個小問題。保存Imshow()輸出 - 保存到磁盤的縮放圖像

我試圖想像圖像的FFT。當我提供空矩陣(例如sintax imshow(image,[]))時,函數imshow做我需要的東西(例如sintax imshow(image,[])。

現在,imshow做得很好,因爲當提供空矩陣時,在圖片中的值爲黑色,最高爲白色,並會相應地調整所有其他值(至少我是這麼理解的)

imshow的縮放比例很大,我想知道是否存在Matlab函數,將採取一個圖像和執行那種縮放?我想在使用imshow後手動保存圖片,但我想以編程方式做到這一點。

我假設有一個很好的Matlab功能是這樣做的,但經過Google搜索後,我找不到任何解決方案。

回答

1

想要的是在調用imwrite之前調整圖像的大小,使其最小值爲零,最大值爲255(對於8位圖像)。

例如:

img = randn(100); 
figure,imshow(img,[]); %# show the image 

mx = max(img(:)); 
mn = min(img(:)); 

imgScaled = (img-mn)/(mx-mn); 

%# convert to uint8 and save 
imwrite(uint8(round(imgScaled*255))), 'test.tif'); 

%# reload and display without scaling 
%# if we have done everything correctly 
%# the images before and after should look alike 
imgLoaded = imread('test.tif'); 
figure,imshow(imgLoaded) 
+0

我當時希望有一個Matlab版本的解決方案,但是這個工作很好,正是我想要的。謝謝您的幫助! – MrMatlabUser 2012-02-12 15:03:34

+0

@MrMatlabUser:不客氣。如果您發現它有幫助,請考慮接受我的答案。 – Jonas 2012-02-12 15:43:45

0

聽起來像imagesc是你想要的,here。但自然地,爲了顯示FFT,你必須擺脫複雜的值,例如做一些事情,例如分別創建幅度,相位圖。但是這表示,imshow已經是一個縮放的Matlab函數,所以我不太確定爲什麼你需要一個新的函數;至少,imagesc可讓您獲得顏色。

然後爲了保存,請使用imwrite

+0

什麼imshow對我來說很好。但是,保存圖像是我的問題,因爲如果我只是使用imwrite,它會保存圖像原樣,沒有imshow提供的縮放。附:我使用FFT的大小來顯示它是否重要。 基本上,我想要的是保存imshow的輸出,但要從Matlab代碼中這樣做,而不是點擊'另存爲...'等,因爲我有很多圖片要保存。 – MrMatlabUser 2012-02-12 14:30:49

+0

@MrMatlabUser我明白了。那麼就像Jonas指出的那樣,您可以提前自己縮放圖像數據。 – 2012-02-12 14:51:37

0

有很多很好的回答這個的,但對於一個快速的黑客,你可能想print你在圖中看到,只是看到doc print獲取更多信息。