ROEWA 算子进行二值化为什么边缘是一片的

[复制链接]
查看11 | 回复1 | 2021-1-27 06:50:04 | 显示全部楼层 |阅读模式
function[edgemap]=roewa(I,ratioT)
%对图像I进行ROEWA法边缘检测得到最终的二值边缘图bwedgeedgemap;边缘检测强度图double类型
%ratioT:判决门限比率值ratioT=判决值/max(edgemap(:))
%I=imread('首尔L波段9米分辨率.bmp');%输入图像
%I=imread('seashore.bmp');%输入图像
%a=imread('roadsw_gray_crop.jpg');
%I=rgb2gray(a)
%I=a
%I=frost(I);
%ratioT=0.8;%判决门限比率值
proto_I=I;
I=double(I);
alfa=0.1;
b=exp(-alfa);
a=1-b;
[r,c]=size(I);
%计算水平方向边缘图
s1=zeros(r,c);
s2=zeros(r,c);
s1(1,:)=I(1,:);
forj=1:c
fori=2:r
s1(i,j)=a*(I(i,j)-s1(i-1,j))+s1(i-1,j);
end
end
s2(r,:)=s1(r,:);
forj=1:c
fori=r-1:-1:1
s2(i,j)=a*(I(i,j)-s2(i+1,j))+s2(i+1,j);
end
end
s=s1/(1+b)+b*s2/(1+b);
x1=zeros(r,c);
x2=zeros(r,c);
x1(:,1)=s(:,1);
fori=1:r
forj=2:c
x1(i,j)=a*(s(i,j)-x1(i,j-1))+x1(i,j-1);
end
end
x2(:,c)=s(:,c);
fori=1:r
forj=c-1:-1:1
x2(i,j)=a*(s(i,j)-x2(i,j+1))+x2(i,j+1);
end
end
%计算垂直方向边缘图
s1=zeros(r,c);
s2=zeros(r,c);
s1(:,1)=I(:,1);
fori=1:r
forj=2:c
s1(i,j)=a*(I(i,j)-s1(i,j-1))+s1(i,j-1);
end
end
s2(:,c)=s1(:,c);
fori=1:r
forj=c-1:-1:1
s2(i,j)=a*(I(i,j)-s2(i,j+1))+s2(i,j+1);
end
end
s=s1/(1+b)+b*s2/(1+b);
y1=zeros(r,c);
y2=zeros(r,c);
y1(1,:)=s(1,:);
forj=1:c
fori=2:r
y1(i,j)=a*(s(i,j)-y1(i-1,j))+y1(i-1,j);
end
end
y2(r,:)=s2(r,:);
forj=1:c
fori=r-1:-1:1
y2(i,j)=a*(s(i,j)-y2(i+1,j))+y2(i+1,j);
end
end
edgemap=zeros(r,c);
rx=zeros(r,c);
ry=zeros(r,c);
fori=1:r
forj=1:c
rx(i,j)=max(x1(i,j)/x2(i,j),x2(i,j)/x1(i,j));
ry(i,j)=max(y1(i,j)/y2(i,j),y2(i,j)/y1(i,j));
edgemap(i,j)=sqrt(rx(i,j)^2+ry(i,j)^2);
end
end
最终用ostu阈值化效果图怎么是这个样子的,看看我的边缘强度的计算是不是有错



分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:50:04 | 显示全部楼层
博主当年这个算法实现过程应该是没有问题的吧,边缘有点粗是比较奇怪
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行