求解下面一段MATLAB代码,关于直方图均衡化的图像增强算法。
老师给的,可是有很多看不懂,请高手赐教啊。回复用%注释,要详细的哦。[A,map]=imread('c01.jpg');[m,n,p]=size(A);B=rgb2gra...
老师给的,可是有很多看不懂,请高手赐教啊。回复用%注释,要详细的哦。
[A,map]=imread('c01.jpg');
[m,n,p]=size(A);
B=rgb2gray(A);
t1=zeros(1,256);
t1=double(t1);
subplot(2,2,1);
imshow(B);
B=double(B);
for i=1:m
for j=1:n
temp=B(i,j);
temp=temp+1;
t1(temp)=t1(temp)+1;
end
end
t2=zeros(2,256);
t2=double(t2);
n1=0;
for k=1:256
if t1(1,k)~=0
n1=n1+1;
t2(1,n1)=k;
t2(2,n1)=t1(1,k);
end
end
nn=n1; % nn=244
num=0;
for j=1:n1
num=num+t2(2,j);
end;
n1=n1-1; % n1=243
t3=zeros(1,nn);
t3=double(t3);
t3(1,1)=t2(2,1)/num;
temp=t2(2,1);
for i=2:nn
t3(1,i)=(t2(2,i)+temp)/num;
temp=t2(2,i)+temp;
end
t4=zeros(1,nn);
t4=double(t4);
for i=1:nn
t3(i)=t3(i)*(nn-1);
t4(i)=round(t3(i));
end
t5=zeros(2,nn);
t5=double (t5);
for i=1:nn
t5(1,i)=t2(1,i);
t5(2,i)=t2(1,t4(i)+1);
end
t6=zeros(1,256);
t6=double(t6);
for i=1:nn
temp=t5(1,i)+1
t6(temp)=t5(2,i);
end
for i=1:m
for j=1:n
B(i,j)=t6(1,B(i,j)+1);
end
end
subplot(2,2,2);
B=uint8(B)
imshow(B);
subplot(2,2,3)
x=[1:nn]
y=ones(nn)
for i=1:nn
y(i)=t2(2,i);
end
plot(x,y);
axis([0 256 0 2000]);
subplot(2,2,4);
[m,n,p]=size(B);
B=double(B);
t7=zeros(1,256);
t7=double(t7);
for i=1:m
for j=1:n
temp=B(i,j);
temp=temp+1;
t7(1,temp)=t7(1,temp)+1;
end
end
t8=zeros(2,nn);
t8=double(t8);
for i=1:nn
t8(1,i)=t2(1,i);
end
for i=1:256 %将 t8中的第一行改成t2一样, 当是第二行 要是新的数据 ,是均衡后的新数据
if t7(1,i)~=0
for j=1:nn
if t8(1,j)==(i-1)
t8(2,j)=t7(1,i);
end
end
end
end
x=[1:nn]
y=zeros(nn);
for i=1:nn
y(i)=t8(2,i);
end
plot(x,y);
axis([0 256 0 500]); 展开
[A,map]=imread('c01.jpg');
[m,n,p]=size(A);
B=rgb2gray(A);
t1=zeros(1,256);
t1=double(t1);
subplot(2,2,1);
imshow(B);
B=double(B);
for i=1:m
for j=1:n
temp=B(i,j);
temp=temp+1;
t1(temp)=t1(temp)+1;
end
end
t2=zeros(2,256);
t2=double(t2);
n1=0;
for k=1:256
if t1(1,k)~=0
n1=n1+1;
t2(1,n1)=k;
t2(2,n1)=t1(1,k);
end
end
nn=n1; % nn=244
num=0;
for j=1:n1
num=num+t2(2,j);
end;
n1=n1-1; % n1=243
t3=zeros(1,nn);
t3=double(t3);
t3(1,1)=t2(2,1)/num;
temp=t2(2,1);
for i=2:nn
t3(1,i)=(t2(2,i)+temp)/num;
temp=t2(2,i)+temp;
end
t4=zeros(1,nn);
t4=double(t4);
for i=1:nn
t3(i)=t3(i)*(nn-1);
t4(i)=round(t3(i));
end
t5=zeros(2,nn);
t5=double (t5);
for i=1:nn
t5(1,i)=t2(1,i);
t5(2,i)=t2(1,t4(i)+1);
end
t6=zeros(1,256);
t6=double(t6);
for i=1:nn
temp=t5(1,i)+1
t6(temp)=t5(2,i);
end
for i=1:m
for j=1:n
B(i,j)=t6(1,B(i,j)+1);
end
end
subplot(2,2,2);
B=uint8(B)
imshow(B);
subplot(2,2,3)
x=[1:nn]
y=ones(nn)
for i=1:nn
y(i)=t2(2,i);
end
plot(x,y);
axis([0 256 0 2000]);
subplot(2,2,4);
[m,n,p]=size(B);
B=double(B);
t7=zeros(1,256);
t7=double(t7);
for i=1:m
for j=1:n
temp=B(i,j);
temp=temp+1;
t7(1,temp)=t7(1,temp)+1;
end
end
t8=zeros(2,nn);
t8=double(t8);
for i=1:nn
t8(1,i)=t2(1,i);
end
for i=1:256 %将 t8中的第一行改成t2一样, 当是第二行 要是新的数据 ,是均衡后的新数据
if t7(1,i)~=0
for j=1:nn
if t8(1,j)==(i-1)
t8(2,j)=t7(1,i);
end
end
end
end
x=[1:nn]
y=zeros(nn);
for i=1:nn
y(i)=t8(2,i);
end
plot(x,y);
axis([0 256 0 500]); 展开
2个回答
展开全部
%读图像
img=imread('D:\我的文档\桌面\10096009_0762641.JPG');
subplot(121),imshow(img);
%将RGB分量转换成HSI,具体见:http://zhidao.baidu.com/question/320254032.html
img_hsi=rgb2hsi(img);
%--------------------------------------------------------------------------
%ln和DFT处理过程
% img_s=fftshift(fft2(log(img_hsi(:,:,2))));
img_s=log(img_hsi(:,:,2));
img_s=img_hsi(:,:,2);
%H 巴特沃斯高通滤波器处理过程
f=double(img_s);
g=fft2(f);
g=fftshift(g);
[M,N]=size(g);
nn=5; % 2-grade Butterworth highpass filter
d0=15; % 15,30,80其中以15为例
m=fix(M/2); n=fix(N/2);
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn)); % filter transform function
%h=1./(1+(d./d0).^(2*n))
%h=exp(-(d.^2)./(2*(d0^2)));
result(i,j)=(1-h)*g(i,j);
end
end
result=ifftshift(result);
J1=ifft2(result);
img_s2=uint8(real(J1));
%--------------------------------------------------------------------------
% img_i=fftshift(fft2(log(img_hsi(:,:,3))));
img_i=log(img_hsi(:,:,3));
img_i=img_hsi(:,:,3);
%高斯滤波器
%将S分量的二维不连续Frourier变换的零频率成分移到频谱的中心
s=fftshift(fft2(img_i));
[M,N]=size(s); %分别返回s的行数到M中,列数到N中
n=2; %对n赋初值
%GLPF滤波,d0=5,15,30(程序中以d0=30为例)
d0=30; %初始化d0
n1=floor(M/2);n2=floor(N/2);
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离
h=1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数
s(i,j)=h*s(i,j); %GLPF滤波后的频域表示
end
end
img_i2=ifft2(ifftshift(s));img_i2=exp(img_i2);img_i2=uint8(real(img_i2));
%--------------------------------------------------------------------------
newImg(:,:,1)=img(:,:,1);newImg(:,:,2)=img_s2;newImg(:,:,3)=img_i2;
subplot(122),imshow(newImg);
img=imread('D:\我的文档\桌面\10096009_0762641.JPG');
subplot(121),imshow(img);
%将RGB分量转换成HSI,具体见:http://zhidao.baidu.com/question/320254032.html
img_hsi=rgb2hsi(img);
%--------------------------------------------------------------------------
%ln和DFT处理过程
% img_s=fftshift(fft2(log(img_hsi(:,:,2))));
img_s=log(img_hsi(:,:,2));
img_s=img_hsi(:,:,2);
%H 巴特沃斯高通滤波器处理过程
f=double(img_s);
g=fft2(f);
g=fftshift(g);
[M,N]=size(g);
nn=5; % 2-grade Butterworth highpass filter
d0=15; % 15,30,80其中以15为例
m=fix(M/2); n=fix(N/2);
for i=1:M
for j=1:N
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn)); % filter transform function
%h=1./(1+(d./d0).^(2*n))
%h=exp(-(d.^2)./(2*(d0^2)));
result(i,j)=(1-h)*g(i,j);
end
end
result=ifftshift(result);
J1=ifft2(result);
img_s2=uint8(real(J1));
%--------------------------------------------------------------------------
% img_i=fftshift(fft2(log(img_hsi(:,:,3))));
img_i=log(img_hsi(:,:,3));
img_i=img_hsi(:,:,3);
%高斯滤波器
%将S分量的二维不连续Frourier变换的零频率成分移到频谱的中心
s=fftshift(fft2(img_i));
[M,N]=size(s); %分别返回s的行数到M中,列数到N中
n=2; %对n赋初值
%GLPF滤波,d0=5,15,30(程序中以d0=30为例)
d0=30; %初始化d0
n1=floor(M/2);n2=floor(N/2);
for i=1:M
for j=1:N
d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离
h=1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数
s(i,j)=h*s(i,j); %GLPF滤波后的频域表示
end
end
img_i2=ifft2(ifftshift(s));img_i2=exp(img_i2);img_i2=uint8(real(img_i2));
%--------------------------------------------------------------------------
newImg(:,:,1)=img(:,:,1);newImg(:,:,2)=img_s2;newImg(:,:,3)=img_i2;
subplot(122),imshow(newImg);
东莞大凡
2024-08-07 广告
2024-08-07 广告
OpenCV标定板是东莞市大凡光学科技有限公司在相机标定中常用的工具。它通常由黑白格点按一定规则排列在平面上组成,如棋盘格或圆形格等。在相机标定时,将标定板置于不同位置和姿态下拍摄图像,利用OpenCV库中的函数检测标定板上的角点或圆心,进...
点击进入详情页
本回答由东莞大凡提供
2012-04-10
展开全部
t1那段 temp++ 是指 指定的像素数组的位置 下面的t1(temp)++是进行像素统计 我只能看懂一些 望采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |