我正在使用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
如何获得图像的标准差?
答案 0 :(得分:2)
您可以使用red
,green
和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)
您还可以构建包含所有数据的三维数组,
与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
。