数字图像处理实验——图像增强

一、实验目的与要求

1.掌握图像空域点处理增强方法,包括图像求反,线性灰度变换,以及直方图均衡化方法;

2.熟练掌握空域滤波增强方法,包括平滑滤波器及锐化滤波器。

二、实验内容及步骤

1.图像的求反、线性灰度变换、直方图均衡化:

(1)使用imread()函数读取一副图像,名为lena.bmp;

(2)实现图像求反运算(t=L−1−s);

clc;clear;close all; 
img1 = imread("lena.bmp");
img2 = imcomplement(img1);

subplot(1,2,1);imshow(img1);title('原始图像');
subplot(1,2,2);imshow(img2);title('求反图像');
  1. 线性灰度变换(小于30的灰度值不变,将30~150的灰度值拉伸到30~200,同时压缩150~255的灰度值到200与255之间);

clc;clear;close all; 
img1 = imread("lena.bmp");
[M,N]=size(img1);
figure;
subplot(1,2,1);imshow(img1);title('原始图像');
for i=1:M
    for j=1:N
        if img1(i,j)<30
            img1(i,j)=img1(i,j);
        elseif img1(i,j)<150
            img1(i,j)=(200-30)/(150-30)*(img1(i,j)-30)+30;
        else 
            img1(i,j)=(255-200)/(255-150)*(img1(i,j)-150)+200;
        end
    end
end
subplot(1,2,2);imshow(img1);title('线性灰度变换图像');
  1. 实现直方图均衡化(imhist( ) :显示图像直方图; histeq( ):实现对输入图像的直方图均衡化)

clc;clear;close all; 
img1 = imread("lena.bmp");
img2 = histeq(img1);
figure;
subplot(1,2,1);imshow(img1);title('原始图像');
subplot(1,2,2);imshow(img2);title('均衡化后图像');
figure;
subplot(1,2,1);imhist(img1);title('图像直方图');
subplot(1,2,2);imhist(img2);title('直方图均衡化');

2. 平滑滤波器:

(1)使用imread()函数读入图像lena.bmp;

(2)利用imnoise 命令在图像lena.bmp上添加椒盐噪声;

clc;clear;close all; 
img1 = imread("lena.bmp");
subplot(1,2,1),imshow(img1),title('原始图像');
img2=imnoise(img1,'salt & pepper',0.02);
subplot(1,2,2),imshow(img2),title('加入噪声密度:0.02的椒盐噪声');
  1. 进行3*3模板平滑滤波以及5*5模板平滑滤波;

clc;clear;close all; 
img1 = imread("lena.bmp");
img2=imnoise(img1,'salt & pepper',0.02);
img3=filter2(fspecial('average',3),img2)/255; 
img4=filter2(fspecial('average',5),img2)/255; 
subplot(1,3,1),imshow(img2),title('0.02的椒盐噪声图像');
subplot(1,3,2),imshow(img3),title('3*3模板平滑滤波');
subplot(1,3,3),imshow(img4),title('5*5模板平滑滤波');

3. 锐化滤波器:

(1)使用imread()函数读入图像lena.bmp;

(2)采用3×3的拉普拉斯算子w = [ 1, 1, 1; 1 – 8 1; 1, 1, 1]滤波;

(3)联合使用figure, subplot(), imshow()函数显示原始图像以及锐化滤波的效果图。

clc;clear;close all; 
img1 = imread("lena.bmp");
F = im2double(img1);
[m,n]=size(F); 
G=zeros(m,n); 
w=[ 1, 1, 1; 1  -8 1; 1, 1, 1];
for x=1:m     
    for y=1:n         
        if (x==1||y==1||x==m||y==n)            
            G(x,y)=F(x,y);         
        else
            G(x,y)=w(1,1)*F(x-1,y-1)+w(1,2)*F(x-1,y)+w(1,3)*F(x-1,y+1)...                 
                +w(2,1)*F(x,y-1)+w(2,2)*F(x,y)+w(2,3)*F(x,y+1)...                 
                +w(3,1)*F(x+1,y+1)+w(3,2)*F(x+1,y)+w(3,3)*F(x+1,y+1);                     
        end
    end
end
F=im2uint8(F);
G=im2uint8(G);
figure 
subplot(121) 
imshow(F) 
title('原始图像'); 
subplot(122) 
imshow(G); 
title('拉普拉斯算子处理后的图像');

猜你喜欢

转载自blog.csdn.net/Recursions/article/details/128562286