资源描述
2、用Matlab语言编写直方图规定化程序
clc;
I=imread('tire.tif');
J=histeq(I,32);
[counts,x]=imhist(J);
Q=imread('eight.tif');
figure;
imshow(Q);
figure;
imhist(Q);
M=histeq(Q,counts);
figure;
imshow(M);
figure;
imhist(M);
3、编写程序实现半邻域选择平均法进行空间域图像平滑的程序。
clear;clc;
I=imread('pout.tif');
J=imnoise(I,'salt & pepper',0.02);
K=filter2(fspecial('average',3),J)/255;
subplot(131),imshow(I);
subplot(132),imshow(J);
subplot(133),imshow(K);
4、针对某种平滑方法,比较对高斯噪声,椒盐噪声和乘法性噪声的去噪效果
%%
% 使用二维中值滤波对噪声进行处理
clc;
%%
%原始图像以及加上噪声后的图像
[I,map]=imread('pout.tif');
imshow(I,map);
noisy1=imnoise(I , 'gaussian' , 0.05);%加入0.05的高斯白噪声
noisy2=imnoise(I , 'salt & pepper' , 0.05);%加入0.05的椒盐噪声
noisy3=imnoise(I , 'speckle' , 0.05);%加入0.05的乘法性噪声
figure;
imshow(noisy1,map);
figure;
imshow(noisy2,map);
figure;
imshow(noisy3,map);
%%
%二维窗口越大图像细节丢失越多
% 3*3窗口的二维中值滤波
hood=3;
filtered1=medfilt2(noisy1,[hood hood]);
filtered2=medfilt2(noisy2,[hood hood]);
filtered3=medfilt2(noisy3,[hood hood]);
figure;
imshow(filtered1);
figure;
imshow(filtered2);
figure;
imshow(filtered3);
原图像
加噪声后
去噪声后
5、编写掩模匹配法实现锐化的程序,对同一图像比较Robison,Prewitt及Kirsch模板的锐化效果
%%
% RobisonÄ£°åÑÚģƥÅä·¨
clc;
[I,map]=imread('pout.tif');
imshow(I,map);
[M N]=size(I);
%%
myfilt1=[ 1 2 1;
0 0 0;
-1 -2 -1];
filtered1=filter2(myfilt1,I);
%%
myfilt2=[ 2 1 0;
1 0 -1;
0 -1 -2];
filtered2=filter2(myfilt2,I);
%%
myfilt3=[ 1 0 -1;
2 0 -2;
1 0 -1];
filtered3=filter2(myfilt3,I);
%%
myfilt4=[ 0 -1 -2;
1 0 -1;
2 1 0];
filtered4=filter2(myfilt4,I);
%%
myfilt5=[-1 -2 -1;
0 0 0;
1 2 1];
filtered5=filter2(myfilt5,I);
%%
myfilt6=[-2 -1 0;
-1 0 -1;
0 1 2];
filtered6=filter2(myfilt6,I);
%%
myfilt7=[-1 0 1;
-2 0 2;
-1 0 1];
filtered7=filter2(myfilt7,I);
%%
myfilt8=[ 0 1 2;
-1 0 1;
-2 -1 0];
filtered8=filter2(myfilt8,I);
%%
for i=1:M
for j=1:N
x=[filtered1(i,j),filtered2(i,j),filtered3(i,j),filtered4(i,j),...
filtered5(i,j),filtered6(i,j),filtered7(i,j),filtered8(i,j)];
OUT(i,j)=max(x);
end
end
figure;
imshow(OUT,map);
% PrewittÈñ»¯µÄ³ÌÐò
clc;
%%
[I,map]=imread('pout.tif');
imshow(I,map);
[M N]=size(I);
%%
myfilt1=[1 1 1;1 -2 1;-1 -1 -1];
filtered1=filter2(myfilt1,I);
myfilt2=[1 1 1;1 -2 -1;1 -1 -1];
filtered2=filter2(myfilt2,I);
myfilt3=[1 1 -1;1 -2 -2;1 1 -1];
filtered3=filter2(myfilt3,I);
myfilt4=[1 -1 1;1 -2 -1;1 1 1];
filtered4=filter2(myfilt4,I);
myfilt5=[-1 -1 -1;1 -2 1;1 1 1];
filtered5=filter2(myfilt5,I);
myfilt6=[-1 -1 1;-1 -2 1;1 1 1];
filtered6=filter2(myfilt6,I);
myfilt7=[-1 0 1;-1 -2 1;-1 1 1];
filtered7=filter2(myfilt7,I);
myfilt8=[1 1 1;-1 -2 1;-1 -1 1];
filtered8=filter2(myfilt8,I);
%%
for i=1:M
for j=1:N
x=[filtered1(i,j),filtered2(i,j),filtered3(i,j),filtered4(i,j),...
filtered5(i,j),filtered6(i,j),filtered7(i,j),filtered8(i,j)];
OUT(i,j)=max(x);
end
end
%%
figure;
imshow(OUT,map);
%%
% KirschÄ£°åÑÚģƥÅä·¨
clc;
[I,map]=imread('pout.tif');
imshow(I,map);
[M N]=size(I);
%%
myfilt1=[5 5 5;-3 0 -3;-3 -3 -3];
filtered1=filter2(myfilt1,I);
myfilt2=[5 5 -3;5 0 -3;-3 -3 -3];
filtered2=filter2(myfilt2,I);
myfilt3=[5 -3 -3;5 0 -3;5 -3 -3];
filtered3=filter2(myfilt3,I);
myfilt4=[-3 -3 -3;5 0 -3;5 5 -3];
filtered4=filter2(myfilt4,I);
myfilt5=[-3 -3 -3;-3 0 -3;5 5 5];
filtered5=filter2(myfilt5,I);
myfilt6=[-3 -3 -3;-3 0 5;-3 5 5];
filtered6=filter2(myfilt6,I);
myfilt7=[-3 -3 5;-3 0 5;-3 -3 5];
filtered7=filter2(myfilt7,I);
myfilt8=[-3 5 5;-3 0 5;-3 -3 3];
filtered8=filter2(myfilt8,I);
%%
for i=1:M
for j=1:N
x=[filtered1(i,j),filtered2(i,j),filtered3(i,j),filtered4(i,j),...
filtered5(i,j),filtered6(i,j),filtered7(i,j),filtered8(i,j)];
OUT(i,j)=max(x);
end
end
%%
figure;
imshow(OUT,map);
6、用Matlab编写出图像高通滤波实现锐化的程序,并通过实例进行各种高通滤波器性能的比较
%¸ßͨÂ˲¨
clc;
[I,map]=imread('pout.tif');
figure;
imshow(I,map);
noisy=imnoise(I,'gaussian', 0.05);
figure;
imshow(noisy,map);
[M N]=size(I);
F=fft2(double(noisy));
fftshift(F);
Dcut=100;
D0=150;
D1=250;
for u=1:M
for v=1:N
D(u,v)=sqrt(u^2+v^2);
BUTTERH(u,v)=1/(1+(sqrt(2)-1)*(Dcut/D(u,v))^2);
EXPOTH(u,v)=exp(log(1/sqrt(2))*(Dcut/D(u,v))^2);
if D(u,v)<=200
IDEALH(u,v)=1;
else
IDEALH(u,v)=0;
end
if D(u,v)<=D1
TRAPEH(u,v)=0;
elseif D(u,v)<=D0;
TRAPEH(u,v)=(D(u,v)-D1)/(D0-D1);
else
TRAPEH(u,v)=1;
end
end
end
IDEALG=IDEALH.*F;
IDEALfiltered=ifft2(IDEALG);
BUTTERG=BUTTERH.*F;
BUTTERfiltered=ifft2(BUTTERG);
EXPOTG=EXPLOTH.*F;
EXPOTfiltered=ifft2(EXPOTG);
TRAPEG=TRAPEH.*F;
TRAPEfiltered=ifft2(TRAPEG);
figure;
imshow(IDEALfiltered,map)
figure;
imshow(BUTTERfiltered,map)
figure;
imshow(EXPOTfiltered,map)
figure;
imshow(TRAPEfiltered,map)
1、Matlab编程实现点模板,线模板检测图像区域
应用点模板的初始灰度级分布如下图,输出点模板匹配后的灰度分布:
1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 4 1 1 1 1 1 1
1 1 1 4 4 4 4 4 1 1 1 1
1 1 1 4 4 4 4 4 4 1 1 1
1 1 1 1 4 4 4 4 4 1 1 1
1 1 1 1 4 4 4 4 1 1 1 1
1 1 1 1 1 4 4 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
data=[1,1,1,1,1,1,1,1,1,1,1,1;
1,1,1,1,1,4,1,1,1,1,1,1;
1,1,1,4,4,4,4,4,1,1,1,1;
1,1,1,4,4,4,4,4,4,1,1,1;
1,1,1,1,4,4,4,4,4,1,1,1;
1,1,1,1,4,4,4,4,1,1,1,1;
1,1,1,1,1,4,4,1,1,1,1,1,;
1,1,1,1,1,1,1,1,1,1,1,1];
[n,m]=size(data);
disp('初始灰度级分布');
data
dm=ones(n,m);
myfit=[-1 -1 -1;-1 8 -1;-1 -1 -1];
for i=1:n-2
for j=1:m-2
dm(i+1,j+1)=sum(sum(myfit.*data(i:i+2,j:j+2)));
end
end
disp('点模板匹配后的灰度分布');
[n,m]=find(dm~=1);
data(n,m)=dm(n,m);
data(data<0)=0;
data
初始灰度级分布
data =
1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 4 1 1 1 1 1 1
1 1 1 4 4 4 4 4 1 1 1 1
1 1 1 4 4 4 4 4 4 1 1 1
1 1 1 1 4 4 4 4 4 1 1 1
1 1 1 1 4 4 4 4 1 1 1 1
1 1 1 1 1 4 4 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
点模板匹配后的灰度分布
data =
1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 15 0 0 0 0 0 1
1 0 0 15 6 6 6 12 0 0 0 1
1 0 0 12 3 0 0 3 12 0 0 1
1 0 0 0 6 0 0 3 12 0 0 1
1 0 0 0 12 3 3 9 0 0 0 1
1 0 0 0 0 12 12 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1
应用线模板的初始灰度级分布如下图,输出线模板匹配后的灰度分布:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 2 1 1 1 1 1 2 1 1 1 1 1 1
1 1 2 1 1 1 1 2 1 1 1 2 2 2 1
1 1 2 1 1 1 2 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Grey=textread ('D:\我的文档\桌面\初始图像灰度分布.txt');
[n,m]=size (Grey);
k=max ([n,m])/min([n,m]);
Lmould_ 00=[-1 -1 -1;2 2 2;-1 -1 -1];
Lmould_ 45=[-1 -1 2;-1 2 -1;2 -1 -1];
Lmould_ 90=[-1 2 -1;-1 2 -1;-1 2 -1];
Lmould_ 135=[2 -1 -1;-1 2 -1;-1 -1 2];
Grey_Leaf=ones (n,n,k);
Grey_temp=ones (n,n);
account=1;
for t=1:k
Grey_Leaf (:,:,t)=Grey (:,account:account+n-1);
account=account+n;
end
for t=1:k
for i=1:n-2
for j=1:n-2
a1=sum (sum (Lmould_ 00.*Grey_Leaf (i:i+2,j:j+2,t)));
a2=sum (sum (Lmould_ 45.*Grey_Leaf (i:i+2,j:j+2,t)));
a3=sum (sum (Lmould_ 90.*Grey_Leaf (i:i+2,j:j+2,t)));
a4=sum (sum (Lmould_ 135.*Grey_Leaf (i:i+2,j:j+2,t)));
Grey_temp (i+1,j+1)=max ([a1,a2,a3,a4]);
end
end
[n1,m1]=find (Grey_temp~=1);
Grey_Leaf (n1,m1,t)=Grey_temp (n1,m1);
Grey_temp (n1,m1)=1;
end
disp ('初始灰度级分布');
Grey_Leaf
disp ('线模板边缘检测结果');
Grey_Leaf
2、用Mathematical求解一次平面拟合中a,b,c三个参量。即给出书中P115公式4.1.31, 4.1.32, 4.1.33的求解过程。
ClearAll["Global`*"]
g[x_,y_]:=a x+b y+c;
f[x_,y_]:=M[x,y];
M[x,y]:=A[[x;;y]](*矩阵元素*)
G[x_,y_]:=(g[x,y]-f[x,y])^2;
\[Epsilon]=G[m,n]+G[m+1,n]+G[m,n+1]+G[m+1,n+1];
DJ=Solve[D[\[Epsilon],a]==0&&D[\[Epsilon],b]==0&&D[\[Epsilon],c]==0,{a,b,c}];
aa=DJ[[1,1,2]]
bb=DJ[[1,2,2]]
cc=DJ[[1,3,2]]
结果:
a=
1/2 (-M[m,n]-M[m,1+n]+M[1+m,n]+M[1+m,1+n])
b=
1/2 (-M[m,n]+M[m,1+n]-M[1+m,n]+M[1+m,1+n])
c=
1/4 (3 M[m,n]+2 m M[m,n]+2 n M[m,n]+M[m,1+n]+2 m M[m,1+n]-2 n M[m,1+n]+M[1+m,n]-2 m M[1+m,n]+2 n M[1+m,n]-M[1+m,1+n]-2 m M[1+m,1+n]-2 n M[1+m,1+n])
3、编程实现灰度差判别准则的合并法形成区域的过程。
假设原图像矩阵为
2 1 1 2 1 1
1 5 4 5 5 1
2 5 8 9 6 2
1 6 9 8 6 1
1 6 8 9 8 1
1 2 1 1 2 1
设T=2
编程实现其最终区域分割的结果,基本要求:分割出A区域。高级要求:A,B,C三个区域全部分割出来
data=[ 2 1 1 2 1 1
1 5 4 5 5 1
2 5 8 9 6 2
1 6 9 8 6 1
1 6 8 9 8 1
1 2 1 1 2 1];
global data_sign;
global T;
global count;
global Sum;
[N,M]=size(data);
data_sign=zeros(N,M);
T=input('please input the threshold T==');
disp('-------ÊäÈë»ù±¾µ¥ÔªµÄ×ø±ê--------');
n=input('ºá×ø±ê n==');
m=input('×Ý×ø±ê m==');
Area_Number=1;
data_temp=(data_sign==0);
flag=sum(data_temp(:));
while flag
Sum=data(n,m); %ÓÃÓÚÀÛ¼ÓÇ󯽾ùÖµ
Average=data(n,m);
count=1;
for i=1:N
for j=1:M
if(data_sign(i,j)==0||data_sign(i,j)==Area_Number)
Average=Auto_search(data,i,j,Area_Number,Average);
end
end
end
Area_Number=Area_Number+1;
data_temp=(data_sign==0);
flag=sum(data_temp(:));
[n1,m1]=find(data_sign==0);
n=min(n1);
m=m1(min(find(n1==n)));
end
for i=1:Area_Number-1
data_sign(find(data_sign==i))=64+i;
end
data_sign=setstr(data_sign)
展开阅读全文