2014-09-20 81 views
1

我正在使用Images圖像包,並且想要加載圖像並獲取r圖像中像素的均值和標準差。在Julia獲取圖像的標準差

我想:

using Images, Color, FixedPointNumbers, ImageView, Testimages 
img = testimage("mandril") 
mean(data(img)) 

平均工作得很好,其實在IJulia它顯示的圖像的平均顏色。然而,當我試圖讓圖像的標準偏差,我得到:

std(data(img)) 

`varm` has no method matching  varm(::Image{RGB{UfixedBase{Uint8,8}},2,Array{RGB{UfixedBase{Uint8,8}},2}}, ::RGB{Float32}) 
while loading In[66], in expression starting on line 1 

in var at statistics.jl:162 

一個如何去獲取圖像的標準偏差?

+0

如果你想檢查你做得正確,你可以很容易地在ImageMagick的'identify'命令的命令行中這樣做:'identify -verbose yourImage.jpg' – 2014-10-01 10:55:40

回答

2

可以使用red,​​blue和提取圖像, 的部件,並與std對所得矩陣計算標準偏差。

using Images 
using TestImages 
using Color 
img = testimage("mandril") 
data(img) 

RGB(
    std(red(img)), 
    std(green(img)), 
    std(blue(img)) 
) 
# RGB{Float32}(0.22030124f0,0.18964756f0,0.24422659f0) 

您也可以建立一個3維陣列的所有數據,與 separate, 和應用std對應 將這三種組分三個2維片,與mapslices

vec(mapslices(std, separate(img), [1,2])) 

如果你想弄清楚爲什麼mean(data(img))工作 和std(data(img))沒有(至少目前), 可以查看哪個方法被調用 與@which,並讀取相應的代碼,用@less

@which mean(data(img)) 
# mean(A::AbstractArray{T,N}) at statistics.jl:17 

@which std(data(img)) 
# std(A::AbstractArray{T,N}) at statistics.jl:204 

@less mean(data(img)) 
@less std(data(img)) 

有(至少)兩個問題:第一,sqrt沒有爲顏色所限定, 第二,一些在std代碼的假定平均是Number