好久沒用matlab了,回顧一下的感覺真的。。
單通道的equalizehist_8uc1.m
function [save] = equalizehist_8uc1(img)
%行,列,通道
[m,n] = size(img);
save = img;
hist = zeros(1,256);
for r = 1 : m
for c = 1 : n
val = img(r,c)+1;
hist(1,val) = hist(1,val) + 1;
end
end
image_area = m * n;
sum = 0;
for i = 1:256
hist(1,i) = hist(1,i)/image_area;
sum = sum + hist(1,i);
hist(1,i) = uint8(sum * 255+0.5);
end
for r = 1:m
for c = 1:n
val = img(r,c);
save(r,c) = hist(1, val+1);
end
end
end
3通道的 equalizehist_8uc3.m
function [save] = equalizehist_8uc3(img)
r = img(:,:,1);
g = img(:,:,2);
b = img(:,:,3);
r = equalizehist_8uc1(r);
g = equalizehist_8uc1(g);
b = equalizehist_8uc1(b);
save = cat(3,r,g,b);
end
main.m
clc;
clear all;
img = imread('lena.jpg');
gray = rgb2gray(img);
gray_save = equalizehist_8uc1(gray);
bgr_save = equalizehist_8uc3(img);
figure(1);
imshow(gray_save);
figure(2);
imshow(bgr_save);