资源简介

matlab图像质心提取,求取质心坐标

资源截图

代码片段和文件信息

% _ANIU 
% 本程序为静态参数测量系统m程序 
% 分段调试用   
%  
%   
% 本程序不调用子函数  
% 2007年3月27日 
   
tic           % Stopwatch timer 
clc 
clear
 
 
I=imread(‘f:\guang.jpg‘); % 读入图像 
I=rgb2gray(I);       % 转换为灰度图像 
[RowCol]=size(I);   % 行数Row=576,列数Col=768 
Row 
Col 
 
[pixel_numbergray_scale]=imhist(I255);    % 获得图像直方图,gray_scale为灰度值,pixel_number为该灰度值上的总像素数 
prob=pixel_number/(Row*Col);                % 为灰度为某一值的概率 
 
 
ave_gray=0;                         % 图像平均灰度初值为0 
for i=1:255 
    ave_gray=ave_gray+i*prob(i);    % 图像平均灰度 
end 
 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
%%%%%% 以下几个值要在实际环境中最后确定 
 
 
R0=350;      % 光靶有效区域的最大半径,大于该值为需要灰度重建部分(需要先去掉的背景区域) 
a=0.5*Row-10;   % 圆心的初始位置 
b=0.5*Col-25;   % 这两个偏移值,在最终程序中要去掉 
k0=1.0;  % 去掉黑色区域的灰度调整因子(用于去掉黑边&背景区域) 
k=0.75;  % 分区域自适应双阈值分割因子 
k1=0.9;  % 全局自适应双阈值小因子(用于提取同心圆,配合4D) 
k2=1.6;  % 全局自适应双阈值大因子(用于提取激光的光斑) 
D=10;    % 十字丝宽度、圆宽度范围(用于提取两个直线标尺,圆的宽度) 
 
 
% 经验值 
% 5个同心圆的估计初值 
r(1)=135; 
r(2)=180; 
r(3)=225; 
r(4)=270; 
r(5)=310; 
 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
figure(1) 
imshow(I); 
title(‘原始图像‘); 
 
 
% 图像预处理:中值滤波(为了加快速度可将这一步去掉,作用效果也不明显) 
I2=medfilt2(I); 
 
figure(2) 
imshow(I2); 
title(‘中值滤波‘); 
 
 
I3=I2; 
% 去掉采集图像时可能形成的黑边 (去掉多少由具体情况定,一般为3个象素一边) 
I3(1:)=ave_gray*k0; 
I3(Row:)=ave_gray*k0; 
I3(:1)=ave_gray*k0; 
I3(:Col)=ave_gray*k0; 
 
 
%图像预处理:去掉黑色背景区域 
for i=1:Row 
    for j=1:Col                      
         
        % 去掉黑色背景区域 
        if((i-a)*(i-a)+(j-b)*(j-b))>R0*R0 
            I3(ij)=ave_gray*k0; 
        end 
    end 
end 
 
% 测试去掉黑色背景区域图像 
figure(3) 
imshow(I3); 
title(‘去掉黑色区域‘); 
 
 
%%% 圆拟合部分????? 
N=5;                      % 本测试图像共有5个圆  
point_number=zeros(1N);  % 圆图像上点数统计值(数组用于记录点数) 
ave_moment=zeros(N9);    % 平均矩 
 
 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% 全局阈值分割方法获得同心圆标尺图像(亮度相对小)、光斑图像(亮度相对大) 
 
I4=I3;  %%%%%%% 获取同心圆 
I5=I3;  %%%%%%% 获取激光的光斑 
for i=1:Row 
    for j=1:Col         
         
        % 获得同心圆标尺图像时,必须 
        % 去掉两个直线标尺 
         
        if(I3(ij)4*D)&&(abs(j-b)>4*D)  %%%大于4D去掉两个直线标尺 
            I4(ij)=I3(ij); 
        else 
            I4(ij)=255; 
        end 
         
%         % 验证半径初值 
%         l=(i-a)*(i-a)+(j-b)*(j-b); 
%         l=sqrt(l); 
%         if(abs(l-r(5))<0.1*D) 
%             I4(ij)=0; 
%         end 
         
 
        % 初次分割的光斑图像 
 
        if(I3(ij)>ave_gray*k2) 
            I5(ij)=I3(ij); 
        else 
            I5(ij)=0; 
       end  
       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
         
        % 同心圆图像分区域拟合的有关计算 
        if (I4(ij)            L=(i-b)*(i-b)+(j-a)*(j-a); 
            L=sqrt(L);    % 计算圆上一点到圆心初值的距离 
             
            x1=j;         % 计算边沿xy坐标的各阶矩,共9个值 
            x2=j^2; 
            x3=j^3; 
            

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       15075  2014-09-18 14:54  zhixin.m

评论

共有 条评论