Re: [問題] 對於一張圖片的分析

看板Mathematica作者 (-858993460)時間13年前 (2011/09/20 12:54), 編輯推噓1(106)
留言7則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
我知道可以找出圖的RGB值 但不知這是否可以表示
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
文章代碼(AID): #1EU1o5aZ (Mathematica)
討論串 (同標題文章)
文章代碼(AID): #1EU1o5aZ (Mathematica)