数字图像的实验数据(新的百度账号可以获得10个财富值)
实验一 图像的基本操作
一(实验目的
1(了解图像的数据结构,能够显示不同类型的图像;
2(通过实验完成简单的图像操作;
3(通过实验完成图像直方图的显示;
4(熟悉matlab图像处理工具箱及直方图
数的使用;
5(理解和掌握直方图原理和方法;
二(实验设备
1.PC机一台;2.软件matlab。
三(实验步骤
1. 启动matlab
双击桌面matlab图标启动matlab环境;
2. 在matlab命令窗口中输入相应程序。
写程序时,首先读取图像,一般调用matlab自带
的图像,如:cameraman图像;再调用相应的直方图函数,设置参数;最后输出处理后的图
像;
3(浏览源程序并理解含义;
4(运行,观察显示结果
四(参考程序
I=imread('pout.tif');
imshow(I);
imhist(I);
:该程序是实现图像pout的读取和它的直方图的显示,从图像和直方图不难看出,
该图像效果不是很好,一副好的灰度图像,它的直方图灰度级是均匀分布在0~~255这
个范围的。
I=imread('pout.tif'); %imshow(I);
%imhist(I);
J=imcomplement(I); imshow(J);
imhist(J);
分析:这段程序是实现图像的反相,反相后的图像与原图像,对应坐标的灰度级之和为255。
I=imread('pout.tif'); %imshow(I);
%imhist(I);
%J=imcomplement(I); %imshow(J);
%imhist(J);
K=imrotate(I,120); imshow(K);
分析:该程序实现图像的旋转,在本例中图像旋转120度
I=imread('pout.tif');
imshow(I,[10,205]);
I=imread('blood1.tif'); Imshow(I);
size(I);
I=imread('blood1.tif'); imshow(I);
title('原始图');
%imhist(I);
%title('原始直方图')
K=imcomplement(I); %imhist(K);
%title('新的直方图');
imshow(K);
title('新的图像');
I=imread('blood1.tif'); K=double(I)/256+100/256; imshow(K);
figure,imshow(I);
I=imread('blood1.tif');
%imshow(I);
%title('原图');
imhist(I);
title('原直方图');
a=max(max(I));
b=min(min(I));
I=double(I);
[m,n]=size(I);
J=double(J);
%K=I(100,120);%取第一百行第一百二十列 for i=1:m;
for j=1:n;
J(i,j)=(122/(255-46))*I(i,j)/256+0.2;
end
end
%figure,imshow(J); %title('新图');
figure,imhist(J); title('新直方图');
Q=histeq(J);
%figure,imshow(Q); %title('均衡化的图象');
figure,imhist(Q); title('均衡化后的直方图');
图象增强
I=imread('blood1.tif'); K=imnoise(I,'salt & pepper',0.01); imshow(K);
title('加椒盐噪声');
figure,imshow(I);
title('没有加噪声');
I=imread('blood1.tif'); K=imnoise(I,'gaussian',0.1,0.2);
imshow(K);
title('加高斯噪声');
figure,imshow(I);
title('没有加噪声');
%imhist(I);
%title('没有加噪声');
%figure,imhist(K);
%title('加高斯噪声');
I=imread('tire.tif'); imshow(I);
title('原图');
K=imnoise(I,'salt & pepper',0.01);
J=[-1 -1 -1;
-1 9 -1
-1 -1 -1];
L=imfilter(I,J);
figure,imshow(L); title('锐化后的图形');
I=imread('tire.tif'); imshow(I);
title('原图');
K=imnoise(I,'salt & pepper',0.01);
J=[0 -1 0;
-1 5 -1
0 -1 0];
L=imfilter(I,J); figure,imshow(L); title('锐化后的图形');
%边缘检测
%sobel和laplacian算子
I=imread('rice.tif'); %imshow(I);
%title('原始图');
imhist(I);
title('原始直方图');
%K=fspecial('laplacian',0.7);
%K1=filter2(K,I)/100; %figure,imshow(K1); %title('laplacian变换后的图');
%figure,imhist(K1); %title('laplacian变换后直方图');
L=fspecial('sobel'); L1=filter2(L,I)/200; %figure,imshow(L1); %title('sobel变换后的图');
figure,imhist(L1); title('sobel变换后的直方图');
%边缘检测
%sobel和laplacian算子
I=imread('rice.tif'); %imshow(I);
%title('原始图');
imhist(I);
title('原始直方图');
L=fspecial('prewitt'); L1=filter2(L,I)/255; %figure,imshow(L1); %title('prewitt变换后的图');
figure,imhist(L1); title('prewitt变换后的直方图');
I=imread('rice.tif'); h=[1,0;0,-1];
size(I);
h1=[0,1;-1,0];
J1=filter2(h,I); J2=filter2(h1,I); K1=double(J1);
K2=double(J2);
M=abs(K1) +abs(K2); for i=1:256
for j=1:256
if M(i,j) >= 30
M(i,j) = 255; %二值化
else M(i,j) = 0;
end
end
end
J=uint8(M);
%imshow(I);
%title('原始图');
imhist(I);
title('原始直方图');
%figure,imshow(J); %title('Robert变换后的图');
figure,imhist(J); title('Robert变换后的直方图');
I=imread('rice.tif'); h=[-1,0,1;-1,0,1;-1,0,1]; size(I);
h1=[1,1,1;0,0,0;-1,-1,-1]; J1=filter2(h,I);
J2=filter2(h1,I);
K1=double(J1);
K2=double(J2);
M=abs(K1+K2);
for i=1:256
for j=1:256
if M(i,j) >= 30
M(i,j) = 255;
else M(i,j) = 0;
end
end
end
J=uint8(M);
imshow(I);
title('原始图');
figure,imshow(J);
title('prewitt变换后的图');
imhist(I);
title('原始直方图');
figure,imhist(J);
title('prewitt变换后的直方图');
I=imread('spine.tif'); h=[-1,0,1;-1,0,1;-1,0,1]; size(I);
h1=[1,1,1;0,0,0;-1,-1,-1]; J1=filter2(h,I);
J2=filter2(h1,I);
K1=double(J1);
K2=double(J2);
M=abs(K1+K2);
for i=1:367
for j=1:490
if M(i,j) >= 20
M(i,j) = 255;
else M(i,j) = 0;
end
end
end
J=uint8(M);
subplot(2,2,1);imshow(I);
title('原始图');
subplot(2,2,2);imshow(J); title('prewitt变换后的图');
subplot(2,2,3);imhist(I); title('原始直方图');
subplot(2,2,4);imhist(J); title('prewitt变换后的直方图');
B=imread('spine.tif'); I=histeq(B);
h=[-1,0,1;-1,0,1;-1,0,1]; size(I);
h1=[1,1,1;0,0,0;-1,-1,-1]; J1=filter2(h,I);
J2=filter2(h1,I);
K1=double(J1);
K2=double(J2);
M=abs(K1+K2);
for i=1:367
for j=1:490
if M(i,j) >= 20
M(i,j) = 255;
else M(i,j) = 0;
end
end
end
J=uint8(M);
subplot(2,2,1);imshow(I); title('原始图');
subplot(2,2,2);imshow(J); title('prewitt变换后的图');
subplot(2,2,3);imhist(I); title('原始直方图');
subplot(2,2,4);imhist(J); title('prewitt变换后的直方图');
I=imread('text.tif');
SE1=[0,1,0;1,1,1;0,1,0];
K=imerode(I,SE1); subplot(2,2,1); imshow(I);
title('原始图形');
subplot(2,2,2); imshow(K);
title('腐蚀后的图形');
subplot(2,2,3); imhist(I);
title('原始图的直方图');
subplot(2,2,4); imhist(K);
title('腐蚀后的直方图');
I=imread('text.tif'); SE1=[0,1,0;1,1,1;0,1,0];
K=imdilate(I,SE1); subplot(2,2,1); imshow(I);
title('原始图形');
subplot(2,2,2); imshow(K);
title('膨胀后的图形');
subplot(2,2,3); imhist(I);
title('原始图的直方图');
subplot(2,2,4); imhist(K);
title('膨胀后的直方图');
Q=imread('circlesm.tif'); I=im2bw(Q);
SE1=strel('disk',10); L=imerode(I,SE1);%腐蚀
K=imdilate(L,SE1);%膨胀
subplot(2,2,1);
imshow(I);
title('原始图形');
subplot(2,2,2);
imshow(K);
title('开操作的图形');
分析:当结构元素的尺寸大于目标元素的最小尺寸时,进行开操作之后就会分离目标元素中
间隙小的图形。开操作的目的是,消除小物体,在纤细之处分离物体。
Q=imread('circlesm.tif'); I=im2bw(Q);
SE1=strel('disk',5); L=imdilate(I,SE1);%膨胀
K=imerode(L,SE1);%腐蚀
subplot(2,2,1); imshow(I);
title('原始图形');
subplot(2,2,2); imshow(K);
title('闭操作的图形');
分析:闭操作的目的是,用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不
明显改变其面积