⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 图象增强.txt

📁 压缩包中共有7个文件
💻 TXT
字号:
%应用变化曲线增强对比度
X1=imread('pout.tif');
figure,imshow(X1);
f0=0;g0=0;
f1=70;g1=30;
f2=180;g2=230;
f3=255;g3=255;
figure,plot([f0,f1,f2,f3],[g0,g1,g2,g3]);%绘制变化曲线
axis tight,xlabel('f'),ylabel('g')
title('intensity transformation')

r1=(g1-g0)/(f1-f0);
b1=g0-r1*f0;
r2=(g2-g1)/(f2-f1);
b2=g1-r2*f1;
r3=(g2-g1)/(f2-f1);
b3=g2-r3*f2;
[m,n]=size(X1);
X2=double(X1);

for i=1:m
    for j=1:n
    f=X2(i,j);
    g(i,j)=0;
    if(f>=0)&(f<=f1)
    g(i,j)=r1*f+b1;
    elseif(f>=f1)&(f<=f2)
    g(i,j)=r2*f+b2;
    elseif(f>=f2)&(f<=f3)
    g(i,j)=r3*f+b3;
    end 
   end
end 
figure,imshow(mat2gray(g))


%增强对比度(imadjust)
X1=imread('pout.tif');
figure,imshow(X1);
J=imadjust(X1,[0.25 0.6],[],1.2322);
figure,imshow(J)

%在imadjust函数中,第一个方括号中为原图象中要改变的图象灰度范围,第二个方括号中
%为变换后的灰度范围。而最后一个数据gamma小于1时图象变亮,大于1时图象变暗


%图象求反
X1=imread('pout.tif');
figure,imshow(X1)
f1=200;
g1=256;
figure,plot([0,f1],[g1,0])
axis tight,xlabel('f'),ylabel('g')
title('intensity transformation')

k=g1/f1;
[m,n]=size(X1);
X2=double(X1);
for i=1:m
    for j=1:n
      f=X2(i,j);
      g(i,j)=0;
      if(f>=0)&(f<f1)
      g(i,j)=g1-k*f;
      else
      g(i,j)=0;
      end
    end
end
figure,imshow(mat2gray(g))


%对数变换函数进行动态范围压缩
X1=imread('circuit.tif');
figure,imshow(X1);
c=255/log(256);
x=0:1:255;
y=c*log(1+x);
figure,plot(x,y)
axis tight,xlabel('f'),ylabel('g')
title('intensity transformation')
[m,n]=size(X1);
X2=double(X1);
for i=1:m
  for j=1:n
  g(i,j)=c*log(X2(i,j)+1);
  end
end
figure,imshow(mat2gray(g))


%图象切分(将某个范围的灰度值提高,其余的降低)
X1=imread('pout.tif');
figure,imshow(X1)
s1=100;s2=200;g1=20;g2=200;
figure,plot([0,s1,s1,s2,s2,255],[g1,g1,g2,g2,g1,g1])
axis tight,xlabel('f'),ylabel('g')
title('intensity transformation')
[m,n]=size(X1);
X2=double(X1);
for i=1:m
   for j=1:n
      f=X2(i,j);
      g(i,j)=0;
      if(f>=s1)&(f<=s2)
      g(i,j)=g2;
    else
       g(i,j)=g1;
     end 
   end
end
figure,imshow(mat2gray(g))


%直方图均衡化
I=imread('tire.tif');
J=histeq(I);
imshow(I);
figure,imshow(J);
figure,imhist(I,64);
figure,imhist(J,64)


%直方图规定化
I=imread('tire.tif');
hgram=0:255;
J=histeq(I,hgram);
imshow(I);
figure,imshow(J);
figure,imhist(I,64);
figure,imhist(J,64)


