MATLAB数字图像处理练习一

一,题目

1.利用MATLAB实现图像的读取、显示、存储等基本操作。
2.对下面的一幅图像(自己生成)分别做旋转,观察原图的傅里叶频谱与旋转后-的傅里叶频谱的对应关系。
MATLAB数字图像处理练习一_第1张图片
3. 利用MATLAB画出一幅图像的直方图,分析该直方图的特点并对原图进行直方图均衡化处理,对比处理前后图像的特点。
4. 卷积定理的应用-----基于模板匹配的目标识别。

二,解答

题目一

%%
%题目一
I=imread('1.jpg');%对该文件夹下的1.jpg文件进行读取,单引号
imshow(I)%对读取的图像I进行显示,先读取再显示
imwrite(I,'G:\数字图像处理\2.jpg')%将图片I保存在 G:\数字图像处理文件夹下并命名为2.jpg

题目二

%%
%原图像与旋转后图像的快速傅里叶变换后的图像
clc%清楚命令窗口内容
clear%清楚变量,1为白色
I=zeros(512);%0为黑色
I(100:412,246:266)=1;%生成题目二中的图片
figure(1)%能够创建一个用来显示图形输出的一个窗口对象
imshow(I)%显示图像I

J=fft2(I);%对图像I进行快速傅里叶变换
H=fftshift(J);%进行频率搬移,将底频信号移至中心,因为有用信号往往为低频信号
H=abs(H);%快速傅里叶变换后有虚部,这里取绝对值
figure(2)%创建另一个窗口
imshow(H,[50,200])%如果不创建,这里的显示会覆盖I,[50,200]为显示范围使显示效果更明显

I1=imrotate(I,45,'crop');%顺时针旋转45度,’crop’是将旋转后的图像修剪为和原图相同的尺寸。默认的话,是采用‘nearest’插值,且不对图像修剪。
figure(3)
imshow(I1);
J1=fft2(I1);
H1=fftshift(J1);
H1=abs(H1);
figure(4);
imshow(H1,[50,200])

MATLAB数字图像处理练习一_第2张图片

题目三

%%
%直方图与直方图均衡化处理
clc
clear
I=imread('R-C.jpg');%对该文件夹下的R-C.jpg图片进行读取
figure(1)
imshow(I)

figure(2)
imhist(I)%生成图片的直方图

J=histeq(I);%对图片I进行均衡化处理
figure(3)
imshow(J)

figure(4)
imhist(J)%生成经均衡化处理后图片的直方图

MATLAB数字图像处理练习一_第3张图片

题目四

参考:https://wenku.baidu.com/view/ff81f93743323968011c927b.html?qq-pf-to=pcqq.c2c

%%
%模板匹配
clc
clear
I1=imread('模板.png');%I1是包含rgb三通道,所以是三维的
I1=rgb2gray(I1);%这里因为图片只有黑白,故进行灰度化处理,转化为二维,即进过rgb2gray后图像由彩色变为灰色
I1=imresize(I1,[194,255]);%调整I1图片大小为[194,255],使其与I2图像大小保持一致

I2=imread('匹配.png');
I2=rgb2gray(I2);

I1=im2bw(I1);%二值化处理,即只有0或1,便于后续图像处理
I2=im2bw(I2);

figure(1)
subplot(121);imshow(I1)
subplot(122);imshow(I2)

I2=rot90(I2,2);%卷积操作时需旋转180度
J1=fft2(I1);
J2=fft2(I2);
H1=fftshift(J1);
H2=fftshift(J2);
figure(2)
subplot(121);imshow(abs(H1),[50,100])
subplot(122);imshow(abs(H2),[50,100])


L1=J1.*J2;
M=ifft2(L1);
M1=abs(fftshift(rot90(M,2)));
figure(3)
mesh(abs(M1),[50,150])

max(M1(:))
figure(3)
imshow(M1>max(M1(:))- 200)

MATLAB数字图像处理练习一_第4张图片

三,一些小知识点

01

0代表黑色,1或255代表白色(1时为double类型,255时为uint8类型)

%小知识点
clc
clear
I=ones(255,255);%I为double类型
I1=255*I;%I1为double类型
I2=uint8(I1);%I1为uint8类型

I3=100*I;%I3为double类型
I4=uint8(I3);%I4为uint8类型
figure(1)
subplot(221);imshow(I1);title('I1')
subplot(222);imshow(I2);title('I2')
subplot(223);imshow(I3);title('I3')
subplot(224);imshow(I4);title('I4')

MATLAB数字图像处理练习一_第5张图片
I1为什么为白色?因为对于double类型,用imshow进行显示时0为黑色1为白色,即超过1均为白色,故I3也为白色

I2为什么为白色?因为对于uint8类型,用imshow进行显示时0为黑色,255为白色,即超过255均为白色

I3为什么为白色?
I4为什么为白色?

你可能感兴趣的:(matlab,图像处理,开发语言)