セグメンテーションのプログラムを実行
using ImageSegmentation seeds = [(CartesianIndex(126,81),1), (CartesianIndex(93,255),2), (CartesianIndex(213,97),3)] segments = seeded_region_growing(img, seeds)
セグメンテーション
3. セグメンテーションした画像を表示します.
imshow(map(i->segment_mean(segments,i), labels_map(segments)));
画像表示
プログラムの解説
セグメンテーションをするとき,プログラムでは,seeds を3点設定しました.このseeds の点をまず見てみましょう.
using Plots gr()
Plots 関数
そして,horse の画像の上にseeds点をプロットします.
x_arr = zeros(Float64, 3, 1) y_arr = zeros(Float64, 3, 1) for j in 1:3 x_arr[j] = float64(seeds[j][1][1]) y_arr[j] = float64(seeds[j][1][2]) end
Array
plot(img) plot!(y_arr, x_arr,color = "red", marker="o", st=:scatter)
plot
このように代表点を設定しています.
なお,ここで用いているアルゴリズムは seeded_region_growing というアルゴリズムです.詳しくは読んでいないですが,指定した点から,領域を拡大していくようにして,同じような画素値の領域を作っていくアルゴリズムです.そのため 分割された領域を同じ領域として認識することができません.
この問題点を解決するために,別のアルゴリズムが提案されています.