Начало работы
Установка
Для программной обработки изображений может быть достаточно пакета Images (и, возможно, некоторых дополнительных пакетов). Установить Images.jl
можно через диспетчер пакетов:
(v1.0) pkg> add Images
У жителей некоторых регионов, например Китая, может не получиться установить или предварительно скомпилировать |
Загрузка первого изображения
Начиная с версии Images 0.24.0 бэкенды ввода-вывода |
Если вы впервые работаете с изображениями в 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)
Для сохранения изображения достаточно вызова save(img_path, img)
(функция save
также предоставляется FileIO
).
При опробовании задумок или просто изучении документации может быть полезно иметь под рукой несколько изображений. Пакет TestImages.jl содержит несколько «стандартных» изображений.
(v1.0) pkg> add TestImages
Загрузить одно из изображений из этого пакета можно так:
using TestImages
# требуются бэкенды, например ImageMagick
img = testimage("mandrill")
Отображение изображений
При работе с изображениями, безусловно, полезно иметь возможность их просматривать. Если вы используете Julia через Juno или 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)
img = testimage("mri-stack") # изображение Gray 226×186×27
mosaicview(img; fillvalue=0.5, npad=2, ncol=7, rowmajor=true)
Устранение неполадок
Чтение и запись изображений, а также отображение графики подразумевают взаимодействие с внешними программными библиотеками, установка которых иногда проходит неудачно. К счастью, система артефактов, появившаяся с версии 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`