Основная проблема здесь в том, что imshow
показывает, что это не то, что содержат данные.
imshow
предполагает, что для double
входных значений значения пикселей находятся в диапазоне [0,1].Лаборатория имеет диапазон [0,100] в первом канале, и я полагаю, что он равен [-20,20] в двух других каналах (возможно, он отличается, но эти два канала симметричны относительно 0, что серо).
Если вы сделаете imshow(A,[])
, то данные будут масштабированы, чтобы показать вам все.Таким образом, все каналы будут масштабироваться одинаково, поэтому это не лучший способ просмотра ваших данных, но в любом случае L-канал будет показан красным, а каналы a и b - зеленым и синим.Не ожидайте, что это будет выглядеть как ваше исходное изображение, хотя у вас все еще есть все данные для восстановления исходного изображения.
Далее, superpixels
ожидает, что в качестве входных данных будет RGB-изображение, рассмотримпередавая исходное изображение B
, а не лабораторное изображение A
.Это не помешает вам использовать вычислительные средства каналов Lab в найденных суперпикселях. ( получается есть возможность использовать входное изображение Lab).
Если вы хотитечтобы измерить средние значения Lab внутри каждого суперпикселя и использовать их при дальнейшей обработке, не создавайте outputImage
, а скорее таблицу с такими значениями:
data = zeros(N,3);
for labelVal = 1:N
redIdx = idx{labelVal};
greenIdx = idx{labelVal}+numRows*numCols;
blueIdx = idx{labelVal}+2*numRows*numCols;
data(labelVal,1) = mean(A(redIdx));
data(labelVal,2) = mean(A(greenIdx));
data(labelVal,3) = mean(A(blueIdx));
end
Теперь, data(ii,:)
- это Labзначения для числа суперпикселей ii
.L==ii
- это пиксели, принадлежащие этому суперпикселю.