2013-11-04 29 views
0

我有一個帶有1251個不同像素值的pgm圖像,範圍從0到1250.我知道這是因爲我可以用kate打開這個圖像文件並查看值。Matlab正在用imread打開一個帶有不同值的pgm圖像

但是當我使用Matlab的imread打開同一個文件時,它也返回1251個不同的像素值,但這些值不是連續的。最小值爲0,最大值爲65483.

我想在for循環中遍歷這些值,因此我需要讀取文件中存在的原始值和連續值。如何在Matlab中做到這一點?

編輯:這是如果有人想嘗試的形象。

image

+0

現在就來試試。再次感謝 – mad

回答

3

值進行縮放,這樣當你查看圖像這不是大多是黑色的。

我測試的比例通過檢查直整數截斷的工作原理:

[A] = imread('myfile.pgm', 'pgm'); 
p = sort(unique(A(:)); 
q = uint16((0:1250) * 65535/1251)'; 
all(p == q)        % returns 1 

所以,你可以恢復這樣的形象:

map = arrayfun(@(x) uint16(x * 1251/65536), 0:65535); 
B = arrayfun(@(x) map(x+1), A); 
+0

我已經使用解決方法編輯了我的答案。 – paddy

+0

非常感謝。這非常有幫助! – mad

+0

我還發現直接讀取ASCII文件的函數pgma_read。看看http://people.sc.fsu.edu/~jburkardt/m_src/pgma_io/pgma_io.html – mad

相關問題