Как подсчитать количество вхождений интенсивности пикселей в изображение без использования цикла for? - PullRequest
0 голосов
/ 07 сентября 2018

Я пишу скрипт для выравнивания гистограммы, и мне нужно работать на каждой плоскости RGB отдельно. На первом этапе я подсчитываю количество вхождений каждого значения интенсивности в диапазоне 0-255. Насколько я знаю, использование циклов for делает код MATLAB очень медленным. Вот что я придумал:

org_image = imread('image.jpg')
tot_pixel = size(org_image,1) * size(org_image,2)
R = org_image(:,:,1);
G = org_image(:,:,2);
B = org_image(:,:,3);
[R_val_ocurr,R_unique_val] = histcounts(R);
[G_val_ocurr,G_unique_val] = histcounts(G);
[B_val_ocurr,B_unique_val] = histcounts(B);

Теперь, чтобы иметь массив размером 256, с каждым индексом, содержащим количество пикселей, соответствующее ему, каким должен быть мой следующий шаг? Я пытаюсь записать свою логику:

for i = 0 to 255 
    if i is in R_unique_val
        hist[i] = R_val_ocurr[i]
    else
        hist[i] = 0

Как правильно и качественно написать это в MATLAB?

1 Ответ

0 голосов
/ 07 сентября 2018

после того, как вы разделили канал, вы можете использовать imhist , чтобы получить гистограмму каждого канала:

[NumberOfPixelR, intensity] = imhist(R);
[NumberOfPixelG, intensity] = imhist(G);
[NumberOfPixelB, intensity] = imhist(B);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...