快速径向对称 只检测暗对称 代码(2)

<span style="font-size:18px;">%RST  径向对称变换 
% function [FilterImage,Image_out] = RST(I);


I = imread('lena.jpg');
% I=zeros(80,80) ;
% for x=1:1:80
%     for y=1:1:80
%         I(y,x) =255;
%     end;
% end;
% 
% r2 =8*8 ;
% for x=1:1:80
%     for y=1:1:80
%         tmp1 =(x-40)*(x-40)+(y-40)*(y-40) ;
%         if(tmp1 <= r2)
%             I(y,x) = 0 ;
%         end;
%     end;
% end;

%%
% 计算图像梯度
[h w dim]  = size(I);
if(dim == 3)
    I = rgb2gray(I);
end;


%如果均值小于100就开始做log变换
mean_v = mean(I(:));
if(mean_v <60)
I_log =log(double(1+I));
Min =min(I_log(:));
Max =max(I_log(:));
I_log = (I_log-Min)*255/(Max-Min);
%I =    I_log ; 
end;


 [FX,FY] = gradient(double(I)) ;
%  FX = textread('D:\RST\XG.txt');
%  [t1 t2]= size(FX);
%  FX =FX(:,1:t2-1);
%  FY = textread('D:\RST\YG.txt');
%   [t1 t2]= size(FY);
%  FY =FY(:,1:t2-1);
%计算梯度方向图和幅度图
% theta = atan2( FY,FX);
Mag = sqrt(FY.^2 +FX.^2);%图像的幅度图



O_map_pos=zeros(h,w) ;%方向投影图   正反向 就是梯度方向
O_map_neg=zeros(h,w) ;
M_map_pos=zeros(h,w) ;   %图像的幅度图
M_map_neg=zeros(h,w) ;

M_map_Total =zeros(h,w) ;

S_map=zeros(h,w) ;




%输出高斯模板

Moban = fspecial('gaussian',[9 9],2); %高斯模板对图像进行处理

for r =3:1:6
    %计算RST   正反方向的  方向投影和幅度图
  O_map_pos=zeros(h,w) ;
  M_map_pos=zeros(h,w) ;
  O_map_neg=zeros(h,w) ;
  M_map_neg=zeros(h,w) ;
  a =2 ;
  %对图像进行处理
  for y=(r+1):1:(h-r-1)
      for x=(r+1):1:(w-r-1)
          
          if(Mag(y,x) == 0) continue; end;
          %就是原文中的正向影响像素点坐标偏差值
          tmp_y = FY(y,x)*r/Mag(y,x) ;%在x和y方向上的r*单位增量  (g(p)/||g(p)||)*n
          tmp_x = FX(y,x)*r/Mag(y,x) ;

     %     if( ((tmp_y>=0) &&(tmp_x>=0) )||((tmp_y<0) &&(tmp_x<0) )) end;
          y_to =floor(y - tmp_y  +0.5) ;%在当前像素点的x和y方向上的增量
          x_to =floor(x - tmp_x  +0.5) ;
%          if(I(y,x) >200) continue; end;
%            if( ((tmp_y>=0) &&(tmp_x>=0) )||((tmp_y<0) &&(tmp_x<0) )) 
%               O_map_pos(y_to,x_to) = O_map_pos(y_to,x_to)+1 ;
%                M_map_pos(y_to,x_to) = M_map_pos(y_to,x_to) +Mag(y,x);
%            else
               O_map_neg(y_to,x_to) = O_map_neg(y_to,x_to)+1 ;
               M_map_neg(y_to,x_to) = M_map_neg(y_to,x_to) +Mag(y,x);
%         end;
      end;  %x
  end; %y
end

 
 K_1 =max(abs(O_map_neg(:))) ;
 K_2 =max(abs(M_map_neg(:))) ;  
 K_1=1 ;
 K_2=1 ;
 S_map = (((O_map_neg/K_1).^2 ).* M_map_neg/K_2) ;
 M_map_Total = M_map_Total + S_map ;
  
% end; %r

S_map_Filter = conv2( M_map_Total,Moban ,'same');
Image_out =M_map_Total ;
FilterImage =S_map_Filter ;
imshow(FilterImage ,[]); 
imshow(Image_out,[]) 





</span>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值