matlab数学形态学图像边缘检测(程序应该没错,但是不是对每个图片都可以用)

作者&投稿:笪符 (若有异议请与网页底部的电邮联系)
在Matlab上对一幅图像使用数学形态学的方法进行边缘检测~

edge.m
具体调用格式记太清楚像
fe = edge(f,‘sobel’);%sobel检测算‘prewwit’‘canny’等!

我用512x512pix的LENA图做的测试,如果不是从imshow的窗口上保存,而是直接输出文件的话,是没有你说的边框的:

a = imread('lena_sd.jpg');
agray=rgb2gray(a);
imshow(agray);
imwrite(agray,'save.jpg','jpg');

你这段程序有三个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')
%。。。。各位大侠,拜托指点迷津,马上要交毕设了,用一些经典图片就不会出错,用自己的图片就不可以,即使改了分辨率也不能用,一用就弹出???

如果不是非要用matlab的话推荐使用opencv的函数就可以解决这个问题


MATLAB与外部程序接口编程的目录
前言第1章MATLAB外部接口概述11.1MATLAB系统简介11.2MATLAB常用的数据类型21.2.1数值阵列21.2.2字符阵列41.2.3元组阵列51.2.4结构体阵列71.2.5类和对象91.3MATLAB接口简介101.3.1MEX文件101.3.2MATLAB引擎111.3.3MATLABC\/C++数学函数库111.3.4MATLAB编译器121.3.5串口接口13第2章MATLAB...

数学建模难吗?
数学建模说难不难,说易也不易。我大学的时候参加过,还的了山西省二等奖。我建议:1、要有数学基础一定要好。2、多看些硕士数学,例如最优化的选择,硕士数学才讲的到。3、多看一些数学建模的例题,归纳出解题的思路,并学会格式。4、学习一种计算机语言。5、学一些软件,如Mathematica 、Matlab、...

数学建模是什么?
数学建模就是根据实际问题来建立数学模型,对数学模型来进行求解,然后根据结果去解决实际问题。当需要从定量的角度分析和研究一个实际问题时,人们就要在深入调查研究、了解对象信息、作出简化假设、分析内在规律等工作的基础上,用数学的符号和语言作表述来建立数学模型。数学建模就是建立数学模型,建立数学...

建立数学模型流程
因此,一个成功的数学模型,必须根据建模的目的,将其用于分析、研究和解决实际问题,充分发挥数学模型在生产和科研中的特殊作用。以上介绍的数学建模基本步骤应该根据具体问题灵活掌握,或交叉进行,或平行进行,不拘一格地进行数学建模则有利于建模者发挥自己的才能。关于软件有matlab lindo 等 ...

数学建模是什么专业,主要是做什么的?
数学建模是数学的分支,不是专业,是根据实际问题来建立数学模型,对数学模型来进行求解,然后根据结果去解决实际问题。当需要从定量的角度分析和研究一个实际问题时,人们就要在深入调查研究、了解对象信息、作出简化假设、分析内在规律等工作的基础上,用数学的符号和语言作表述来建立数学模型。近半个多世纪...

什么大学的计算机专业含金量高?
2、数学与应用数学 数学与应用数学以数学应用的理论研究为主,包含算术、代数、几何等多个方面,主要运用数学知识分析解决生活中的一些问题,例如:股票涨跌背后的数据分析、预测某一事件发生的概率,并且结合计算机,使用MATLAB等软件处理一些人脑无法解决的复杂运算,例如圆周率等。3、地理科学 地理科学主要从...

国内做的好的量化投资软件有哪些?
无论是国内国外,量化投资软件就是一个噱头,实际上根本没什么用处,如果真的可以靠投资软件发财的话,那么估计出量化投资软件的人,早就发财了,所以千万不要迷信这些投资软件,作为理财师,我说几个原因请参考:第一、经济数据不是量化投资软件可以统计的,如果你使用的话,简直是刻舟求剑,甚至可以能...

动态造句-用动态造句
101、通过机理分析法建立了球磨机中储式制粉系统的 动态 数学模型. 102、以淳化试区的水平梯田为系统研究对象,休闲坡地为对照,对其剖面土壤水分变化进行 动态 监测。 103、本文是在MBAM的基础上,提出了一种利用 动态 核的形态联想记忆网络,其目的是解决含有任意随机噪声图像的联想记忆问题。 104、从资产专有性的角...