%离散余弦变换图象与原图象的差别
I=imread('cameraman.tif');
I=double(I)/255;
T=dctmtx(8);
B=blkproc(I,[8 8],'P1*x*P2',T,T');
mask=[1 1 1 1 0 0 0 0
      1 1 1 0 0 0 0 0
      1 1 0 0 0 0 0 0
      1 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0
      0 0 0 0 0 0 0 0];
B2=blkproc(B,[8 8],'P1.*x',mask);
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
imshow(I),figure,imshow(I2)
M=I2-I;
figure,imshow(mat2gray(M))


%图象的相加运算(程序有一定的问题)
I=imread('eight.tif');
figure,imshow(I);
[m,n]=size(I);
N=3;%设定噪声图象的个数
for i=1:N
X=imnoise(I,'gaussian');
figure,imshow(X);
Y=double(X);
J=J+Y/N;
end
figure,imshow(mat2gray(J))


%空域滤波增强
%均值过滤器
I=imread('eight.tif');
J=imnoise(I,'salt & pepper',0.02);%注意&前后要有空格
imshow(I)
figure,imshow(J);
K1=filter2(fspecial('average',3),J)/255;
K1=filter2(fspecial('average',5),J)/255;
K1=filter2(fspecial('average',7),J)/255;
figure,imshow(K1);
figure,imshow(K2);
figure,imshow(K3);


%维纳滤波器
I=imread('eight.tif');
imshow(I)
J=imnoise(I,'gaussian',0,0.005);
imshow(J)
K1=wiener2(J,[5,5]);
figure,imshow(K1)


%中值滤波器(medfilt)
I=imread('eight.tif');
imshow(I)
J=imnoise(I,'salt & pepper',0.02);
figure,imshow(J)
K1=medfilt2(J,[3,3]);
figure,imshow(K1)

%中值滤波器(ordfilt)
I=imread('eight.tif');
imshow(I)
J=imnoise(I,'salt & pepper',0.02);
figure,imshow(J)
K1=ordfilt2(J,5,ones(3,3));
figure,imshow(K1)

%使用稀疏分布的模板实现中值滤波
I=imread('eight.tif');
imshow(I)
J=imnoise(I,'salt & pepper',0.02);
figure,imshow(J)
domain=[0 0 1 0 0;
        0 0 1 0 0;
        1 1 1 1 1;
        0 0 1 0 0;
        0 0 1 0 0];
K1=ordfilt2(J,5,domain);
figure,imshow(K1)


%线性锐化滤波器
I=imread('eight.tif');
h=fspecial('laplacian');
I2=filter2(h,I);
imshow(I);
figure,imshow(I2)

%对比度增强滤波器
I=imread('eight.tif');
imshow(I)
h=fspecial('unsharp',0.5);%参数控制滤波器形状,范围为[0 1],默认值为0.2
I2=filter2(h,I)/255;
figure,imshow(I2)


%几种边缘增强算子的效果进行比较
I1=imread('eight.tif');
figure,imshow(I1)
h1=fspecial('sobel');
I2=filter2(h1,I1);
figure,imshow(I2)

I3=conv2(I1,h1);
figure,imshow(I3)

h2=fspecial('prewitt');
I4=filter2(h2,I1);
figure,imshow(I4)

h3=fspecial('log');
I5=filter2(h3,I1);
figure,imshow(I5)


%低通滤波
I1=imread('eight.tif');
figure,imshow(I1)
I2=imnoise(I1,'salt & pepper');
figure,imshow(I2)
f=double(I2);
g=fft2(f);
g=fftshift(g);
[N1,N2]=size(g);
n=2;
d0=50;
n1=fix(N1/2);
n2=fix(N2/2);
for i=1:N1
    for j=1:N2
     d=sqrt((i-n1)^2+(j-n2)^2);
h=1/(1+0.414*(d/d0)^(2*n));%计算Butterworth低通转换函数
result(i,j)=h*g(i,j);
end
end
result=ifftshift(result);
X2=ifft2(result);
X3=uint8(real(X2));
figure,imshow(X3)



%Butterworth高通滤波器
 I1=imread('eight.tif');
figure,imshow(I1)
f=double(I1);
g=fft2(f);
g=fftshift(g);%转换数据矩阵
[N1,N2]=size(g);
n=2;
d0=5;
n1=fix(N1/2);
n2=fix(N2/2);
for i=1:N1
   for j=1:N2
   d=sqrt((i-n1)^2+(j-n2)^2);
if d==0
   h=0;
else
   h=1/(1+(d0/d)^(2*n));
end
result(i,j)=h*g(i,j);
end
end
result=ifftshift(result);
X2=ifft2(result);
X3=uint8(real(X2));
figure,imshow(X3)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -