2016-01-23 13 views
-3

我一直在玩R中的線性代數變換,在複雜平面中繪製一組點。我已發佈結果here - 代碼鏈接在第一句話上。在一個複雜的矩陣中掃描並存儲一個簡單的圖像

我想對真實圖像進行相同的操作。顯然,我不想進入傅立葉變換圖像,或處理顏色或灰度。我想要得到任何舊的jpeg,將其轉化爲黑白點的總結圖,根據複雜平面中的位置來定位每個點,然後像我一樣將線性代數運算應用於繪製房屋。

問題是:1.我所描述的這種精簡的基本黑白圖像的名稱是什麼? 2.如何將常規的jpeg(或其他文件)轉換爲該類型的圖像?那麼如何將圖像將包含的數千個點的每一點存儲到複數矩陣中?

有沒有軟件可以做到這一點? R或python中有代碼可以做到嗎?

+1

1)我會稱這樣的圖像「光柵化」,但實現不同。 2)有'raster'軟件包。 3)R矩陣可以容納複數。 –

回答

2

目前尚不清楚你想與那些複雜的向量做什麼,那會不會是更容易使用標準的x,y座標獲得的,但在這裏不用一個可能的起點

library(jpeg) 

im <- readJPEG(system.file("img", "Rlogo.jpg", package="jpeg")) 
gr <- apply(im, 1:2, mean) 
bw <- which(gr < 0.5, arr.ind = TRUE) 

conjure_matrix_of_darkness <- function(bw, xlim=c(-2, 2), ylim=c(-2,2)){ 

    x <- (bw[,1] - min(bw[,1]))/diff(range(bw[,1])) * diff(xlim) + min(xlim) 
    y <- (bw[,2] - min(bw[,2]))/diff(range(bw[,2])) * diff(ylim) + min(ylim) 
    x+1i*y 
} 

test <- conjure_matrix_of_darkness(bw) 
par(mfrow=c(2,1), mar=c(0,0,0,0)) 
plot(test, pch=19, xaxt="n", yaxt="n") 
plot(test*exp(1i*pi), pch=19, xaxt="n", yaxt="n") 

enter image description here

+0

太棒了。我想我所要做的就是'x + 1i * y'並將它作爲矩陣存儲在複雜平面中。我認爲複雜平面的原因是能夠使用歐拉方程隨意旋轉圖像。 – Toni

+0

只是好奇...... gr裏的'1:2'是指什麼?我發現'im'是一個包含兩個矩陣(2)的列表,所以您...將兩個矩陣之一中的值與另一個矩陣中的值進行平均。然後'bw'是某種帶寬? – Toni

+0

'im'是一個包含與RGB對應的3個通道的數組。所以平均處理將其平滑到一個矩陣,解釋爲灰度。既然你想得到一個黑白的結果,它需要被二值化,這裏有一些0.5灰度的任意閾值。 – baptiste

相關問題