2016-08-26 415 views
1

我試圖在Matlab R2014a中保存一個圖,在該圖中我想通過圖像繪製數據。這是代碼:MATLAB:如何用faceAlpha保存geoshow圖形?

[Singapore, R] = geotiffread(file); 
s = size(Singapore); 
matrix = rand(s(1),s(2)); 
geoshow(Singapore(:,:,1:3), R) 
hold on 
geoshow(matrix, R, 'DisplayType', 'texturemap','facealpha',.2); 
xlim([103.605,104.04]) 
ylim([1.2,1.475]) 

這一個是完美的作品情節: enter image description here

而當我打印圖

print(gcf, '-dpng',  fullfile(FileF, 'test.png')) 

圖像完全是白色 enter image description here

+1

FaceAlpha = 1會發生什麼? – NKN

+0

我有相同的輸出 – emax

+2

這將是一個***很容易***幫助,如果你有一個鏈接到原始圖像,以便我們可以重現問題 –

回答

1

許多感謝的圖片鏈接! 我已經嘗試過你的代碼(適用於你提供的`Singapore.tif'文件和一個合適的輸出文件),它可以在我的系統上正常工作(Matlab 2013b,Linux 64位)。這是輸出文件:

enter image description here

所以我很抱歉地說,有什麼不對你的代碼,它可能是與Windows上的「PNG」驅動程序或特定的安裝。你有沒有嘗試打印到不同的驅動程序? (如JPG或PDF?)。如果您從圖形的圖形菜單中執行此操作,它是否真的有效,例如File->Save As;或通過File->Export Setup->Export具有適當的屬性?


我唯一能想到的可能會讓您的系統混淆的其他事情是試圖打印一張uint8 rgb圖像(您的新加坡圖像) 覆蓋的雙灰度圖像。你可以看到,如果您的新加坡圖像轉換爲這種雙重解決了改變:

geoshow(Singapore(:,:,1:3), R) 

geoshow(mat2gray(Singapore(:,:,1:3)), R) 


也可能是值得手動試圖繪製數據 ,看看是否打印的工作原理如:

[Singapore, R] = geotiffread('Singapore.tif'); 
SingaporeXYImage = cat(3, flipud(Singapore(:,:,1)), ... 
          flipud(Singapore(:,:,2)), ... 
          flipud(Singapore(:,:,3))); 
s = size(Singapore); 
matrix3D = repmat(rand(s(1),s(2)), [1,1,3]); 
imagesc(R.LongitudeLimits, R.LatitudeLimits, mat2gray(SingaporeXYImage)); 
hold on; 
imagesc(R.LongitudeLimits, R.LatitudeLimits, matrix3D, 'alphadata', .2); 
hold off; 
axis xy equal tight; 
xlim([103.605,104.04]) 
ylim([1.2,1.475]) 
print(gcf, '-dpng', 'test.png'); 


作爲獎勵,這裏是如何您可能會在八度進行同樣的事情,如果你有興趣(我發現打印從八度曲線看起來更漂亮,尤其是在字體方面!):

pkg load mapping; 
pkg load image; 
[SingaporeStruct, R] = rasterread('Singapore.tif'); 
SingaporeImage = cat(3, SingaporeStruct(1:3).data); % note this is a matrix of 
                % "doubles" in range [0,255] 
SingaporeImage = mat2gray(SingaporeImage); % Convert to appropriate [0,1] range 
              % for "doubles" rgb images! 
s = size (SingaporeImage); 
matrix3D = repmat (rand (s(1), s(2)), [1, 1, 3]); 
imagesc (R.bbox(:,1), R.bbox(:,2), ... 
     SingaporeImage .* 0.8 + matrix3D .* 0.2); % manually create 
                % transparency effect 
axis xy equal tight 
xlim([103.605,104.04]) 
ylim([1.2,1.475]) 
print (gcf, '-dpng', 'test.png'); 

enter image description here


另外,對我的同事和他/她在答案中所付出的努力沒有不尊重,但我會注意到您收到的其他答案本質上是完全錯誤的,您應該收回您的 marked accepted,無論他/她的聲明和警告如何關於收回明顯答案的粗魯程度。 mapshow專門用於使用 MapCellsReference格式的圖像: boston.tif圖像就是這樣一個圖像。 然而,您的圖片使用 GeographicCellsReference格式。前者使用 mapshow,後者使用 geoshow; geoshow將失敗 boston.tif,以相同的方式 mapshow失敗 Singapore.tif。應該很明顯,你的圖像是一個「地理」變體,因爲你的行 geoshow(Singapore(:,:,1:3), R)工作沒有發生錯誤。因此,使用 mapshow的建議不是您的問題的正確答案,並且具有誤導性。更何況,與你的實際問題完全不相干的是,爲什麼 print命令不能從它的圖形句柄中產生預期的結果,理論上這應該與這個數字如何生成無關。我不會有任何關於撤回你的「接受」標記的疑慮。不僅僅是因爲這個網站可以作爲許多其他觀衆的參考。僅僅因爲你被欺負接受錯誤的答案而引導用戶是沒有意義的。

+1

如果「手動」方法也不起作用,那麼問題幾乎可以肯定與你的安裝/ png庫有關。那麼'jpg'或'pdf'驅動程序怎麼樣? –

+1

你說得對。我可以將它保存在.pdf和.tiff中,並且它可以很好地工作。大! – emax

0

正如mathworks建議的那樣,使用mapshow應該可以解決您的問題。對我來說,以下工作:

[boston, R] = geotiffread('boston.tif'); 
figure 
mapshow(boston, R); 
axis image off 
S = size(boston); 
matrix=rand(S(1),S(2)); 
hold on 
mapshow(matrix, R,'DisplayType','texturemap','facealpha',0.2); 
print(gcf, '-dpng','test.png') ; 

enter image description here

+0

導入圖像時出現錯誤,如地圖顯示。然而這裏的圖像的鏈接。 https://www.dropbox.com/s/55o13cmyzf206uo/Singapore.tif?dl=0 – emax

+0

我的答案顯然是在MATLAB提供的標準圖像上工作。現在你正在問一個以前沒有包括的新問題。你應該爲此提出另一個問題。對我來說,它看起來像你的圖像有不同的光柵結構。請記住,收回已接受的答案是一種非常糟糕的做法。祝你好運解決它在別的地方。 – NKN

+0

你說得對。即使它不能解決我的問題,但我接受了你的答案,但另一個答案。 – emax