mathlab吧 关注:152贴子:61
  • 7回复贴,共1

求大神解救,帮忙看几个程序。

只看楼主收藏回复

第一个:
function [xc,yc,R,a] = circfit(x,y)
%CIRCFIT Fits a circle in x,y plane
%
% [XC, YC, R, A] = CIRCFIT(X,Y)
% Result is center point (yc,xc) and radius R.A is an
% optional output describing the circle's equation:
%
% x^2+y^2+a(1)*x+a(2)*y+a(3)=0
% by Bucher izhak 25/oct/1991
n=length(x);
xx=x.*x;
yy=y.*y;
xy=x.*y;
A=[sum(x) sum(y) n;
sum(xy) sum(yy) sum(y);
sum(xx) sum(xy) sum(x)];
B=[-sum(xx+yy) ; -sum(xx.*y+yy.*y) ; -sum(xx.*x+xy.*y)];
a=A\B; %矩阵的左除
xc = -.5*a(1);
yc = -.5*a(2);
R = sqrt((a(1)^2+a(2)^2)/4-a(3));


1楼2015-05-15 19:30回复
    第三个:
    %y=a(1)+a(2)*x+a(3)*x^2+a(4)x^3
    syms x y;
    D=diff( 1820.6*x^3-573*x^2 + 7 *x )
    %A= atan(D)


    3楼2015-05-15 19:32
    回复
      第四个:
      %y=a(1)+a(2)*x+a(3)*x^2+a(4)x^3+a(5)x^4
      syms x y;
      D=diff( 431.9842*x^4-12.8711*x^3 +0.2750*x^2-0.0033*x )
      %A= atan(D)


      4楼2015-05-15 19:32
      回复
        第五个:
        %y=yc+B*sqrt(1-((x-xc)/A)^2).A(x轴方向),B(y轴方向)分别为椭圆长短轴,xc,yc为椭圆圆心
        %[(x-x0)cosθ+(y-y0)sinθ]^2/a^2 + [(y-y0)cosθ-(x-x0)sinθ]^2/b^2=1
        syms x y;
        D=diff( (((x- 77.9015 )*cos( -1.3176 )+(y- 151.5438 )*sin( -1.3176 ))/ 76.3844 )^2 + ( ((y- 151.5438 )*cos( -1.3176 )-(x- 77.9015 )*sin( -1.3176 ))/ 7.2986 )^2-1,x )
        %A= atan(D)


        5楼2015-05-15 19:33
        回复
          第六个:
          %y=yc+sqrt(R^2-(x-xc)^2).圆的上半部分方程
          syms x y;
          D=diff( 267.4897+sqrt( 463.4435^2-(x- 518.7213)^2));
          A= atan(D)


          6楼2015-05-15 19:33
          回复
            第七个:
            clear,close all;
            I=imread('drop0v.bmp');
            subplot(2,4,1);
            imshow(I);
            title('(a)原始图像');
            %计算灰度图
            f=rgb2gray(I);
            subplot(2,4,2);
            imshow(f);
            title('(b)灰度图像');
            %计算梯度图
            se=strel('square',2);%定义2×2腐蚀结构元素
            g1=imdilate(f,se);%膨胀操作
            g2=imerode(f,se);%腐蚀操作
            g=g1-g2;
            subplot(2,4,3);
            imshow(g);
            title('(c)梯度图像');
            %图像阈值分割
            T=graythresh(f);%求取阈值
            d=im2bw(f,T);%利用阈值将灰度图像二值化
            d=~d; % 腐蚀运算对灰度值为1的进行
            subplot(2,4,4);
            imshow(d);
            title('(d)阈值分割图像');
            %形态学滤波
            D=medfilt2(d,[5 5]);%进行5×5摸板中值滤波
            subplot(2,4,5);
            imshow(D);
            title('(e)形态学滤波后的阈值分割图像');
            %标记图像
            SE=strel('square',2); % 定义2×2腐蚀结构元素
            J=imerode(~D,SE);
            BW=(~D)-J; % 检测边缘
            subplot(2,4,6);
            imshow(BW);
            title('(f)标记图像');
            %figure,imshow(BW);
            %重构梯度图
            g2=imimposemin(g,BW);
            subplot(2,4,7);
            imshow(g2);
            title('(g)用标记图像重构的梯度图');
            %watershed算法分割
            L2=watershed(g2);
            wr2=L2==0;
            subplot(2,4,8);
            f(wr2)=255;
            imshow(uint8(f));
            title('(h)在原图像上显示的液滴边缘');
            figure,imshow(f)
            axis on;
            grid on;
            i=1;
            row(1:150)=0;
            col(1:150)=0;
            for n=56:120;
            for m=50:230;
            if f(m,n)==255
            row(i)=m; %纵向
            col(i)=n;
            i=i+1;
            end
            if i>150
            break;
            end
            end
            if i>150
            break;
            end
            end
            F=[row;col]
            j=1; %开始进行拟合
            for n=(1:150);
            xdata(j)=F(2,n); %定义自变量
            ydata(j)=F(1,n); %定义因变量
            j=j+1;
            end
            j=1:1:150;
            figure,plot(xdata(j),ydata(j),'*');%显示要拟合的像素点
            a=polyfit(xdata,ydata,3)


            7楼2015-05-15 19:34
            回复
              第八个:
              clear,close all;
              I=imread('drop0v.bmp');
              subplot(2,4,1);
              imshow(I);
              title('(a)原始图像');
              %计算灰度图
              f=rgb2gray(I);
              subplot(2,4,2);
              imshow(f);
              title('(b)灰度图像');
              %计算梯度图
              se=strel('square',2);%定义2×2腐蚀结构元素
              g1=imdilate(f,se);%膨胀操作
              g2=imerode(f,se);%腐蚀操作
              g=g1-g2;
              subplot(2,4,3);
              imshow(g);
              title('(c)梯度图像');
              %图像阈值分割
              T=graythresh(f);%求取阈值
              d=im2bw(f,T);%利用阈值将灰度图像二值化
              d=~d; % 腐蚀运算对灰度值为1的进行
              subplot(2,4,4);
              imshow(d);
              title('(d)阈值分割图像');
              %形态学滤波
              D=medfilt2(d,[5 5]);%进行5×5摸板中值滤波
              subplot(2,4,5);
              imshow(D);
              title('(e)形态学滤波后的阈值分割图像');
              %标记图像
              SE=strel('square',2); % 定义2×2腐蚀结构元素
              J=imerode(~D,SE);
              BW=(~D)-J; % 检测边缘
              subplot(2,4,6);
              imshow(BW);
              title('(f)标记图像');
              %figure,imshow(BW);
              %重构梯度图
              g2=imimposemin(g,BW);
              subplot(2,4,7);
              imshow(g2);
              title('(g)用标记图像重构的梯度图');
              %watershed算法分割
              L2=watershed(g2);
              wr2=L2==0;
              subplot(2,4,8);
              f(wr2)=255;
              imshow(uint8(f));
              title('(h)在原图像上显示的液滴边缘');
              figure,imshow(f);
              axis on;
              grid on;
              i=1;
              row(1:150)=0;
              col(1:150)=0;
              for n=56:120;
              for m=50:230;
              if f(m,n)==255
              row(i)=m; %纵向
              col(i)=n;
              i=i+1;
              end
              if i>150
              break;
              end
              end
              if i>150
              break;
              end
              end
              F=[row;col]
              j=1; %开始进行拟合
              for n=(1:150);
              xdata(j)=F(2,n); %定义自变量
              ydata(j)=F(1,n); %定义因变量
              j=j+1;
              end
              j=1:1:150;
              figure,plot(xdata(j),ydata(j),'*');%显示要拟合的像素点
              a=polyfit(xdata,ydata,4)


              8楼2015-05-15 19:35
              回复
                现在看到晚啦 不过你的第二个程序 椭圆直接拟合 可以直接使用 很好


                10楼2017-05-05 10:16
                回复