У меня есть объект, который выглядит следующим образом:
На этом изображении я бы хотел сказать, исходя изсверху вниз, я хотел бы иметь возможность вывести «фиолетовый, красный, фиолетовый, красный, фиолетовый, красный, фиолетовый».
Теперь, вот общие симптомы, которые я испытываю (так как изображение выше простопример):
- Основной объект не всегда ориентирован по четкой оси.Он может быть вертикальным, горизонтальным, где-то посередине.
- Пурпур всегда будет основным фоном
- Красный будет наложением
- Наложение не будет таким четкимопределяется как полосы резистора на резисторе.Это будет более шумно, как в этом примере.
Единственный подход, который я могу придумать, - это провести линию через хромосому и определить, какой цвет появляется в этой линии, что-то вроде сканера штрих-кода.Однако я хотел бы сделать это совершенно без присмотра.
Как мне это сделать?Я пытаюсь сделать это в Matlab.
Вот мой текущий код, чтобы попытаться сделать это с использованием PCA, как один из предложенных ответов:
rgbImage = label2rgb(temp);
[rows, columns, numberOfColorBands] = size(rgbImage);
redChannel = rgbImage(:, :, 1);
greenChannel = rgbImage(:, :, 2);
blueChannel = rgbImage(:, :, 3);
listOfRGBValues = double(reshape(rgbImage, rows * columns, 3));
coeff = pca(listOfRGBValues);
transformedImagePixelList = listOfRGBValues * coeff;
pca1Image = reshape(transformedImagePixelList(:,1), rows, columns);
pca2Image = reshape(transformedImagePixelList(:,2), rows, columns);
pca3Image = reshape(transformedImagePixelList(:,3), rows, columns);
Однако этот код, вдохновленный этим файлом ,не позволяет мне "идти по длине большой оси", чтобы прочитать цвета.