imshow(I);
I1=I(:,:,1); %提取红色分量
I2=I(:,:,2); %提取绿色分量
I3=I(:,:,3); %提取蓝色分量
function[输出形参]=函数名([输入形参])
函数体
cat(Concatenate的缩写)用于构造多维函数。
C = cat(dim,A,B)
C = cat(dim,A1,A2,A3,A4,...)
dim为1时,将矩阵上下拼接:[A;B],dim为2时,将矩阵左右拼接:[A,B],dim=3时则可以构造三维数组。
subplot函数是将 多个图画到一个平面上的工具。
subplot(m,n,p)或subplot(m n p)
表示 一个m行n列的大画框,可显示 m*n个图 ,p表示图所在位置。
[m,n] = size(X)
返回矩阵X的尺寸信息, 并存储在m、n中。其中m中存储的是行数,n中存储的是列数。
m=size(X,dim)
返回矩阵X的第dim维尺寸。
zeros(m,n) 产生m*n的double类零矩阵,zeros(n)产生n*n的全零方阵。
%主函数
function coloraverage()
I=imread('lena.png');
imshow(I);
I1=I(:,:,1);%提取红色分量
I2=I(:,:,2);%提取绿色分量
I3=I(:,:,3);%提取蓝色分量
I1=histogram(I1); %构造的函数
I2=histogram(I2);
I3=histogram(I3);
c=cat(3,I1,I2,I3); %cat用于构造多维数组
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(c);
%调用的(直方图均衡化)构造函数
function d=histogram(I)%构造histogram函数
J=I;
[m,n]=size(I); %确定矩阵大小
area=m*n;
a=zeros(1,256); %产生1*256的零矩阵a,用来存放原始图像各个灰度值的个数
b=zeros(1,256);
for i=1:m %记录各个灰度值的个数
for j=1:n
d=I(i,j)+1; %获取(i,j)位置的灰度值(注意:灰度值为0-255,对应矩阵的1-256)
a(1,d)=a(1,d)+1; %矩阵a上对应灰度值的计数+1
end
end
for i=1:256 %均衡化
sum=0;
for j=1:i
sum=sum+a(1,j);
end
b(1,i)=sum*255/area;
end
for i=1:m %用均衡化后的数据代替原位置的数据
for j=1:n
d=J(i,j)+1;
J(i,j)=b(1,d);
end
end
d=J;
运行后的结果:
function Histogramequalization()
[f,p]=uigetfile('*.*','选择图像文件');
if f
I=imread(strcat(p,f));
end
h=figure();
set(h,'position',[300 100 1000 600]);
Ir=I(:,:,1);%提取红色分量
Ig=I(:,:,2);%提取绿色分量
Ib=I(:,:,3);%提取蓝色分量
I1=histeq(Ir); %直方图均衡化函数histeq
I2=histeq(Ig);
I3=histeq(Ib);
c=cat(3,I1,I2,I3); %cat用于构造多维数组
subplot(2,4,1);imshow(I);
title('A). 原始图像');
subplot(2,4,5);imshow(c);
title('B). 直方图均衡化');
subplot(2,4,2);
imhist(Ir);
title('I). 红色分量直方图');
subplot(2,4,6);
imhist(I1);
title('II). R均衡化后直方图');
subplot(2,4,3);
imhist(Ig);
title('I). 绿色分量直方图');
subplot(2,4,7);
imhist(I2);
title('II). G均衡化后直方图');
subplot(2,4,4);
imhist(Ib);
title('I). 蓝色分量直方图');
subplot(2,4,8);
imhist(I3);
title('II). B均衡化后直方图');
运行结果: