Я не знаю автоматизированного способа, чтобы ваши построенные точки меняли цвет в зависимости от цвета пикселя позади них. Имейте в виду, что у вас нет , чтобы использовать только восемь предопределенных цветовых спецификаций (т. Е. 'R' для красного или 'b' для синего). Вы можете выбрать цветовую спецификацию RGB для точек на графике, которая не является обычной для вашего базового изображения. Например:
h = plot(0,0,'Marker','x','Color',[1 0.4 0.6]); %# Plot a pink x
Вы можете программно найти наименее распространенный цвет с помощью простого кода, который выбирает наименее часто используемые значения цвета в изображении. Вот один пример:
rawData = imread('peppers.png'); %# Read a sample RGB image
imData = reshape(rawData,[],3); %# Reshape the image data
N = hist(double(imData),0:255); %# Create a histogram for the RGB values
[minValue,minIndex] = min(N); %# Find the least used RGB values
plotColor = (minIndex-1)./255; %# The color for the plotted points
image(rawData); %# Plot the image
hold on;
hp = plot(500.*rand(1,20),350.*rand(1,20),... %# Plot some random points
'Marker','o','LineStyle','none',...
'MarkerFaceColor',plotColor,'MarkerEdgeColor',plotColor);
Приведенный выше код вначале преобразует данные изображения в матрицу размером 3 на 3, где M - количество пикселей изображения, а три столбца содержат значения красного, зеленого и синего соответственно. Группирование значений выполняется для каждого столбца с использованием HIST , затем для каждого столбца определяется значение с наименьшим интервалом (т.е. наименьшей частотой). Эти три значения становятся RGB-тройкой для цвета графика. Когда на изображение накладываются случайные точки этого цвета, оно дает следующий график:
Обратите внимание, что в этом случае вышеуказанный код выбирает ярко-синий цвет для точек графика, который оказывается цветом, который не появляется на изображении и, таким образом, дает хороший контраст.