matlab图像边缘检测 背景变全黑
发布网友
发布时间:2022-04-22 08:27
我来回答
共2个回答
热心网友
时间:2022-06-18 15:16
图像可否发上来?
你这段是不是从别人的程序粘贴过来的
那程序是使用不同办法求图像边缘,然后比较结果的
而按你的描述你需要的结果,只是想把背景变黑
好像不需要几种求边缘的办法
而且如果只是要背景变黑
那么分出前景背景就可以,不需要提取边缘追问
现在病急乱投医 您知道怎么做吗
追答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('背景全黑图');
热心网友
时间:2022-06-18 15:16
如果目的是试验边缘检测,那么
图片加噪声以后, 要进行滤波处理才能做边缘检测,甚至做边缘增强
对于这个图,用canny算法效果比较好.