matlab图像边缘检测 背景变全黑

blood=imread('A.jpg');[x,y,z]=size(blood);%求出图象大小b=double(blood);N=sqrt(100)*randn(x,... blood = imread('A.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怎么写? 重谢
展开
 我来答
dukinkin
2014-12-21 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:915万
展开全部
图像可否发上来?

你这段是不是从别人的程序粘贴过来的
那程序是使用不同办法求图像边缘,然后比较结果的

而按你的描述你需要的结果,只是想把背景变黑
好像不需要几种求边缘的办法

而且如果只是要背景变黑
那么分出前景背景就可以,不需要提取边缘
追问

现在病急乱投医   您知道怎么做吗

追答
I = imread('文件名');  %读取图像
G=rgb2gray(I);            %将rgb转为灰度图
G=double(G)/255;          %转为0~1之间表示的灰度图
[x y]=size(G);            %求图像大小
T=(max(G(:))+min(G(:)))/2; %取最大值和最小值中值作为初始阈值
TT=0;                     

allow=0.2;                %允许T和TT的误差
d=abs(T-TT);              
count=0;                  % 记录几次循环
while(d>=allow)           % 迭代最佳阈值分割算法
    count=count+1;
    BW=(G>=T);           %以T为阈值分割
    S0=sum(G(BW));       %计算大于阈值的点数据和
    n0=sum(sum(BW));     %计算大于阈值的点数
    S1=sum(G(~BW));      %计算小于阈值的点数据和
    n1=x*y-n0;           %计算小于阈值的点数
    T0=S0/n0;
    T1=S1/n1;
    TT=(T0+T1)/2;        %计算得到TT
    d=abs(T-TT);         %新的距离
    T=TT;                %新的阈值
end
BW=(G>=T); %最佳阈值分割的二值图像BW
se=strel('square',7); 
BW2=imclose(BW,se); %图像闭算法填充图像中
BW2=uint8(BW2);
Iout=zeros(size(I),'uint8'); %为输出图像分配空间
Iout(:,:,1)=I(:,:,1).*BW2;   %rgb三个通道都根据BW2计算
Iout(:,:,2)=I(:,:,2).*BW2;   %BW2为1的地方保留数据
Iout(:,:,3)=I(:,:,3).*BW2;   %BW2为0的地方变为0,就是全黑
subplot(121),imshow(I);title('原图');
subplot(122),imshow(Iout);title('背景全黑图');


jimtien
2014-12-21 · TA获得超过7653个赞
知道大有可为答主
回答量:2146
采纳率:88%
帮助的人:1107万
展开全部

如果目的是试验边缘检测,那么

  1. 图片加噪声以后, 要进行滤波处理才能做边缘检测,甚至做边缘增强

  2. 对于这个图,用canny算法效果比较好.

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式