Документация Engee

Начало работы

Большинство пользователей, вероятно, захотят начать с пакета Images.jl, который объединяет в себе большую часть функций JuliaImages (но не все).

Установка

Для программной обработки изображений может быть достаточно пакета Images (и, возможно, некоторых дополнительных пакетов). Установить Images.jl можно через диспетчер пакетов:

(v1.0) pkg> add Images

У жителей некоторых регионов, например Китая, может не получиться установить или предварительно скомпилировать Images из-за сетевых проблем. Решить эту проблему можно с помощью прокси-сервера или VPN со стабильным подключением к Amazon S3 и GitHub.

Загрузка первого изображения

Начиная с версии Images 0.24.0 бэкенды ввода-вывода ImageIO и ImageMagick устанавливаются автоматически.

Если вы впервые работаете с изображениями в Julia, скорее всего, вам понадобится установить некоторые бэкенды ввода-вывода изображений для загрузки изображений. В настоящее время для файлов изображений доступны следующие бэкенды.

  • ImageMagick.jl охватывает большинство форматов изображений и имеет дополнительные возможности. Его можно выбрать первым, если у вас нет особых предпочтений.

  • QuartzImageIO.jl делает доступными собственные функции ввода-вывода изображений macOS в Julia. В некоторых случаях он быстрее, чем ImageMagick, но может удовлетворять не все потребности.

  • ImageIO.jl — это новый бэкенд ввода-вывода изображений (требуется Julia версии не ниже 1.3), который обеспечивает повышенную производительность для файлов PNG. Результат тестов производительности см. здесь.

  • OMETIFF.jl поддерживает файлы OME-TIFF. Если вы не знаете, что это такое, то, скорее всего, этот пакет вам не нужен.

Эти бэкенды не являются взаимоисключающими, поэтому если вы пользуетесь macOS, то можете установить их все. В большинстве случаев с этими бэкендами не требуется взаимодействовать напрямую; вместо этого используются функции save и load, предоставляемые интерфейсом FileIO.jl. Если установлено несколько бэкендов, то FileIO выберет наиболее подходящий из них в соответствии с форматом файла. Например, для загрузки файлов PNG используется бэкенд ImageIO, если он имеется.

Добавив следующую строку, вы получите базовую конфигурацию ввода-вывода изображений:

(v1.0) pkg> add FileIO ImageMagick ImageIO

Загрузить изображение можно так:

using Images, FileIO
# укажите путь к локальному файлу изображения
img_path = "/path/to/image.png"
img = load(img_path)
P3fS8uYOkgJGRj1uzNFKKLdo8L4SeVVKrHDidt7MAeEWpN5UNGitPFYoKSCvJOSNCLkgFsV1HHNdL8P8A8ifkOQmW7ggAAAAAElFTkSuQmCC

Для сохранения изображения достаточно вызова save(img_path, img) (функция save также предоставляется FileIO).

При опробовании задумок или просто изучении документации может быть полезно иметь под рукой несколько изображений. Пакет TestImages.jl содержит несколько «стандартных» изображений.

(v1.0) pkg> add TestImages

Загрузить одно из изображений из этого пакета можно так:

using TestImages
# требуются бэкенды, например ImageMagick
img = testimage("mandrill")

Отображение изображений

При работе с изображениями, безусловно, полезно иметь возможность их просматривать. Если вы используете Julia через Juno или IJulia, изображения должны отображаться автоматически:

IJulia

В настоящее время для отображения изображения можно использовать пять пакетов Julia:

  • ImageShow служит для поддержки отображения изображений в Juno и IJulia. При использовании директивы using Images это происходит автоматически.

  • ImageInTerminal служит для поддержки отображения изображений в терминале.

  • ImageView — это пользовательский интерфейс для отображения изображений. (Для платформ OSX и Windows требуется версия Julia не ниже v1.3.)

  • Пакет Plots, поддерживаемый JuliaPlots, — это стандартный пакет для построения графиков, который также поддерживает отображение изображений.

  • Пакет Makie также поддерживается JuliaPlots, но обеспечивает более широкие интерактивные возможности.

Чтобы отобразить несколько изображений в одном кадре, можно создать изображение большего размера из нескольких источников с помощью функции mosaicview, которая является улучшенной версией cat.

img1 = testimage("mandrill") # изображение RGB 512*512
img2 = testimage("blobs") # изображение Gray 254*256
mosaicview(img1, img2; nrow=1)
W1VlMwAAAAASUVORK5C
img = testimage("mri-stack") # изображение Gray 226×186×27
mosaicview(img; fillvalue=0.5, npad=2, ncol=7, rowmajor=true)
y8L70JwBEVThwYPvmIX3pQoPHnz3LDx48KNi4cGDHxULDx78qFh48OBHxcKDBz8qFr5Ln8F36TP4Ln0G36XP4Lv0GXyXPvvP8B367P8AnICpEFZd9WsAAAAASUVORK5C

Устранение неполадок

Чтение и запись изображений, а также отображение графики подразумевают взаимодействие с внешними программными библиотеками, установка которых иногда проходит неудачно. К счастью, система артефактов, появившаяся с версии Julia 1.3, сделала этот процесс гораздо более надежным. Поэтому, если у вас возникли проблемы с установкой, попробуйте использовать Julia 1.3 или более позднюю версию.

