简体   繁体   中英

Hi, can anyone tell me code how to create histogram without the toolbox (imhist,hist) from matlab?

can anyone tell me how to create histogram from an grayscale image without the function from the matlab.

Thanks

A bit more efficient than your code:

histogram = zeros(1,256);
for value = 1:256 % loop through possible values
    histogram(value) = histogram(value) + length(find(F(:)==value));
end

Note that this code makes a histogram for values from 1 to 256. For grayscale images you might need one from 0 to 255. But I'll let you change this on your own for matters of practice.

edit : Since you asked for a revision of your code, let me comment on it:

 [m n]=size(F);
 x=0;

No need to set x to zero, you are overwriting it later.

 H=0;

Instead of setting H to zero you should initialize it as an array, since you want to fill H(x) later. Something like H = zeros(1,256);

for z=1:256

I'm not sure what this loop over z is supposed to do. You never use z . You can remove it.

for i=1:m
    for j=1:n       
        x==F(i,j);

As I said below, this should be x=F(i,j); instead, as == is a test for equality.

        H(x+1)=H(x+1)+1

This works if all values in F are guaranteed to be between 0 and 255. Though I would say it's not very good style.

Also, put a semicolon at the end of this line to suppress the outputs, otherwise your command line gets flooded (which is also slowing down things a lot).

    end
end
H;

The last line does nothing. Why is it there?

end

The outer loop over z is not needed (see above).

So, here is a "sanitized" version of your code:

[m,n] = size(F);
H = zeros(1,256);
for i=1:m
    for j=1:n
        x=F(i,j);
        H(x+1)=H(x+1)+1;
    end
end

Hope this helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM