How to count the number of occurrences of pixel intensities in an image without using for loop?
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Mohana Singh
el 7 de Sept. de 2018
I am to write a script for histogram equalisation and I need to work on each RGB plane separately. In the first step I count the number of occurrences of each intensity value in the range 0-255. As far as I know, using for loops makes MATLAB code super slow.
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);
Now to have an array of size 256,with each index holding number of pixels corresponding to it what should my next step be? I'm trying to write down my logic :
for i = 0 to 255
if i is in R_unique_val
hist[i] = R_val_ocurr[i]
else
hist[i] = 0
Please tell me how to correctly and efficiently write this.
1 comentario
Stephen23
el 7 de Sept. de 2018
This is confusing, because the first part of your code gets a histogram, in fact your even write this "In the first step I count the number of occurrences of each intensity value in the range 0-255". So each of R_val_ocurr, etc. is a histogram. Then what else do you have to do?
Respuesta aceptada
Stephen23
el 7 de Sept. de 2018
Editada: Stephen23
el 7 de Sept. de 2018
im = imread('image.jpg');
Rhist = imhist(im(:,:,1));
Ghist = imhist(im(:,:,2));
Bhist = imhist(im(:,:,3));
Or using histcounts:
Rhist = histcounts(im(:,:,1),0:256);
Ghist = histcounts(im(:,:,2),0:256);
Bhist = histcounts(im(:,:,3),0:256);
0 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Histograms en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!