0
点赞
收藏
分享

微信扫一扫

Linux内核代码中常用的数据结构

学习目的:学习识别案例掌握识别方法    

 

2.代码

clear;clc;close all
I=imread('luowen1.bmp');   %读取螺纹图片
try
    I=rgb2gray(I);         %如果是RGB图,则转换成灰度图
catch
end
figure
imshow(I)
title('原图(半边螺纹)')
for K=1:15
    I=wiener2(I,[5 5]);   %通过滤波15次把多余点滤除
end
[m,n]=size(I);

I=edge(I,'canny');       %通过边缘检测得到螺纹的波形
[m,n]=size(I);           %计算图像的尺寸

I=I(20:m-20,20:n-20);    %把图像的边角去掉,只留下有用部分
[m,n]=size(I);           %计算去掉边角之后的图像尺寸
figure
imshow(I)                %显示去掉边角之后的图像
title('螺纹波形')

%%  把白像素点的位置得到(像素为1的点的坐标)
N=1;                    %计数器
for i=1:m               
    for j=1:n
        if I(i,j)==1      
            x(N)=i;     %保存白色像素的横坐标x
            y(N)=j;     %保存白色像素的纵坐标y
            N=N+1;      %计数器+1
        end
    end
end

[x,IX]=sort(x);   %将x按升序排列
y=y(IX);          %对应的y顺序依次和x对应
figure
plot(x,y)         %绘制出螺纹线
xlabel('横轴x')   %标注横轴x
ylabel('纵轴y')   %标注纵轴y
title('计算结果')
view([90 90])
hold on
axis equal
axis([1 m 1 n])

M=10;                             %设置波峰和波谷的个数
lengthxy=length(x);               %计算x和y数据点的个数
dlength=floor(lengthxy/M);        %将x和y等分成M段,计算每一段的长度

for K=1:M
    xx{K}=x((K-1)*dlength+1:K*dlength);   %保存每一段x的值
    yy{K}=y((K-1)*dlength+1:K*dlength);   %保存每一段y的值
end

for K=1:M
    [bofengy(K),index1]=max(yy{K});   %寻找每一段y里的最大值
    bofengx(K)=xx{K}(index1);         %得到与波峰对应的横坐标x
    [boguy(K),index2]=min(yy{K});     %寻找每一段y里的最小值
    bogux(K)=xx{K}(index2);           %得到与波谷对应的横坐标x
end
scatter(bofengx,bofengy)              %绘制出波峰的点
scatter(bogux,boguy,'k')              %绘制出波谷的点


%%   对所有的波峰进行直线拟合,计算出直线斜率k1和截距b1
A1=[bofengx',ones(length(bofengx),1)];  
kb1=A1\bofengy';
k1=kb1(1);
b1=kb1(2);
%%   绘制出波峰拟合得到的直线
x0=[1 m];
Y1=k1*x0+b1; 
plot(x0,Y1,'m');

%%   对所有的波谷进行直线拟合,计算出直线的斜率k2和截距b2
A2=[bogux',ones(length(bogux),1)];
kb2=A2\boguy';
k2=kb2(1);
b2=kb2(2);
%%   绘制出波谷拟合直线
x0=[1 m];
Y2=k2*x0+b2; 
plot(x0,Y2,'r');

 

3.运行结果

ac81c19128c44c578e557d0d613616ee.png

 d94a2d831fbe4beaa10919fd823e4ed6.png

 2e7a5e8896cb4d41b59e9fa410b5d6eb.png

 

 

举报

相关推荐

0 条评论