2013-06-20 67 views
2

雖然我知道一些其他編程語言,但我對Matlab很陌生,所以請原諒我,如果這很簡單。我無法在StackOverflow或其他地方找到任何答案。Matlab imwrite()質量

figure(6),imageplot(P); drawnow; 

,看起來像這樣:

我用下面的代碼生成一個數字enter image description here

然後我用下面的命令此圖像保存到我的電腦:

imwrite(P, 'images/plot.png'); 

由此產生的圖像很小,並且缺少一些顏色信息:

enter image description here

但是,如果我在打開的圖形(圖像#1)中使用了保存功能並手動保存,我就得到了我想要的,這就是存儲在我的計算機上的確切圖像。

enter image description here

我將如何編程呢?我認爲imwrite()會直接寫圖像,但顯然我做錯了什麼。有什麼建議?也許它與imageplot命令有關?我似乎無法讓它在imwrite中工作。

更新:基於以下評論,我已開始使用「imresize」與「最近」選項。這樣可以正確縮放圖像,但是由此產生的圖像仍然奇怪地較暗(因此信息較少),比按下圖中的「保存」按鈕時更加奇怪。

圖像從圖中保存的:使用

enter image description here

圖像 「imresize」 與 「最近」 選項:

enter image description here

回答

2

您需要爲圖形的「另存爲...」功能命令稱爲「打印」。我經常使用

print(gcf, '-dpng', 'some_filename.png') 

print(gcf, '-depsc', 'some_filename.eps','-r0') 

保存一個數字,因爲它是顯示在屏幕上。格式png提供了一個小的文件大小和出色的質量,大多數圖像瀏覽器和瀏覽器都能理解。 eps格式是一種矢量格式,我將其用於printig。對於矢量格式屬性,'-r0'選項指定「使用與屏幕分辨率相同的尺寸」。

+0

你會如何將我的代碼和print()函數結合起來?正如我的問題所述,我能夠使用imageplot(P)查看我想要的圖像。使用print(P,'-dpng','filename.png')會產生一個錯誤:「句柄輸入必須是向量的標量,向量或單元陣列。」 我也嘗試使用print(imageplot(P),' - dpng','filename.png')試圖正確打印我顯示的內容,但這會產生錯誤「輸出參數太多」。 – Jake

+1

您需要在圖形手柄上使用打印 - 在繪製了矩陣P之後,'gcf'返回當前的圖形句柄,如Martin J.H.使用。你也可以使用'f = figure; imageplot(P);打印(F ...);'。 –

+0

我們走了。完美。非常感謝! – Jake

3

的MATLAB imwrite命令保存像素數完全按規定在你的圖像矩陣中。這是您計算的實際結果;輸出「很小」的原因是因爲它應該是。爲了使其更大,可以根據需要簡單地縮放它。

然而,保存圖形選項會有很大的不同:它會對您在圖形窗口中獲得的輸出進行光柵化處理,併爲您提供將其保存爲圖像的選項。這一點很明顯,當你這樣做的時候,除了你的結果之外,你還會獲得一個白色背景,這實際上就是你保存之前看到的灰色背景;這可以通過在使用保存選項之前調整數字窗口的大小來進行調整。

如果你只是想讓輸出數字更大,我會推薦使用沿着imresize命令行的東西。

說,如果你想默認大小是真正的結果的兩倍大小,只需使用:

imresize(P, 2.0); 

更多的選擇,嘗試help imresize

+0

這確實調整了圖像的大小,但它似乎使用先前的柵格化版本,並且使其更大。所以,例如,運行imwrite(imresize(P,2.0),filename);只是將圖像拉伸到兩倍的尺寸 - 它更大,但非常模糊,仍然缺少原始圖形中的一些顏色信息。 – Jake

+1

使用'imresize'的''nearest'''選項來停止插值(並因此模糊)發生。 – wakjah

+0

請參閱我的更新 - 使用最近的作品,但它仍然不是我想要的,因爲雖然縮放現在可用,但它顯得更加黑暗。 – Jake