Нечеткая C-означает кластеризацию в ImageSegmentation.jl

Я пытаюсь кластеризовать различные области изображения с помощью кластеризации Fuzzy C-средних с помощью ImageSegmentation.jl

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 ответа

Код прекрасно работает для меня. Вы, вероятно, берете часть изображения, манипулирующую им (например, виды, транспонирование), прежде чем подавать его в fuzzy_cmeans функция. Нечто иное, чем пример кода, который вы опубликовали.

Функция fuzzy_cmeans не принимает Array{ColorTypes.RGB4{FixedPointNumbers.Normed{UInt8,8}},2},

Изображения должны быть Array{ColorTypes.RGB{FixedPointNumbers.Normed{UInt8,8}},2} быть введенным в функцию.

Хотя это не должно происходить, так как тип параметра функции Colorant{T,N} который является родителем AbstractRGB{T},

Изображения, как правило, RGB4 (с некоторыми отступами), поэтому вам нужно конвертировать их перед использованием. (можешь использовать convert функция джулии)

Другие вопросы по тегам