拿到MATLAB程序,一个主程序和一个子程序,不知道怎样运行
是把子程序直接黏贴到主程序后面,然后放到MATLAB上运行吗?主程序是:%多尺度形态滤波f=imread('saturn.tif');figure,imshow(f)f=...
是把子程序直接黏贴到主程序后面,然后放到MATLAB上运行吗?
主程序是:%多尺度形态滤波
f = imread('saturn.tif');
figure,imshow(f)
f=imnoise(f,'salt & pepper'); %加噪声
figure,imshow(f)
B=zeros(21,21);
B(11,11)=1;
B(10,11)=1;
B(12,11)=1;
B(11,10)=1;
B(11,12)=1;
%function F=cms_removenoise(f,B)
b= strel('arbitrary',B); %最小结构元素
n=3;
sumE=0;
for i=1:n
if i==1
Foc=imopen(f,b); %开闭(oc)---闭开(co)滤波
Foc=double(imclose(Foc,b));
Fco=imclose(f,b);
Fco=double(imopen(Fco,b));
Eoc(i)= entropy(Foc); %求熵
Eco(i)= entropy(Fco);
sumE=sumE+Eoc(i)+Eco(i);
F=Eoc(i)*Foc+Eco(i)*Fco;
else
B=imdilate(B,b); %结构元素的膨胀
b1= strel('arbitrary',B);
Foc=imopen(f,b1); %开闭(oc)---闭开(co)滤波
Foc=double(imclose(Foc,b1));
Fco=imclose(f,b1);
Fco=double(imopen(Fco,b1));
Eoc(i)= entropy(Foc); %计算滤波后图像的熵
Eco(i)= entropy(Fco);
sumE=sumE+Eoc(i)+Eco(i);
F=F+Eoc(i)*Foc+Eco(i)*Fco; %各种尺度下形态滤波得到的图像的加权合成
end
end
F=uint8(F/sumE); %各种尺度下形态滤波得到的图像的加权合成
figure,imshow(F);
title('滤波后的图像');
子程序是:
function E= entropy(A) %计算熵
E=0;
n=1.0;
num=size(A);
j=num(1)*num(2);
p=zeros(256);
A=double(A);
for i=1:j %求每个灰度值出现的次数
n=A(i)+1;
p(n)= p(n)+1;
end
p=p/j; %求每个灰度值出现的概率
for m=1:256
if p(m)~=0
E=E+p(m)*log2(p(m));%求熵
end
end
E=-E;
请问如何运行?
我按你提示保存了子程序为entropy.m文件 ,主程序直接运行,可是还有错误提示
??? function E= entropy(A) %计算熵
|
Error: Function definitions are not permitted at the prompt or in scripts. 展开
主程序是:%多尺度形态滤波
f = imread('saturn.tif');
figure,imshow(f)
f=imnoise(f,'salt & pepper'); %加噪声
figure,imshow(f)
B=zeros(21,21);
B(11,11)=1;
B(10,11)=1;
B(12,11)=1;
B(11,10)=1;
B(11,12)=1;
%function F=cms_removenoise(f,B)
b= strel('arbitrary',B); %最小结构元素
n=3;
sumE=0;
for i=1:n
if i==1
Foc=imopen(f,b); %开闭(oc)---闭开(co)滤波
Foc=double(imclose(Foc,b));
Fco=imclose(f,b);
Fco=double(imopen(Fco,b));
Eoc(i)= entropy(Foc); %求熵
Eco(i)= entropy(Fco);
sumE=sumE+Eoc(i)+Eco(i);
F=Eoc(i)*Foc+Eco(i)*Fco;
else
B=imdilate(B,b); %结构元素的膨胀
b1= strel('arbitrary',B);
Foc=imopen(f,b1); %开闭(oc)---闭开(co)滤波
Foc=double(imclose(Foc,b1));
Fco=imclose(f,b1);
Fco=double(imopen(Fco,b1));
Eoc(i)= entropy(Foc); %计算滤波后图像的熵
Eco(i)= entropy(Fco);
sumE=sumE+Eoc(i)+Eco(i);
F=F+Eoc(i)*Foc+Eco(i)*Fco; %各种尺度下形态滤波得到的图像的加权合成
end
end
F=uint8(F/sumE); %各种尺度下形态滤波得到的图像的加权合成
figure,imshow(F);
title('滤波后的图像');
子程序是:
function E= entropy(A) %计算熵
E=0;
n=1.0;
num=size(A);
j=num(1)*num(2);
p=zeros(256);
A=double(A);
for i=1:j %求每个灰度值出现的次数
n=A(i)+1;
p(n)= p(n)+1;
end
p=p/j; %求每个灰度值出现的概率
for m=1:256
if p(m)~=0
E=E+p(m)*log2(p(m));%求熵
end
end
E=-E;
请问如何运行?
我按你提示保存了子程序为entropy.m文件 ,主程序直接运行,可是还有错误提示
??? function E= entropy(A) %计算熵
|
Error: Function definitions are not permitted at the prompt or in scripts. 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询