I wish to convert of type(which i loaded as a bitmap)(I tried other types before)
Array{ColorTypes.RGB{FixedPointNumbers.Normed{UInt8,8}},2} to an object of type ColorTypes.Gray{Bool}
I wanted to apply convex hull algorithm but when I load images it gave me various type of errors:
MethodError: no method matching convexhull(::Array{ColorTypes.RGB{FixedPointNumbers.Normed{UInt8,8}},2})
Closest candidates are:
convexhull(!Matched::AbstractArray{T,2}) where T<:Union{ColorTypes.Gray{Bool}, Bool} at /home/ashwani/.julia/packages/ImageMorphology/BZPyk/src/convexhull.jl:7
I assume you mean you want to convert the elements of the array from RGB{N0f8}
to Gray{Bool}
, rather than convert the entire array to a single Gray(true)
/Gray(false)
value.
You’ll need to decide how to convert to a binary image; there’s no unique answer. The most common way to convert from RGB to grayscale is based on perceptual intensity; we have a demo of that in https://juliaimages.org/latest/democards/examples/color_channels/rgb_grayscale/#RGB-to-GrayScale. But of course you could do that based on, say, just the red channel, or the distance from a given pixel to the nearest blue-dominated pixel, etc. The number of ways is literally infinite depending on your goal.
Gray.(img)
would convert to a Gray{N0f8}
, which still isn’t binary. Continuing the theme of using the intensity, here’s a method based on thresholding:
julia> using Images, TestImages
julia> img = testimage("lighthouse");
julia> imgg = Gray.(img);
julia> thresh = otsu_threshold(imgg)
Gray{N0f8}(0.408)
julia> imgt = imgg .> thresh;
julia> summary(imgt)
"512×768 BitMatrix"
But again, the number of ways you could binarize is infinite, so you’ll have to decide what you actually want.
5 Likes