数字图像处理 实验1

数字图像处理 实验1

基本实验一 利用反转变化实现图像增强

实验代码:

f = imread('breast.tif');
g = 255-f;
subplot(121);
imshow(f);
subplot(122)
imshow(g)

实验现象图
1

基本实验2 利用matlab提供的直方图修正函数对图像做直方图均衡化处理

实验代码

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

实验现象图
2

基本实验3 利用基本filter2函数和fspecial函数来实现图像平滑滤波效果,对一幅图像进行不同大小 模板的均值滤波

实验代码

I = imread('eight.tif');
J = imnoise(I,'salt & pepper',0.02);%加椒盐噪声
subplot(121);
imshow(I);
title('原始图像');
subplot(122);
imshow(J);
title('噪声图像');
IM1=filter2(fspecial('average',3),J)/255;%3*3均值滤波
IM2=filter2(fspecial('average',5),J)/255;%5*5均值滤波
IM3=filter2(fspecial('average',7),J)/255;%7*7均值滤波
IM4=filter2(fspecial('average',9),J)/255;%9*9均值滤波
figure;
subplot(221);imshow(IM1);title('3*3模板均值滤波');
subplot(222);imshow(IM2);title('5*5模板均值滤波');
subplot(223);imshow(IM3);title('7*7模板均值滤波');
subplot(224);imshow(IM4);title('9*9模板均值滤波');

实验现象图
3
思考题题目:
4.1 利用matlab对数变换实现个人照片的频谱图像的显示,并与原频谱进行对比。
4.2 利用matlab编程实现图像直方图均衡化算法。
4.2 利用matlab编程实现基于线性空间滤波的低通滤波器。

思考题1:

选取实验二中的图,可以随意,注意图片应该同新建的脚本文件在同一个文件夹内,图片格式不限,jpg,bmp等图片格式都可以。
2
左图为实验2原图,右图为对数变换后

程序源码:

I = imread('tire.tif');
tmp=double(I)+1;
Y=uint8(log(tmp))-1;
S=im2uint8(mat2gray(Y));
J = histeq(S);
subplot(221); imshow(I);
subplot(222); imshow(J);
subplot(223); imhist(I,64);
subplot(224); imhist(J,64);

思考题2:

直方图程序过程如下如下,这里我们还是选取实验2中的图像用来输出验证
同时注意像素点在[0,255]之间
3
程序源码如下:

I = imread('tire.tif');
subplot(121);
imshow(I);
title('灰度图·');

[R, C] = size(I);

% 统计每个像素值出现次数
cnt = zeros(1, 256);
for i = 1 : R
    for j = 1 : C
        cnt(1, I(i, j) + 1) = cnt(1, I(i, j) + 1) + 1;
    end
end

f = zeros(1, 256);
f = double(f); cnt = double(cnt);

%统计每个像素出现概率,得到直方图
for i = 1 : 256
    f(1, i) = cnt(1, i) / (R * C);
end

% 求累计概率,得到累计直方图
for i = 2 : 256
    f(1, i) = f(1, i - 1) + f(1, i);
end

% 用f数组实现像素值[0,255]的映射
for i = 1 : 256
    f(1, i) = f(1, i) * 255;
end

% 每个像素点映射
I = double(I);
for i = 1 : R
    for j = 1 : C
        I(i, j) = f(1, I(i, j) + 1);
    end
end

% 输出
I = uint8(I);
subplot(122);
imshow(I);
title('直方图均衡化');

实验输出比较:
4
左图为实验二matlab自带函数实现,右图为程序实现,效果可以;

思考题3

线性空间的低通滤波,这里低通滤波的类型不确定,拟定为高斯低通滤波
程序源码如下:

f = imread('tire.tif');
f = mat2gray(f,[0 255]);

[M,N] = size(f);
P = 2*M;
Q = 2*N;
fc = zeros(M,N);

for x = 1:1:M
    for y = 1:1:N
        fc(x,y) = f(x,y) * (-1)^(x+y);
    end
end

F = fft2(fc,P,Q);

H_1 = zeros(P,Q);
H_2 = zeros(P,Q);

for x = (-P/2):1:(P/2)-1
     for y = (-Q/2):1:(Q/2)-1
        D = (x^2 + y^2)^(0.5);
        D_0 = 60;
        H_1(x+(P/2)+1,y+(Q/2)+1) = exp(-(D*D)/(2*D_0*D_0));  
        D_0 = 160;
        H_2(x+(P/2)+1,y+(Q/2)+1) = exp(-(D*D)/(2*D_0*D_0));
     end
end

G_1 = H_1 .* F;
G_2 = H_2 .* F;

g_1 = real(ifft2(G_1));
g_1 = g_1(1:1:M,1:1:N);

g_2 = real(ifft2(G_2));
g_2 = g_2(1:1:M,1:1:N);        

for x = 1:1:M
    for y = 1:1:N
        g_1(x,y) = g_1(x,y) * (-1)^(x+y);
        g_2(x,y) = g_2(x,y) * (-1)^(x+y);
    end
end


%% -----显示-------
figure();
subplot(1,2,1);
imshow(f,[0 1]);
xlabel('a).原始图像');

subplot(1,2,2);
imshow(H_1,[0 1]);
xlabel('b).高斯低通滤波(D_{0}=60)');

实验得到图像:
5
参考地址1: https://blog.csdn.net/qq_29721419/article/details/53142320
参考地址2:https://www.cnblogs.com/zhaopengcheng/p/5386595.html

猜你喜欢

转载自blog.csdn.net/klaus_x/article/details/80458625