ImageSegmentation.jl中的模糊C均值聚类

时间:2018-03-11 09:32:03

标签: julia image-segmentation fuzzy-c-means

我正在尝试使用带有ImageSegmentation.jl的模糊C均值聚类来聚类图像的不同区域

using ImageSegmentation, Images
fl = load("flower.jpg")
fuzzy_fl = fuzzy_cmeans(fl,3,2)

它给出了这样的错误:

MethodError: no method matching fuzzy_cmeans(::Base.ReshapedArray{Float64,2,ImageCore.ChannelView{Float64,3,Array{ColorTypes.RGB4{Float64},2}},Tuple{Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64},Base.MultiplicativeInverses.SignedMultiplicativeInverse{Int64}}})
Closest candidates are:
  fuzzy_cmeans(::Array{T<:Real,2}, ::Int64, ::Real; maxiter, tol, dist_metric, display) where T<:Real at /Users/asharma19/.julia/v0.6/Clustering/src/fuzzycmeans.jl:58
  fuzzy_cmeans(::AbstractArray{T<:ColorTypes.Colorant,N}, ::Any...; kwargs...) where {T<:ColorTypes.Colorant, N} at /Users/asharma19/.julia/v0.6/ImageSegmentation/src/clustering.jl:12

1)我应该如何将图像输入此功能? 2)此外,如果它工作正常,因为该函数不返回SegmentedImage数组,那么在此之后我应该如何显示分段/聚簇图像?

2 个答案:

答案 0 :(得分:0)

代码对我来说很好。在将图像输入fuzzy_cmeans函数之前,您可能正在处理操作它的图像(例如视图,转置)。与您发布的代码示例不同的东西。

答案 1 :(得分:0)

函数fuzzy_cmeans不接受Array{ColorTypes.RGB4{FixedPointNumbers.Normed{UInt8,8}},2}

图像需要Array{ColorTypes.RGB{FixedPointNumbers.Normed{UInt8,8}},2}才能在函数中输入。

虽然,它不应该发生,因为函数的参数类型是Colorant{T,N},它是AbstractRGB{T}的父类。

图像通常是RGB4(涉及一些填充),因此您需要在使用前进行转换。 (可以使用julia的convert功能)