Re: [問題] 對於一張圖片的分析
※ 引述《hwwwh (Jong)》之銘言:
: 最近在做Hologram和Fraunhofer diffraction的一些模擬
: 但一直都是代函數進去套公式
: 不知道有沒有任何辦法(功能)
: 可以丟入一張圖片
: 輸入指令後可以得到它的強度分布
: 這個不知道有沒有答案的問題困擾了我很久
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 1.169.164.117
: → hwwwh:或者說 把一張圖片變成一個矩陣 的意思 09/20 02:25
: 推 llewxam:用MATLAB應該比較方便 09/20 10:54
: → hwwwh:因為比較熟悉這個 對matlab更不熟 糟糕! 09/20 11:18
如果你只是要像素值的話
其實當你 Import 一張圖進來時就已經是矩陣了
關於這方面我貼一下我在舊無名 po 過的文過來 (省點打字 XD)
照著用一下應該就可以拿到像素值 再稍微處理一下就有灰階值矩陣可以用...
作者 LPH (IWH68S0XZ8M89) 看板 Mathematica
標題 Re: [問題]關於處理 圖片檔 的問題~
時間 Wed Feb 20 19:04:12 2008
※ 引述《theonee (紅箱子)》之銘言:
> 若是我有一張 .jpg檔案格式的圖片,我想對裡面的每一個像素作處理,
> Mathematica 是否有功能可以處理像素的?
> 例如:
> "我有一張1024x1280 像素的圖片,
> 我想把它每個像素所對應的RG值B或者是灰階值,轉換成單純是數字值的矩陣。"
> (若是可以這樣,我就可以對每個矩陣元素位置的數字值做我所需要的運算了。)
> 我現在是卡在用" "標示起來的那兩段,
> 所以想請問板上的高手們,是否可單純用Mathematica 來解決這問題?
> 若是無法的話,可否勞煩板友們對程式或者影像處理有擅長的,
> 告知是何種軟體,好讓我有個方向,感謝!
首先用Import把檔案讀進來:
In[1]:= g=Import["Sample.jpg"];
讀進來的東西是個Graphics物件
通常是這樣的結構:
Graphics[
Raster[
<<一個大大的三維陣列>>,
{{0,0},{寬,高}},
{0,255},
ColorFunction->RGBColor
],
ImageSize->{寬,高},
PlotRange->{{0,寬-1},{1,高}},
AspectRatio->Automatic
]
如果去查一下Raster的說明就知道
上面那個大大的三維陣列其實是個{*,*,*}的二維陣列
而這個{*,*,*}是要套進RGBColor裡產生顏色的
也就是這些個{*,*,*}其實就是{R,G,B}
所以你要的就是把它的這個三維陣列抓出來
對每個三個值 (即第2層深的結構) 抓出其對應值
因此 R/G/B值就可以這樣抓:
In[2]:= RArray=Map[#[[1]]&,g[[1,1]],{2}];
In[3]:= GArray=Map[#[[2]]&,g[[1,1]],{2}];
In[4]:= BArray=Map[#[[3]]&,g[[1,1]],{2}];
(*g[[1,1]]就是抓出g的第1個參數的第1個參數*)
出來的RArray, GArray, BArray都是一個二維陣列 就是你要的了
不過要注意 這裡的順序是由圖的最下列開始
每列由左而右 列由下而上
--
如果import的是gif或某部份bmp檔的話
因為在非真彩(即24bit)時需要有個調色盤指定顏色
所以那種圖檔Import進來的結構會是以下兩者之一:
(1)圖檔全部都是黑白或調色盤是灰階的調色盤時:
Graphics[
Raster[
<<一個大大的二維陣列>>,
{{0,0},{寬,高}},
{0,255},
ColorFunction->GrayLevel
],
ImageSize->{寬,高},
PlotRange->{{0,寬-1},{1,高}},
AspectRatio->Automatic
]
這時二維陣列存的是灰階值 在0~1之間
RGB值就是直接指定為都等於灰階值*255即可
(2)其他情形
Graphics[
Raster[
<<一個大大的二維陣列>>,
{{0,0},{寬,高}},
{0,255},
ColorFunction->
(<<表示調色盤的RGBColor[R,G,B]的陣列>>[[#1]]&)
],
ImageSize->{寬,高},
PlotRange->{{0,寬-1},{1,高}},
AspectRatio->Automatic
]
這時二維陣列存的是調色盤索引值
要真正抓出它的RGB就要去抓那個調色盤 在g[[1,4,2,1,1]]
所以 g[[1,4,2,1,1,index]] 就抓出第index個RGBColor
g[[1,4,2,1,1,index,1]]*255 就是第index個顏色的R
g[[1,4,2,1,1,index,2]]*255 就是第index個顏色的G
g[[1,4,2,1,1,index,3]]*255 就是第index個顏色的B
乘以255的原因是RGBColor的參數是在0~1之間的值
--
--
有人喜歡邊玩遊戲邊上逼;
也有人喜歡邊聽歌邊打字。
但是,我有個請求,
選字的時候請專心好嗎?
-- 改編自「古 火田 任三郎」之開場白
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.28.92
推
09/20 17:46, , 1F
09/20 17:46, 1F
→
09/20 17:47, , 2F
09/20 17:47, 2F
→
09/20 17:47, , 3F
09/20 17:47, 3F
→
09/20 17:48, , 4F
09/20 17:48, 4F
→
09/20 17:49, , 5F
09/20 17:49, 5F
→
09/20 17:49, , 6F
09/20 17:49, 6F
→
09/20 17:51, , 7F
09/20 17:51, 7F
討論串 (同標題文章)
Mathematica 近期熱門文章
PTT數位生活區 即時熱門文章