如何在不使用for循环的情况下计算图像中像素强度出现的次数?

时间:2018-09-07 07:58:46

标签: matlab histogram

我要编写用于直方图均衡的脚本,我需要分别在每个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 :(得分:1)

分隔频道后,可以使用 imhist 获取每个频道的直方图:

[NumberOfPixelR, intensity] = imhist(R);
[NumberOfPixelG, intensity] = imhist(G);
[NumberOfPixelB, intensity] = imhist(B);