Если вы хотите сделать это, это оштрафовать смежные пары, которые имеют разные значения цвета (независимо от того, насколько мала разница), я думаю, что img[i,j] != img[i+1,j]
должно быть достаточным и бесконечно более эффективным, чем вызов colordiff
.
Images.jl также содержит методы, raw
и separate
, которые позволят вам «преобразовать» это изображение в массив более высокого уровня от UInt8
. Однако для вашего видимого приложения это, скорее всего, будет больнее, потому что вам придется выбирать между использованием синтаксиса, например, A[:, i, j] != A[:, i+1, j]
(который будет выделять память и иметь намного худшую производительность) или выписывать циклы и проверять каждый цветной канал вручную. Тогда всегда есть небольшое раздражение, связанное с тем, что вам нужен специальный код для оттенков серого и цвета, задаваясь вопросом, что действительно означает 3D-массив (это 3D-серого или 2d с цветовым каналом?) И задается вопросом, сохраняется ли цветовой канал в качестве первого или последнего измерения.
Ни одна из этих неприятностей не возникает, если вы просто работаете с данными непосредственно в формате RGBA. Для получения дополнительной информации они являются примерами «неизменяемых» объектов Юлии, которые имеют как минимум два преимущества. Во-первых, они позволяют четко указывать «значение» определенного набора чисел (в этом случае эти 4 числа представляют цвет в определенном цветовом пространстве, а не, скажем, показания давления от датчика) --- это означает, что вы можете написать код, который не принуждает делать предположения, которые он не может обеспечить. Во-вторых, как только вы узнаете, как их использовать, они делают ваш код намного красивее, обеспечивая при этом фантастическую производительность.
Типы цветов документированы here.
Как насчет использования 'colordiff()' в Colors.jl для сравнения цвета с, скажем, «черным»? – daycaster
'colordiff' принимает два цвета в качестве аргументов. Чтобы использовать его, вы должны извлечь цветную часть пикселя с помощью 'color', то есть' colordiff (color (v), color (w)) 'где' v' будет 'RGBA {U8} (0,384,0,0,0,0 , 1,0) '. –
Работала отлично. Спасибо. –