返回信息流%去除线段噪声
%输入为二值化后的图像R
[y2,x2]=size(R);
ywhite=zeros(y2,1); %%%%扫描行
for ii=1:y2
for jj=1:x2
if(R(ii,jj)==1)
ywhite(ii,1)= ywhite(ii,1)+1;
end
end
ymin=x2*0.3; %0.2 ,0.15
ymax=x2*0.60; %0.7
if(ywhite(ii,1)<=ymin||ywhite(ii,1)>=ymax)
R(ii,1)=0;
end
end
xwhite=zeros(x2,1);
for kk=1:x2
for hh=1:y2
if(R(hh,kk)==1)
xwhite(kk,1)= xwhite(kk,1)+1;
end
end
xmin=y2*0.02; % 0.05,0.03
xmax=y2*0.75; % 0.7,0.95
if(xwhite(kk,1)<=xmin||xwhite(kk,1)>=xmax)
R(kk,1)=0;
end
end
figure,imshow(R);
不知道为什么老是不对?请能指点指点,谢谢
这是一条镜像帖。来源:北邮人论坛 / matlab / #4303同步于 2008/10/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
[求助]去除线段噪声
mghy
2008/10/29镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
如果出现一个线段,就把它抹去是吗?
R(ii,1)=0;
R(kk,1)=0;
这两句出了问题
首先应该把整行整列都抹了,所以应该是R(ii,:)和R(kk,:)
而且既然要抹去,就不能把它们置零,而应该置为空
建议改为
R(ii,:)=[]
R(kk,:)=[]
另外个人认为判决阈值可以再极端一些,既然确定有线段,为何不直接设到1%和99%?
%%%%%%B是二值化图像%%%%%%%%%%%
[y2,x2]=size(B);
ywhite=zeros(y2,1); %%%%扫行
for ii=1:y2
for jj=1:x2
if(B(ii,jj)==1)
ywhite(ii,1)= ywhite(ii,1)+1; %%%%%行的总白点数
end
ymin=x2*0.0000003; %0.2 ,0.15 %%%%定义每行最小白点数
ymax=x2*0.99; %0.7 %%%%定义每行最大白点数
if(ywhite(ii,1)<=ymin||ywhite(ii,1)>=ymax) %对白点总数判定
B(ii,:)=0; %%不在理想范围内将此行全部像素点改为黑点
end
end
end
% 扫描列
xwhite=zeros(x2,1); %%%%扫列
for kk=1:x2
for hh=1:y2
if(B(hh,kk)==1)
xwhite(kk,1)= xwhite(kk,1)+1;
end
xmin=y2*0.0000002; % 0.05,0.03
xmax=y2*0.99; % 0.7,0.95
if(xwhite(kk,1)<=xmin||xwhite(kk,1)>=xmax)
B(kk,:)=0;
end
end
end
figure,imshow(B),title('去除线段噪声后效果图');
不知道为什么已经把阀值设得够极端了,可是输出图像还是全部变黑了,请教原因。非常感谢。
B(ii,:)=0; %%不在理想范围内将此行全部像素点改为黑点
B(kk,:)=0;
这样对么?
既然一个是行一个是列
那应该是
B(ii,:)=0;
B(:,kk)=0;
今晚心情好
R = floor(rand(100, 100) + 0.5);
figure, imshow(R);
R_ = R;
[y2, x2] = size(R);
ywhite = zeros(y2, 1);
xwhite = zeros(x2, 1);
ymin = x2*0.5;
ymax = x2*0.7;
xmin = y2*0.5;
xmax = y2*0.7;
for jj = 1 : y2
ywhite(jj) = length(find(R(jj, :)) == 1);
if ywhite(jj) <= ymin || ywhite(jj) >= ymax
R_(jj, :) = 0;
end
end
for ii = 1 : x2
xwhite(ii) = length(find(R(:, ii)) == 1);
if xwhite(ii) <= xmin || xwhite(ii) >= xmax
R_(:, ii) = 0;
end
end
figure, imshow(R_);