获得Julia中图像的标准偏差

时间:2014-09-20 22:59:39

标签: image julia

我正在使用Images包,我想加载图像并获得r图像中像素的平均值和标准差。

我试过了:

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

如何获得图像的标准差?

1 个答案:

答案 0 :(得分:2)

您可以使用redgreenblue来提取图片的组件, 并在得到的矩阵上用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)

您还可以构建包含所有数据的三维数组, 与separate, 并在相应的三个二维切片上应用std 使用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