数字图像处理实验

发布时间:2023-09-30 08:00

数图实验

2021-05-23

实验一 图像变换

实验目的

1:了解二维fourier变换的原理
2:掌握二维fourier变换的性质
3:掌握离散余弦变换的原理

实验内容

1.绘制一个二值,并将其傅里叶函数可视化**。**

close all;
clear;
f = zeros(40, 40);
f(10:30, 10:30) = 1;
subplot(1, 3, 1);
imshow(f);
F = fft2(f);
subplot(1, 3, 2);
imshow(F);
D = log(1 + abs(F));
subplot(1, 3, 3);
imshow(D);

\"数字图像处理实验_第1张图片\"

2.对给定的一副图像saturn2.tif进行傅里叶变换

load imdemos saturn2; % 系统的
subplot(1, 2, 1);
imshow(saturn2);
I = fftshift(fft2(saturn2));
subplot(1, 2, 2);
imshow(log(abs(I)), []), colormap(jet(64)), colorbar

\"数字图像处理实验_第2张图片\"

3.在图像text,tif中定位字母a

w = imread(\'text.png\');
a = w(33:45, 88:98);
figure;
imshow(w);
figure;
imshow(a);
C = real(ifft2(fft2(w) .* fft2(rot90(a, 2), 256, 256)));
figure;
imshow(C, []);
max(C(:));
thresh = 60;
figure;
imshow(C > thresh);

\"数字图像处理实验_第3张图片\"

4.对一幅图进行离散余弦变换和反变换

RGB = imread(\'autumn.png\');
figure(1), imshow(RGB);
I = rgb2gray(RGB);
figure(2), imshow(I);
J = dct2(I);
figure(3), imshow(log(abs(J)), []), colormap(jet(64)), colorbar;
J(abs(J) < 10) = 0;
K = idct2(J) / 255;
figure(4), imshow(K);

\"数字图像处理实验_第4张图片\"

思考题

1.编写M程序文件验证二维傅里叶变换的平移性,旋转性

clear all;
image1 = zeros(128, 128);
image1(30:93, 52:67) = 1;
subplot(2, 2, 1);
imshow(image1, []);
title(\'原始图像\');
image2 = abs(fft2(image1));
subplot(2, 2, 2);
imshow(log10(1 + image2), []);
title(\'频谱\');
image3 = image1;
i = size(image1, 1);
j = size(image2, 2);
for k = 1:i
    for r = 1:j
        image3(k, r) = (-1)^(k + r) .* image1(k, r);
    end
end
image4 = abs(fft2(image3));
subplot(2, 2, 3);
imshow(image3, [])
title(\'中心化后的图像\');
subplot(2, 2, 4);
imshow(log10(1 + image4), []);
title(\'中心化后的频谱\');
image5 = zeros(i, j);
i = round(i / 2)
j = round(j / 2)
for u = -i:i
    for v = -j:j
        m = cos(pi / 4) * u - sin(pi / 4) * v;
        n = sin(pi / 4) * u + cos(pi / 4) * v;
        m = round(m);
        n = round(n);
        if abs(m) < i && abs(n) < j
            image5(u + i + 1, v + j + 1) = image1(m + i, n + j);
        end
    end
end
figure
subplot(2, 1, 1);
imshow(image5, []);
image6 = abs(fft2(image5));
subplot(2, 1, 2);
imshow(log10(1 + image6), []);

\"数字图像处理实验_第5张图片\"

实验二 图像的空间变换增强

实验目的

1:掌握图像的直方图均衡化的原理与应用
2:掌握灰度变换的原理与应用
3:掌握伪彩色图像处理增强的方法

实验内容

1.MATLAB提供的直方图修正函数

I = imread(\'pout.tif\');
subplot(221);
imshow(I);
subplot(222);
imhist(I);
J = histeq(I, 64);
subplot(223);
imshow(J);
subplot(224);
imhist(J);

\"数字图像处理实验_第6张图片\"

2.通过灰度变换调整图像对比度

f = imread(\'fly.jpg\');
g1 = imadjust(f, [0 1], [1, 0], 1);
g2 = imadjust(f, [0.5 0.75], [0, 1], 1);
g3 = imadjust(f, [], [], 2);
subplot(221);
imshow(f);
subplot(222);
imshow(g1);
subplot(223);
imshow(g2);
subplot(224);
imshow(g3);

\"数字图像处理实验_第7张图片\"

思考题

1.对pout.tif的灰度图像,进行如图所示的分段线性变换处理

f = imread(\'pout.tif\');

[row, col] = size(f);
g = zeros(row, col);

for x = 1:row
    for y = 1:col
        if (f(x, y) < 32)
            g(x, y) = f(x, y) * 2;
        elseif (f(x, y) > 192)
            g(x, y) = f(x, y) * 1.5 - 128;
        else
            g(x, y) = f(x, y) * 0.6 + 44.8;
        end
    end
end
subplot(1, 2, 1);
imshow(f);
subplot(1, 2, 2);
imshow(g, []);

\"数字图像处理实验_第8张图片\"

2.分别对图像cameraman.tif进行求反和对数变换处理

I = imread(\'cameraman.tif\');
subplot(131);
imshow(I);
I = double(I);
[M, N] = size(I);
for i = 1:M
    for j = 1:N
        J(i, j) = 255 - I(i, j);
    end
end
subplot(132);
imshow(mat2gray(J));
for i = 1:M
    for j = 1:N
        H(i, j) = log(I(i, j) + 1);
    end
end
subplot(133);
imshow(mat2gray(H));

\"数字图像处理实验_第9张图片\"

实验三 图像的滤波增强处理

实验目的

1.了解空域增强的基本原理
2.掌握平滑滤波器和锐化滤波器的使用
3.掌握图像中值滤波增强的结果

实验内容

1.对一副图像进行不同大小的模板的均值滤波,并比较结果

I = imread(\'eight.tif\');
J = imnoise(I, \'salt & pepper\', 0.02);
subplot(2, 2, 1);
imshow(J);
title(\'原始图像\');
K1 = medfilt2(J, [3 3]);
K2 = medfilt2(J, [5 5]);
K3 = medfilt2(J, [7 7]);
subplot(2, 2, 2);
imshow(K1);
title(\'3*3模板均值滤波\');
subplot(2, 2, 3);
imshow(K2);
title(\'5*5模板均值滤波\');
subplot(2, 2, 4);
imshow(K3);
title(\'7*7模板均值滤波\');

\"数字图像处理实验_第10张图片\"

2.对一副图像实现不同模板的中值滤波,并比较结果

I = imread(\'eight.tif\');
J = imnoise(I, \'salt & pepper\', 0.02);
imshow(I);
title(\'原始图像\');
subplot(2, 2, 1);
imshow(J);
title(\'噪声图像\');
k1 = medfilt2(J, [3 3]);
k2 = medfilt2(J, [5 5]);
k3 = medfilt2(J, [7 7]);
subplot(2, 2, 2); imshow(k1);
title(\'3*3模板中值滤波\');
subplot(2, 2, 3); imshow(k1);
title(\'5*5模板中值滤波\');
subplot(2, 2, 4); imshow(k1);
title(\'7*7模板中值滤波\');

3.使用filter2函数和fspecial函数来实现边缘锐化处理

f = imread(\'moon.tif\');
w4 = fspecial(\'laplacian\', 0);
w8 = [1 1 1; 1 -8 1; 1 1 1];
g4 = imfilter(f, w4, \'replicate\');
g8 = imfilter(f, w8, \'replicate\');
G4 = f - g4;
G8 = f - g8;
subplot(1, 3, 1); imshow(f);
subplot(1, 3, 2); imshow(G4);
subplot(1, 3, 3); imshow(G8);

\"数字图像处理实验_第11张图片\"

4.用sobel算子prewit算子log算子对图进行锐化处理

I = imread(\'cameraman.tif\');
k1 = fspecial(\'sobel\');
S = imfilter(I, k1, \'replicate\');
k2 = fspecial(\'prewitt\');
P = imfilter(I, k2, \'replicate\');
k3 = fspecial(\'log\');
L = imfilter(I, k3, \'replicate\');
subplot(2, 2, 1); imshow(I); title(\'原图\');
subplot(2, 2, 2); imshow(S); title(\'sobel算子\');
subplot(2, 2, 3); imshow(P); title(\'prewitt算子\');
subplot(2, 2, 4); imshow(L); title(\'log算子\');

\"数字图像处理实验_第12张图片\"

5.对一副图像加入椒盐噪声后,实现butterworth低通滤波

I1 = imread(\'saturn.png\');
subplot(2, 2, 1);
imshow(I1);
title(\'原始图像\');
I2 = imnoise(I1, \'salt & pepper\');
subplot(2, 2, 2);
imshow(I2);
title(\'噪声图像\');
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 = 2:N2
        d = sqrt((i - n1)^2 + (j - n2)^2);
        h = 1 / (1 + 0.414 * (d / d0)^(2 * n)); %butterworth
        result1(i, j) = h * g(i, j);
        if (g(i, j) > 50)
            result2(i, j) = 0;
        else
            result2(i, j) = g(i, j);
        end
    end
end
result1 = ifftshift(result1);
result2 = ifftshift(result2);
X2 = ifft2(result1);
X3 = uint8(real(X2));
subplot(2, 2, 3);
imshow(X3); title(\'butterworth滤波图像\');
X4 = ifft2(result2);

X5 = uint8(real(X4));
subplot(2, 2, 4);
imshow(uint8(X5)); title(\'理想低通滤波图像\');

\"数字图像处理实验_第13张图片\"

6.对一副图像moon.tif实现butterworth高通滤波

I1 = imread(\'moon.tif\'); f = double(I1);
subplot(1, 2, 1); imshow(I1); title(\'原始图像\');
g = fftshift(fft2(f));
[N1, N2] = size(g);
n = 2;
d0 = 50;
n1 = fix(N1 / 2);
n2 = fix(N2 / 2);
for i = 1:N1
    for j = 2:N2
        d = sqrt((i - n1)^2 + (j - n2)^2);
        h = 1 - 1 / (1 + 0.414 * (d / d0)^(2 * n)); %butterworth
        result1(i, j) = h * g(i, j);
    end
end
result1 = ifftshift(result1);
X2 = ifft2(result1);
X3 = uint8(real(X2));
subplot(1, 2, 2);
imshow(X3); title(\'butterworth高通滤波图像\');

\"数字图像处理实验_第14张图片\"

思考题

1.用合适的方法分别对图A所示的花粉图像和图B所示的电路板图像进行增强处理。

I = imread(\'pollen.tif\');
subplot(1, 2, 1);
imshow(I);
title(\'原始图像\');
J = histeq(I);
subplot(1, 2, 2); imshow(J);
title(\'用直方图均衡化增强后\');

\"数字图像处理实验_第15张图片\"

clear
I = imread(\'board.tif\');
J = imnoise(I, \'salt & pepper\', 0.2);
subplot(1, 2, 1);
imshow(J);
title(\'原始图像\');
k1 = medfilt2(J, [3 3]);
subplot(1, 2, 2); imshow(k1);
title(\'3*3模板中值滤波\');

2.已知一同态滤波器的传输特性,该滤波器的传递函数,用该滤波器对图像进行处理

I = imread(\'eight.tif\');
subplot(121);
imshow(I);
title(\'原始图像\');
f = double(I);
g = fft2(f);
g = fftshift(g);
[N1 N2] = size(g);
d0 = 0.25;
c = 10;
n1 = fix(N1 / 2);
n2 = fix(N2 / 2);
for i = 1:N1
    for j = 2:N2
        d = sqrt((i - n1)^2 + (j - n2)^2);
        h = 1.75 * (1 - exp(-2 * (d^2 / d0^2))) + 0.25;
        result(i, j) = h * g(i, j);
    end
end
result = ifftshift(result);
X2 = ifft2(result);
X3 = uint8(real(X2));
subplot(122);
imshow(X3);
title(\'滤波后图像\');

\"数字图像处理实验_第16张图片\"

实验四 图像复原处理技术

实验目的

1.了解图像降质退化的原因
2.理解反向滤波图像复原原理
3.理解维纳滤波图像复原原理

实验内容

1.产生一模糊图像,采用维纳滤波图像复原的方法对图像进行处理

d = 15;
h = zeros(2 * d + 1, 2 * d + 1);
h(d + 1, 1:2 * d + 1) = 1 / (2 * d);
f = imread(\'lena.tif\');
[m, n] = size(f);
fe = zeros(m + 2 * d, n + 2 * d);
fe(1:m, 1:n) = f;
he = zeros(m + 2 * d, n + 2 * d);
he(1:2 * d + 1, 1:2 * d + 1) = h;
F = fft2(fe);
H = fft2(he);
ns = 5 * rand(m + 2 * d, n + 2 * d);
g = ifft2(F .* H) + ns;
G = fft2(g);
K = 0;
F_est = ((H.^2) ./ (H.^2 + K)) .* G ./ H;
f_est = real(ifft2(F_est));
imshow(f); title(\'原图\');
figure;
imshow(g(d + 1:m + d, d + 1:n + d), [min(g(:)) max(g(:))]); title(\'模糊图\');
figure;
imshow(f_est(1:m, 1:n), [min(f_est(:)) max(f_est(:))]);
title(\'复原图\');

\"数字图像处理实验_第17张图片\"

2.逆滤波与维纳滤波的比较

F = checkerboard(8);
subplot(1, 5, 1); imshow(F, []); title(\'a\');
PSF = fspecial(\'motion\', 7, 45);
MF = imfilter(F, PSF, \'circular\');
noise = imnoise(zeros(size(F)), \'gaussian\', 0, 0.01);
MFN = MF + noise;
subplot(1, 5, 2); imshow(MFN, []); title(\'b\');
NSR = sum(noise(:).^2) / sum(MFN(:).^2);
subplot(1, 5, 3);
imshow(deconvwnr(MFN, PSF), []); title(\'c\');
subplot(1, 5, 4);
imshow(deconvwnr(MFN, PSF, NSR), []); title(\'d\');
Sn = abs(fft2(noise)).^2;
Sf = abs(fft2(F)).^2;
NCORR = fftshift(real(ifft2(Sn)));
ICORR = fftshift(real(ifft2(Sf)));
subplot(1, 5, 5);
imshow(deconvwnr(MFN, PSF, NCORR, ICORR), []); title(\'e\');

\"数字图像处理实验_第18张图片\"

思考题

设计一个二维线形运动滤波器PSF对图像文件进行运动模糊处理,然后分别用逆滤波与维纳滤波的方法进行复原

F = imread(\'cameraman.tif\');
subplot(2, 2, 1); imshow(F, []); title(\'原图\');
PSF = fspecial(\'motion\', 6, 45);
MFN = imfilter(F, PSF);
subplot(2, 2, 2);
imshow(MFN, []); title(\'模糊图像\');
subplot(2, 2, 3);
imshow(deconvwnr(MFN, PSF), []); title(\'逆滤波复原\');
NSR = 0.1;
subplot(2, 2, 4);
imshow(deconvwnr(MFN, PSF, NSR), []); title(\'维纳滤波复原\');

\"数字图像处理实验_第19张图片\"

实验五 图像分割

实验目的

1.掌握边缘提取的原理
2.掌握边缘提取理论的离散化实验过程
3.掌握几种常用边缘算子的提取方法

实验内容

1.调用sobel,prewitt,robert,laplacian,过零点方法和candy方法等边缘检测算子,提取一副灰度图像的边缘,并比较不同算子的检测结果

I = imread(\'moon.tif\');
BW1 = edge(I, \'sobel\');
BW2 = edge(I, \'prewitt\');
% BW3 = edge(I, \'robert\');
BW4 = edge(I, \'log\');
BW5 = edge(I, \'zerocross\');
BW6 = edge(I, \'canny\');
subplot(2, 3, 1); imshow(BW1); title(\'sobel\');
subplot(2, 3, 2); imshow(BW2); title(\'prewitt\');
% subplot(2, 3, 3); imshow(BW3); title(\'robert\');
subplot(2, 3, 4); imshow(BW4); title(\'log\');
subplot(2, 3, 5); imshow(BW5); title(\'zerocross\');
subplot(2, 3, 6); imshow(BW6); title(\'canny\');

\"数字图像处理实验_第20张图片\"

2.用全局阈值法对图像进行分割处理

f = imread(\'lena.tif\');
subplot(1, 2, 1); imshow(f); title(\'原图\');
T = 0.5 * (double(min(f(:))) + double(max(f(:))));
done = 0;
while ~done
    g = f >= T;
    Tnext = 0.5 * (mean(f(g)) + mean(f(~g)));
    done = abs(T - Tnext) < 0.5;
    T = Tnext;
end
T = T / 256
f = im2bw(f, T);
subplot(1, 2, 2); imshow(f);
title(\'全局阈值法分割\');

\"数字图像处理实验_第21张图片\"

3.用otsu法对图像进行分割处理

I = imread(\'lena.tif\');
subplot(1, 2, 1); imshow(I); title(\'原图\');
T = graythresh(I)
B = im2bw(I, T);
subplot(1, 2, 2); imshow(B);
title(\'Ostu法分割\');

\"数字图像处理实验_第22张图片\"

思考题

1.统计图像灰度直方图,选取合适阈值对一副图像进行分割

I1 = imread(\'cameraman.tif\');
subplot(221);
imshow(I1);
title(\'原始图像\');
[m, n] = size(I1);
GP = zeros(1, 256);
for k = 0:255
    GP(k + 1) = length(find(I1 == k)) / (m * n);
end
subplot(222), bar(0:255, GP, \'g\');
title(\'灰度直方图\');
xlabel(\'灰度值\');
ylabel(\'出现概率\');
I2 = im2bw(I1, 100/255);
subplot(223), imshow(I2);
title(\'阈值100的分割图像\');
I3 = im2bw(I1, 150/255);
subplot(224), imshow(I3);
title(\'阈值150的分割图像\');

\"数字图像处理实验_第23张图片\"

2.编写区域生长分割图像的M程序

A = imread(\'cameraman.tif\');
seed = [100, 220];
thresh = 15;
A = imadjust(A, [min(min(double(A))) / 255, max(max(double(A))) / 255], []);
A = double(A);
B = A;
[r, c] = size(B);
n = r * c;
pixel_seed = A(seed(1), seed(2));
q = [seed(1) seed(2)];
top = 1;
M = zeros(r, c);
M(seed(1), seed(2)) = 1;
count = 1;
while top ~= 0
    r1 = q(1, 1);
    c1 = q(1, 2);
    p = A(r1, c1);
    dge = 0;
    for i = -1:1
        for j = -1:1
            if r1 + i <= r & r1 + i > 0 & c1 + j <= c & c1 + j > 0
                if abs(A(r1 + i, c1 + j) - p) <= thresh & M(r1 + i, c1 + j) ~= 1
                    top = top + 1;
                    q(top, :) = [r1 + i c1 + j];
                    M(r1 + i, c1 + j) = 1;
                    count = count + 1;
                    B(r1 + i, c1 + j) = 1;
                end
                if M(r1 + i, c1 + j) == 0;
                    dge = 1;
                end
            else
                dge = 1;
            end
        end
    end
    if dge ~= 1
        B(r1, c1) = A(seed(1), seed(2));
    end
    if count >= n
        top = 1;
    end
    q = q(2:top, :);
    top = top - 1;
end
subplot(1, 2, 1), imshow(A, []); title(\'原始图像\');
subplot(1, 2, 2), imshow(B, []); title(\'区域生长图像\')

\"数字图像处理实验_第24张图片\"

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号