Эта документация сгенерирована с приведенной ниже конфигурацией среды. Если при чтении документации вы обнаружите ошибки или выходные данные на вашем локальном компьютере будут отличаться от представленных в документации, сначала проверьте используемые версии Julia и пакетов. Если ошибка или несоответствие сохраняются, сообщите о проблеме; это поможет нам улучшить документацию.

julia> using Pkg, Dates


julia> today()
2024-11-15

julia> versioninfo()
Julia Version 1.10.4
Commit 48d4fd48430 (2024-06-04 10:41 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 4 × 11th Gen Intel(R) Core(TM) i3-1115G4 @ 3.00GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-15.0.7 (ORCJIT, tigerlake)
Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)

julia> Pkg.status()
Status `~/.julia/environments/v1.10/Project.toml`
  [39de3d68] AxisArrays v0.4.7
⌃ [13f3f980] CairoMakie v0.12.9
  [9de3a189] CircularArrayBuffers v0.1.14
⌅ [3da002f7] ColorTypes v0.11.5
⌅ [5ae59095] Colors v0.12.11
  [b0b7db55] ComponentArrays v0.15.18
  [3abffc1c] ControlSystemIdentification v2.11.0
  [aaaaaaaa] ControlSystemsBase v1.11.1
  [b46f11dc] CoordRefSystems v0.15.7
  [150eb455] CoordinateTransformations v0.6.3
  [c47d62df] DAQP v0.5.2
  [717857b8] DSP v0.7.10
  [82cc6244] DataInterpolations v6.6.0
  [311a05b2] DemoCards v0.5.5
  [b4f34e82] Distances v0.10.12
  [31c24e10] Distributions v0.25.113
  [8bac0ac5] DocThemeIndigo v0.1.3
⌅ [e30172f5] Documenter v0.27.25
  [997ab1e6] DocumenterMarkdown v0.2.2
  [057dd010] FastTransforms v0.16.6
  [5789e2e9] FileIO v1.16.5
  [53c48c17] FixedPointNumbers v0.8.5
  [271df9f8] FuzzyLogic v0.1.3
⌅ [46192b85] GPUArraysCore v0.1.6
  [61d90e0f] GeoJSON v0.8.1
⌃ [2803e5a7] ImageAxes v0.6.11
⌃ [c817782e] ImageBase v0.1.5
  [cbc4b850] ImageBinarization v0.3.1
  [f332f351] ImageContrastAdjustment v0.3.12
⌅ [a09fc81d] ImageCore v0.9.4
  [89d5987c] ImageCorners v0.1.3
  [51556ac3] ImageDistances v0.2.17
  [4381153b] ImageDraw v0.2.6
  [2b14c160] ImageEdgeDetection v0.1.8
  [92ff4b2b] ImageFeatures v0.5.3
⌃ [6a3955dd] ImageFiltering v0.7.6
  [6218d12a] ImageMagick v1.4.0
⌃ [bc367c6b] ImageMetadata v0.9.9
⌅ [787d08f9] ImageMorphology v0.3.2
  [2996bd0c] ImageQualityIndexes v0.3.7
⌃ [80713f31] ImageSegmentation v1.8.1
  [4e3cecfd] ImageShow v0.3.8
⌅ [02fcd773] ImageTransformations v0.9.5
⌃ [916415d5] Images v0.25.3
  [9b13fd28] IndirectArrays v1.0.0
  [a7427343] InterProcessCommunication v0.1.5
⌅ [a98d9a8b] Interpolations v0.14.0
  [682c06a0] JSON v0.21.4
  [4076af6c] JuMP v1.23.4
  [b964fa9f] LaTeXStrings v1.4.0
  [0fc2ff8b] LeastSquaresOptim v0.8.6
  [093fc24a] LightGraphs v1.3.5
  [98b081ad] Literate v2.20.1
  [d9d29d28] LowLevelParticleFilters v3.9.0
  [2fda8390] LsqFit v0.15.0
  [eff96d63] Measurements v2.11.0
⌃ [eacbb407] Meshes v0.52.1
  [61f9bdb8] ModelPredictiveControl v1.0.2
  [0987c9cc] MonteCarloMeasurements v1.2.1
  [e94cdb99] MosaicViews v0.3.4
  [81d43f40] Noise v0.3.3
  [d0dd6a25] ONNX v0.2.7
  [6fe1bfb0] OffsetArrays v1.14.1
  [5432bcbf] PaddedViews v0.5.12
  [f0f68f2c] PlotlyJS v0.18.15
⌃ [91a5bcdd] Plots v1.40.7
  [42171d58] PlyIO v1.2.0
  [80ea8bcb] PortAudio v1.3.0
  [08abe8d2] PrettyTables v2.4.0
  [158674fc] ReinforcementLearning v0.11.0
  [e575027e] ReinforcementLearningBase v0.13.1
  [de1b191a] ReinforcementLearningCore v0.15.3
  [25e41dd2] ReinforcementLearningEnvironments v0.9.1
  [6038ab10] Rotations v1.7.1
  [1c904df7] SeeToDee v1.3.0
  [276daf66] SpecialFunctions v2.4.0
  [1e83bf80] StaticArraysCore v1.4.3
  [82ae8749] StatsAPI v1.7.0
  [4acbeb90] Stipple v0.30.13
  [a3c5d34a] StippleUI v0.24.3
  [5e47fb64] TestImages v1.9.0
⌅ [92992a2b] Umlaut v0.6.3
  [1986cc42] Unitful v1.21.0
  [37e2e46d] LinearAlgebra
  [9a3f8284] Random
Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated`