2013-08-28 4 views
-1

У меня есть изображение с серым уровнем и вы хотите найти зону, где конкретный цвет (например, черный) более плотный. Поскольку эта проблема является частью более крупного проекта, мне нужно запрограммировать ее в java, но я не нахожу адекватного алгоритма.Как сгруппировать один и тот же цвет на картинке

+1

Добавьте java-тег, если вы хотите ответить на Java. В каком формате находится изображение? Это файл? Вы знаете, как читать файл на Java? Вы еще не пытались написать какой-либо код? Если да, то? – doctorlove

+1

Если вы начинаете с обработки изображений, я действительно рекомендую вам начать писать свой код в Matlab, а затем перейти на другой язык (java в вашем случае) – karl71

+0

Хотите получить более крупное квантование изображения? или сегментирование изображения на уровне серого? если вам нужна сегментация, основанная на цветовой подобии, вы должны проверить сегментацию среднего сдвига. См. Http://stackoverflow.com/questions/4831813/image-segmentation-using-mean-shift-explained – Shai

ответ

1

Вы должны использовать K-Средство, чтобы найти кластеры на вашем изображении. Например, ваш набор данных должен быть Позиция X, Y, Z и значение серого.

Затем запускает алгоритм для множественного значения k. И используя счет BIC, чтобы найти лучшую конфигурацию кластера.

+0

как я молод в этом поле, можете ли вы предложить мне программу для этого или пример кода? – user2724554

1

Я рекомендую вам использовать Matlab, чтобы сделать первые шаги по обработке изображений. Я написал простую функцию, которая генерирует псевдослучайное изображение, а затем я буду учитывать пиксели со значением над пороговым значением. Остальные пиксели будут установлены на ноль. Это код:

image=randi([0 255],10); %Used to generate a 10x10 image with pixel values between [0-255] 

[row,col]=size(image); % to calculate the size of the image; 
image_output=zeros([row,col]); %We make an empty image with the same size than the origial 

TH_value=100; %threshold value 

index=find(image>TH_value); %searching for all the pixels with value>TH_value 
n_idx=length(index); %number of pixels over TH_value 

%no we have to replace in our empty new matrix only those pixels that have a value over the TH_value 
for i=1:n_idx 
    [row, col, ~ ] = ind2sub(size(image), index(i)); %geting the coordinates for all values over TH_value 
    image_output(row,col)=image(row,col); %copying to the output matrix only the pixels over TH_value 
end 
image_output %in order to visualize the output image 

Вставьте код сверху в Matlab, чтобы узнать, как это работает. Это довольно просто, но все в порядке. Вместо генерации случайного изображения (см. Первую строку кода) вы должны импортировать собственное изображение с помощью функции «imread».

Смежные вопросы