matlab数学形态学图像边缘检测(程序应该没错,但是不是对每个图片都可以用)
blood=imread('blood1.BMP');[x,y]=size(blood);%求出图象大小b=double(blood);N=sqrt(100)*randn...
blood = imread('blood1.BMP');
[x,y]=size(blood); % 求出图象大小
b=double(blood);
N =sqrt(100) * randn(x,y); % 生成方差为10的白噪声
I=b+N; % 噪声干扰图象
for i=1:x % 实际图象的灰度为0~255
for j=1:y
if (I(i,j)>255)
I(i,j)=255;
end
if (I(i,j)<0)
I(i,j)=0;
end
end
end
z0=max(max(I)); % 求出图象中最大的灰度
z1=min(min(I)); % 最小的灰度
T=(z0+z1)/2;
TT=0;
S0=0; n0=0;
S1=0; n1=0;
allow=0.5; % 新旧阈值的允许接近程度
d=abs(T-TT);
count=0; % 记录几次循环
while(d>=allow) % 迭代最佳阈值分割算法
count=count+1;
for i=1:x
for j=1:y
if (I(i,j)>=T)
S0=S0+I(i,j);
n0=n0+1;
end
if (I(i,j)<T)
S1=S1+I(i,j);
n1=n1+1;
end
end
end
T0=S0/n0;
T1=S1/n1;
TT=(T0+T1)/2;
d=abs(T-TT);
T=TT;
end
Seg=zeros(x,y);
for i=1:x
for j=1:y
if(I(i,j)>=T)
Seg(i,j)=1; % 阈值分割的图象
end
end
end
SI=1-Seg; % 阈值分割后的图象求反,便于用腐蚀算法求边缘
se1=strel('square',3); % 定义腐蚀算法的结构
SI1=imerode(SI,se1); % 腐蚀算法
BW=SI-SI1; % 边缘检测
%=====传统的边缘检测方法======%
I=uint8(I);
BW1=edge(I,'sobel', 0.11);
BW2=edge(I,'log', 0.015);
%===========图象显示==========%
figure(1);
imshow(I);title('Original') % 显示阈值分割的图象
figure(2);
imshow(BW2);title('Soble') % 显示新算法的边缘图象
figure(3)
imshow(BW1);title('Gauss-Laplace')
figure(4)
imshow(BW);title('New algorithm') 。。。。各位大侠,拜托指点迷津,马上要交毕设了,用一些经典图片就不会出错,用自己的图片就不可以,即使改了分辨率也不能用,一用就弹出??? Error using ==> plus
Number of array dimensions must match for binary array op.我只有五十分,都给了,拜托了。 展开
[x,y]=size(blood); % 求出图象大小
b=double(blood);
N =sqrt(100) * randn(x,y); % 生成方差为10的白噪声
I=b+N; % 噪声干扰图象
for i=1:x % 实际图象的灰度为0~255
for j=1:y
if (I(i,j)>255)
I(i,j)=255;
end
if (I(i,j)<0)
I(i,j)=0;
end
end
end
z0=max(max(I)); % 求出图象中最大的灰度
z1=min(min(I)); % 最小的灰度
T=(z0+z1)/2;
TT=0;
S0=0; n0=0;
S1=0; n1=0;
allow=0.5; % 新旧阈值的允许接近程度
d=abs(T-TT);
count=0; % 记录几次循环
while(d>=allow) % 迭代最佳阈值分割算法
count=count+1;
for i=1:x
for j=1:y
if (I(i,j)>=T)
S0=S0+I(i,j);
n0=n0+1;
end
if (I(i,j)<T)
S1=S1+I(i,j);
n1=n1+1;
end
end
end
T0=S0/n0;
T1=S1/n1;
TT=(T0+T1)/2;
d=abs(T-TT);
T=TT;
end
Seg=zeros(x,y);
for i=1:x
for j=1:y
if(I(i,j)>=T)
Seg(i,j)=1; % 阈值分割的图象
end
end
end
SI=1-Seg; % 阈值分割后的图象求反,便于用腐蚀算法求边缘
se1=strel('square',3); % 定义腐蚀算法的结构
SI1=imerode(SI,se1); % 腐蚀算法
BW=SI-SI1; % 边缘检测
%=====传统的边缘检测方法======%
I=uint8(I);
BW1=edge(I,'sobel', 0.11);
BW2=edge(I,'log', 0.015);
%===========图象显示==========%
figure(1);
imshow(I);title('Original') % 显示阈值分割的图象
figure(2);
imshow(BW2);title('Soble') % 显示新算法的边缘图象
figure(3)
imshow(BW1);title('Gauss-Laplace')
figure(4)
imshow(BW);title('New algorithm') 。。。。各位大侠,拜托指点迷津,马上要交毕设了,用一些经典图片就不会出错,用自己的图片就不可以,即使改了分辨率也不能用,一用就弹出??? Error using ==> plus
Number of array dimensions must match for binary array op.我只有五十分,都给了,拜托了。 展开
2个回答
展开全部
你这段程序有三个bug,都改好了. 你这50分还真难拿.. 自己比较一下吧,有不懂的再问:-)
blood = imread('test.jpg');
[x,y,z]=size(blood); % 求出图象大小
b=double(blood);
N =sqrt(100) * randn(x,y,z); % 生成方差为10的白噪声
I=b+N; % 噪声干扰图象
for i=1:x % 实际图象的灰度为0~255
for j=1:y
if (I(i,j)>255)
I(i,j)=255;
end
if (I(i,j)<0)
I(i,j)=0;
end
end
end
z0=max(max(I)); % 求出图象中最大的灰度
z1=min(min(I)); % 最小的灰度
T=(z0+z1)/2;
TT=0;
S0=0; n0=0;
S1=0; n1=0;
allow=0.5; % 新旧阈值的允许接近程度
d=abs(T-TT);
count=0; % 记录几次循环
while(d>=allow) % 迭代最佳阈值分割算法
count=count+1;
for i=1:x
for j=1:y
if (I(i,j)>=T)
S0=S0+I(i,j);
n0=n0+1;
end
if (I(i,j)<T)
S1=S1+I(i,j);
n1=n1+1;
end
end
end
T0=S0/n0;
T1=S1/n1;
TT=(T0+T1)/2;
d=abs(T-TT);
T=TT;
end
Seg=zeros(x,y);
for i=1:x
for j=1:y
if(I(i,j)>=T)
Seg(i,j)=1; % 阈值分割的图象
end
end
end
SI=1-Seg; % 阈值分割后的图象求反,便于用腐蚀算法求边缘
se1=strel('square',3); % 定义腐蚀算法的结构
SI1=imerode(SI,se1); % 腐蚀算法
BW=SI-SI1; % 边缘检测
%=====传统的边缘检测方法======%
I=uint8(I);
BW1=edge(SI,'sobel', 0.11);
BW2=edge(SI,'log', 0.015);
%===========图象显示==========%
figure(1);
imshow(I);title('Original') % 显示阈值分割的图象
figure(2);
imshow(BW2);title('Soble') % 显示新算法的边缘图象
figure(3)
imshow(BW1);title('Gauss-Laplace')
figure(4)
imshow(BW);title('New algorithm')
%。。。。各位大侠,拜托指点迷津,马上要交毕设了,用一些经典图片就不会出错,用自己的图片就不可以,即使改了分辨率也不能用,一用就弹出???
blood = imread('test.jpg');
[x,y,z]=size(blood); % 求出图象大小
b=double(blood);
N =sqrt(100) * randn(x,y,z); % 生成方差为10的白噪声
I=b+N; % 噪声干扰图象
for i=1:x % 实际图象的灰度为0~255
for j=1:y
if (I(i,j)>255)
I(i,j)=255;
end
if (I(i,j)<0)
I(i,j)=0;
end
end
end
z0=max(max(I)); % 求出图象中最大的灰度
z1=min(min(I)); % 最小的灰度
T=(z0+z1)/2;
TT=0;
S0=0; n0=0;
S1=0; n1=0;
allow=0.5; % 新旧阈值的允许接近程度
d=abs(T-TT);
count=0; % 记录几次循环
while(d>=allow) % 迭代最佳阈值分割算法
count=count+1;
for i=1:x
for j=1:y
if (I(i,j)>=T)
S0=S0+I(i,j);
n0=n0+1;
end
if (I(i,j)<T)
S1=S1+I(i,j);
n1=n1+1;
end
end
end
T0=S0/n0;
T1=S1/n1;
TT=(T0+T1)/2;
d=abs(T-TT);
T=TT;
end
Seg=zeros(x,y);
for i=1:x
for j=1:y
if(I(i,j)>=T)
Seg(i,j)=1; % 阈值分割的图象
end
end
end
SI=1-Seg; % 阈值分割后的图象求反,便于用腐蚀算法求边缘
se1=strel('square',3); % 定义腐蚀算法的结构
SI1=imerode(SI,se1); % 腐蚀算法
BW=SI-SI1; % 边缘检测
%=====传统的边缘检测方法======%
I=uint8(I);
BW1=edge(SI,'sobel', 0.11);
BW2=edge(SI,'log', 0.015);
%===========图象显示==========%
figure(1);
imshow(I);title('Original') % 显示阈值分割的图象
figure(2);
imshow(BW2);title('Soble') % 显示新算法的边缘图象
figure(3)
imshow(BW1);title('Gauss-Laplace')
figure(4)
imshow(BW);title('New algorithm')
%。。。。各位大侠,拜托指点迷津,马上要交毕设了,用一些经典图片就不会出错,用自己的图片就不可以,即使改了分辨率也不能用,一用就弹出???
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
道姆光学科技(上海)有限公司
2020-06-16 广告
2020-06-16 广告
机械、汽车、航空、军工、家具、工具原型等测量高精度的几何零部件以及测量复杂形状的机械零部件。三维测量技术的应用领域:较近几年,三维激光扫描技术不断发展并日渐成熟,目前三维扫描设备也逐渐商业化,三维激光扫描仪的巨大优势就在于可以快速扫描被测物...
点击进入详情页
本回答由道姆光学科技(上海)有限公司提供
展开全部
如果不是非要用matlab的话推荐使用opencv的函数就可以解决这个问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询