找回密码
 注册
查看: 867|回复: 1
打印 上一主题 下一主题

参考一篇文献来学习一点MATLAB图像处理的知识——用于缺陷检测

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-16 07:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
参考一篇文献来学习一点MATLAB图像处理的知识——用于缺陷检测$ G8 t% `1 X0 ?* R7 l, h. E! O' p

- c7 |- c' `! Z2 h# L9 R$ R& R, z: I! `, K

0 o: U9 F. W! B; }

clc,clear all,close all

% T = imread ('bat.bmp');%读入图像

T = imread ('IMG.jpg');%读入图像

M = imresize ( T ,[256 ,256 ]);%将图像调整256 ×256 ,为了显示方便

YT = rgb2gray(M);%将RGB 格式转换为灰度图像

figure , imshow( YT) ;

title ('原始图像')%显示原始图像

% 去噪%

%1 中值滤波去噪%

Z1 = medfilt2 (YT ,[5 ,5 ]);

%2 小波分析去噪%

%使用sym4 小波,设定全局阈值去噪%

[ THR ,SORH ,KEEPAPP] = ddencmp('den','wv', Z1);

X = wdencmp( 'gbl',Z1, 'sym4',2 ,THR ,SORH ,KEEPAPP);

figure, imshow(X,[ ]);

title ('去噪图像') %显示去噪图像

[Z1,s ] = wavedec2 (X ,2, 'sym4');

%进行二层小波分解

len = length ( Z1 );

%处理分解系数,突出轮廓,弱化细节%

for i = 1 :len

    if (Z1(i) > 800)

        Z1(i) = 2*Z1(i);

    else

        Z1(i) = 0.5*Z1(i);

    end

end

Z = waverec2 (Z1 ,s, 'sym4'); %分解系数重构

figure , imshow(Z ,[ ]);

title ('增强图像') ;%显示增强图像

BW1 = edge(Z, 'canny',0.3); %canny边缘检测

figure, imshow(BW1 );

title ('canny 检测效果');%显示边缘检测图像

% 填补缝隙%

se90 = strel ('line',3 ,90);

se0 = strel ('line',3 ,0);

% 膨胀操作%

BWsdil = imdilate (BW1 ,[ se90 ,se0 ]);

figure , imshow(BWsdil);

title ('膨胀图像') ;%显示膨胀图像

% 填充%

BWdfill = imfill (BWsdil, 'holes');

figure , imshow(BWdfill);

title ('填充图像'); %显示填充图像

% 移除与边界连通的目标%

BWnobord = imclearborder (BWdfill ,4);

figure , imshow(BWnobord);

title ('移除与边界连通的图像');

%显示移除与边界连通的图像

% 平滑%

seD = strel ('diamond',1);

BWfinal1 = imerode (BWnobord ,seD);

BWfinal2 = imerode (BWfinal1 ,seD);

figure , imshow(BWfinal2);

title ('平滑图像'); %显示平滑图像

% 计算裂纹的面积%

count = 0; % 记录裂纹图像像素点的个数

[ i , j ] = size (BWfinal2);

for m = 1 : i

    for n = 1 : j

        if BWfinal2 (m , n) > 0% 判断是否为裂纹图像像素点

        count = count + 1 ;

        end

    end

end

S = count %统计裂纹图像像素点的个数

BWfinal3 = uint8 (BWfinal2);

BW2 = edge (BWfinal3, 'canny');% 边缘提取

figure ,imshow(BW2 );

title('canny 检测效果') ;%显示边缘检测图像

[ x , y ] = size (BW2 );

BW = bwperim(BW2 ,8);

% 检测目标的边缘跟踪,用于计算周长

% 检测垂直方向连续的周长像素点%

P1 = 0;

P2 = 0;

Ny = 0;%记录垂直方向连续周长像素点的个数

for i = 1 : x

        for j = 1 : y

        if (BW( i , j) > 0)

            P2 = j;

            if ( ( P2 - P1 ) == 1)

% 判断是否为垂直方向连续的周长像素点

                Ny = Ny + 1;

            end

            P1 = P2;

        end

        end

end

% 检测水平方向连续的周长像素点%

P1 = 0;

P2 = 0;

Nx = 0;%记录水平方向连续周长像素点的个数

for j = 1 : y

        for i = 1 : x

        if (BW( i , j) > 0)

            P2 = i;

            if ( ( P2 - P1 ) == 1)

% 判断是否为水平方向连续的周长像素点

                Nx = Nx + 1;

            end

            P1 = P2;

        end

    end

end

Ns = sum( sum(BW) );%计算周长像素点总数

Nd = Ns - Nx - Ny ;% 计算奇数码的链码数

L = sqrt (2) * Nd + Nx + Ny;% 计算周长

for i=1:9

    saveas(figure(i),['figure' num2str(i) '.png'])

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%各个步骤处理后的图像效果

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

6 Z/ m! Z5 o% U' p# O

6 _# J3 l! _5 {# g
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-5-25 11:05 , Processed in 0.062500 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表