julia-lang - конвертирует изображение в черно-белое - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь преобразовать изображение в черно-белое, используя Джулию с порогом 0,5.Я преобразовал изображение в оттенки серого, но не уверен, поможет ли это.Я новичок в Юлии, поэтому любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 26 июля 2019

попробуйте следующий фрагмент кода:

using Images, ImageView;

function show_binary_image(img_path::String, threshold::Float16)
    img_binary = load(img_path);
    img_binary = (Gray.(img_binary) .> threshold);
    imshow(img_binary);
end

show_binary_image("/path/to/image/file", convert(Float16, 0.5));
0 голосов
/ 26 октября 2018

Можете ли вы привести пример вашего ввода и спецификации желаемого результата?В общем, если x - это матрица Float64, содержащая ваше изображение в оттенках серого, то Float64.(x .> 0.5) даст вам то, что вы хотите.Например:

julia> img = rand(5,4)
5×4 Array{Float64,2}:
 0.294821  0.719161   0.36838    0.0962881
 0.262626  0.0169155  0.7068     0.668797
 0.450861  0.493318   0.0125666  0.783241
 0.267667  0.652534   0.0860362  0.811446
 0.586622  0.08407    0.316635   0.36396

julia> Float64.(img .> 0.5)
5×4 Array{Float64,2}:
 0.0  1.0  0.0  0.0
 0.0  0.0  1.0  1.0
 0.0  0.0  0.0  1.0
 0.0  1.0  0.0  1.0
 1.0  0.0  0.0  0.0

Если вы хотите явно указать целевые значения (код выше использует тот факт, что true преобразуется в 1.0 и false в 0.0), вы можете написать:

julia> ifelse.(img .> 0.5, 1.0, 0.0)
5×4 Array{Float64,2}:
 0.0  1.0  0.0  0.0
 0.0  0.0  1.0  1.0
 0.0  0.0  0.0  1.0
 0.0  1.0  0.0  1.0
 1.0  0.0  0.0  0.0

Вы также можете достичь этого результата, используя следующие выражения:

julia> Float64[v > 0.5 for v in img]
5×4 Array{Float64,2}:
 0.0  1.0  0.0  0.0
 0.0  0.0  1.0  1.0
 0.0  0.0  0.0  1.0
 0.0  1.0  0.0  1.0
 1.0  0.0  0.0  0.0

julia> [ifelse(v > 0.5, 1.0, 0.0) for v in img]
5×4 Array{Float64,2}:
 0.0  1.0  0.0  0.0
 0.0  0.0  1.0  1.0
 0.0  0.0  0.0  1.0
 0.0  1.0  0.0  1.0
 1.0  0.0  0.0  0.0
...