数学建模可以应用在什么领域?
数学建模就是用数学语言描述实际现象的过程。这里的实际现象既包涵具体的自然现象比如自由落体现象,也包涵抽象的现象比如顾客对某种商品所取的价值倾向。这里的描述不但包括外在形态,内在机制的描述,也包括预测,试验和解释实际现象等内容。我们也可以这样直观地理解这个概念:数学建模是一个让纯粹数学家(指...

什么是数学建模?举一些数学建模的题目,最好有答案哟!
数学建模就是用数学语言描述实际现象的过程。这里的实际现象既包涵具体的自然现象比如自由落体现象,也包涵抽象的现象比如顾客对某种商品所取的价值倾向。这里的描述不但包括外在形态,内在机制的描述,也包括预测,试验和解释实际现象等内容。我们也可以这样直观地理解这个概念:数学建模是一个让纯粹数学家(指...

桦南县19827599417: 在Matlab上对一幅图像使用数学形态学的方法进行边缘检测 -
陟琦小儿: edge.m 具体调用格式记太清楚像 fe = edge(f,'sobel');%sobel检测算'prewwit''canny'等!

桦南县19827599417: 求形态学边缘检测算子Matlab程序 -
陟琦小儿: 边缘检测: I=imread('lena.jpg'); imshow(I); title('原始图像'); BW1= edge(I,'Canny',0.00) ; %edge调用Canny为检测算子判别阈值为0.00 figure,imshow(BW1); title( '阈值为0.00的Canny算子边缘检测图像 '); BW2= edge(I,'Canny',0.05) ; %...

桦南县19827599417: matlab数学形态学图像边缘检测(程序应该没错,但是不是对每个图片都可以用) -
陟琦小儿: 你这段程序有三个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; % 噪声...

桦南县19827599417: 求用Matlab进行边缘检测
陟琦小儿: clear all;close all;warning off all;I = imread('lena.bmp'); %%如果是其他类型图像,请先转换为灰度图%%没有噪声时的检测结果BW_sobel = edge(I,'sobel');BW_prewitt = edge(I,'prewitt');BW_roberts = edge(I,'roberts');BW_laplace = edge(I,'log');BW...

桦南县19827599417: 用matlab语言编写相应的程序,检测图像中物体的边缘点 -
陟琦小儿: 前半部分好做,你查找一下数字图像处理书里的sobel,canny,log等算子的模板即可,将边缘点连接成连续的物体轮廓线就有点麻烦了,如果背景复杂的话,很难区分目标边缘和噪声

桦南县19827599417: Matlab图像直线边缘检测哪种算法比较好 -
陟琦小儿: 检测出边缘后,使用bwmorph函数细化得到边缘骨架,然后用Hough变换检测直线,程序比较长,可以参看数字图像处理(MATLAB版)张德丰编著 或者数字图像处理(MATLAB版)冈萨雷斯编著 阮秋奇 译 等书.

桦南县19827599417: 什么是边缘检测 -
陟琦小儿: 两个具有不同灰度值的相邻区域之间总存在边缘,边缘是灰度值不连续的表现.由于边缘是图像上灰度变化最剧烈的地方,传统的边缘检测就是利用了这个特点,对图像各个像素点进行微分或求二阶微分来确定边缘像素点. 以下是一段函数是关...

桦南县19827599417: 在Matlab如何使用自己需要检测的图像 -
陟琦小儿: 使用imread函数将图像读入,例如A=imread('d:\picture.bmp','bmp'); 其中picture.bmp'为自己的图像.最好把图像放在MATLAB的work文件夹下,否则好多东西不方便. 关于边缘检测的问题,这是图像处理的一个很大的方向,有很多种方法来做,有Roberts Cross算子, Prewitt算子, Sobel算子, Canny算子等等,还可以结合模糊理论和神经网络,没有最好只有更好,基本都是基于的梯度方法.网上也有些现成的MATLAB程序. 我也是在做图像的,MATLAB做做算法仿真还是 不难的,自己编一下效果会更好.

桦南县19827599417: 在matlab图像处理中 对图像边缘检测使用灰度图还是二值图? 边缘检测前要进行滤波和锐化吗? -
陟琦小儿: 边缘检测两种图都行,二值图的简单效果差,灰度图效果更好.滤波一般是必要的减少噪音带来的误差,锐化不是边缘检测.没有这么特殊的函数,自己写去吧!

桦南县19827599417: matlab图像如何用代码完成图像的分割、边缘检测和拼接的任务? -
陟琦小儿: 你可以试试下面的程序:I=imread('myphoto.jpg'); % 假设要处理的图像是myphoto.jpg heights=size(I,1); % 图像的高 widths=size(I,2); % 图像的宽 m=8; % 假设纵向分成8幅图 n=10; % 假设横向分成10幅图% 考虑到rows和cols不一定能被m...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网