【问题标题】:Getting the standard deviation of an image in Julia在 Julia 中获取图像的标准差
【发布时间】:2014-09-20 22:59:38
【问题描述】:

我正在使用 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

如何获得图像的标准差?

【问题讨论】:

  • 如果你想检查你是否正确地完成了它,你可以在命令行中使用 ImageMagick 的identify 命令很容易地做到这一点:identify -verbose yourImage.jpg

标签: image julia


【解决方案1】:

您可以使用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)

您还可以使用所有数据构建一个 3 维数组, 与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

【讨论】:

    猜你喜欢
    • 2020-07-07
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多