2015-04-21 3 views
2

Я закончил программирование, которое может отображать до 8 цветов в изображениях, используя метод RGB от 000 до 111. Мне нужно сделать некоторые изменения. Пока объявляю номер, если выше 128 будет равно 1 & ниже 128 будет 0. Он будет считать 8 цветов. Как увеличить количество цветов? Ниже приведен пример кода для насчитать до 8 цветов:Подсчитайте процентное количество цветов на изображении

rgbImage = imread('football.jpg'); 
imshow(rgbImage); 
[w,h,d] = size(rgbImage) 
redChannel = rgbImage(:,:, 1); 
greenChannel = rgbImage(:,:, 2); 
blueChannel = rgbImage(:,:, 3); 
quantizedImage=zeros(size(rgbImage)); 
count=zeros(1,8); 
for i = 1:w 
    for j = 1:h   
     if redChannel(i,j) > 128, 
      aredChannel2 = 1; 
     else 
      aredChannel2=0; 
     end 
     quantizedImage(i,j,1)=aredChannel2*255; 
     if greenChannel(i,j) > 128, 
     agreenChannel2 = 1; 
     else 
     agreenChannel2=0; 
     end 
     quantizedImage(i,j,2)=agreenChannel2*255; 
     if blueChannel(i,j) > 128, 
     ablueChannel2 = 1; 
     else 
     ablueChannel2=0; 
     end 
     quantizedImage(i,j,3)=ablueChannel2*255; 
     bin=4*aredChannel2+2*agreenChannel2+ablueChannel2+1; 
     count(bin)=count(bin)+1; 
    end 
end 
figure, imshow(uint8(quantizedImage)); 
+0

Как выше код до 8 цветов. Скажем, я хочу увеличить количество цветов до 64 цветов. –

+0

@rayryeng Вы можете помочь мне решить эту проблему? –

ответ

2

Вы должны использовать rgb2ind, чтобы помочь вам в достижении вашей цели.
Сначала создайте цветовой код с 64 цветами. Эта цветовая карта создается путем деления каждого цветового канала (R, G и B) на 4 бина в целом 4 * 4 * 4 = 64 возможных цвета. Диапазон каждого цветового канала находится между 0 и 1, поэтому центры бункеров составляют 0,1250, 0,3750, 0,6250 и 0,8750. Или в более языке Matlab-ish: (0:.25:.75)+0.125.
Я использую meshgrid создать декартово произведения между всеми возможными бункерами:

[C{1:3}] = meshgrid((0:.25:.75)+0.125); 
cmp = [C{1}(:) C{2}(:) C{3}(:)]; 

После того, как у вас есть 64-цвет Colormap вы можете квантование изображения

qImg = rgb2ind(rgbImage, cmp, 'nodither'); 

Вот так!

Вот ваш выход

figure;imagesc(qImg);colormap(cmp); 

enter image description here

Если вы хотите, чтобы подсчитать количество пикселей в каждом из 64 бункеров, вы можете просто использовать hist

count = hist(double(qImg(:)), 64); 
+0

Я получаю некоторые ошибки о том, как считать это. Извините –

+0

@RabaniAhmadTasman вы должны быть более конкретным – Shai

+0

ну я получил ошибку за этот код: count = hist (qImg (:), 64); –

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