Преобразование изображения в список координат в Джулии

У меня есть этот короткий код img_lab = rand(Lab, 10, 10), где я только что создал изображение случайных цветных пикселей. Вероятно, этот вопрос тривиален, но как мне преобразовать вывод этого (то есть Matrix{Lab{Float64}} (alias for Array{Lab{Float64}, 2}) в организованный список координат. Например [[0,0,0,44,0,33,0,45],[0,1, ...] , ... , [10,10,0,54,0,32,0,87]] где первые две записи — это координаты, а последние три значения — RGB.

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, убедитесь, что у вас есть для этого веские причины. Преобразование в такой формат затрудняет использование остальных функций Colors, может иметь (потенциально большие) затраты на производительность и обычно не требуется.

Теперь, если это необходимо, вот один из способов сделать это:

julia> using Random; Random.seed!(42)
TaskLocalRNG()

julia> img_lab = rand(Lab, 10, 10)
10×10 Matrix{Lab{Float64}}:
 Lab(17.3575, -26.8628, -55.5385)  Lab(9.1585, 86.3359, 71.5105)     …  Lab(14.4465, 87.7468, 12.1242)
 Lab(16.6439, 11.0078, -10.1264)   Lab(54.2929, -24.2044, -55.6044)     Lab(5.5968, 79.2197, -6.69094)
 Lab(39.0663, 61.8604, 90.5844)    Lab(50.2836, -78.3482, -26.4757)     Lab(6.6672, 21.7418, -100.172)
.
.
.

julia> map(keys(img_lab)) do cindex 
         rgbval = RGB(img_lab[cindex])
         [cindex[1], cindex[2], red(rgbval), green(rgbval), blue(rgbval)]
       end
10×10 Matrix{Vector{Float64}}:
 [1.0, 1.0, 0.0, 0.223779, 0.488699]        [1.0, 2.0, 0.468242, 0.0, 0.0]       …  [1.0, 10.0, 0.513226, 0.0, 0.101153]
 [2.0, 1.0, 0.196137, 0.141577, 0.218233]   [2.0, 2.0, 0.0, 0.573977, 0.885473]     [2.0, 10.0, 0.366805, 0.0, 0.118275]
 [3.0, 1.0, 0.737804, 0.0333098, 0.0]       [3.0, 2.0, 0.0, 0.583897, 0.639801]     [3.0, 10.0, 0.0, 0.136071, 0.65593]
 [4.0, 1.0, 0.117582, 0.0803492, 0.209829]  [4.0, 2.0, 0.833069, 0.433512, 1.0]     [4.0, 10.0, 0.818553, 0.673722, 0.202751]
 [5.0, 1.0, 0.0, 0.267613, 0.416236]        [5.0, 2.0, 0.0, 1.0, 1.0]               [5.0, 10.0, 0.26368, 0.0, 0.0]
 [6.0, 1.0, 0.0, 0.703393, 0.0]             [6.0, 2.0, 0.89057, 0.980158, 1.0]   …  [6.0, 10.0, 0.491448, 0.47962, 0.891735]
 [7.0, 1.0, 0.0, 1.0, 0.819822]             [7.0, 2.0, 1.0, 0.773939, 1.0]          [7.0, 10.0, 0.0, 1.0, 1.0]
 [8.0, 1.0, 1.0, 0.707005, 0.402694]        [8.0, 2.0, 0.0, 0.820631, 1.0]          [8.0, 10.0, 0.0, 0.3219, 0.91962]
 [9.0, 1.0, 1.0, 0.830982, 0.928663]        [9.0, 2.0, 0.0, 0.279664, 0.0]          [9.0, 10.0, 0.937227, 0.650945, 0.442197]
 [10.0, 1.0, 0.291409, 0.0, 0.28529]        [10.0, 2.0, 1.0, 0.682411, 1.0]         [10.0, 10.0, 0.0, 0.475448, 0.941526]

(Из моего ограниченное понимание преобразование Lab в RGB происходит с потерями, и количество 0,0 и 1,0 в приведенных выше значениях цвета, по-видимому, также указывает на то, что значения за пределами гаммы RGB ограничиваются, чтобы быть в ее пределах.)

Другие вопросы по теме