gpt4 book ai didi

matlab - 如何检测此半导体图像中的缺陷?

转载 作者:行者123 更新时间:2023-12-01 09:41:43 25 4
gpt4 key购买 nike

所以我有一张半导体晶片的图像,它有一个缺陷,我需要使用 Matlab 检测它。我应该只检测它而不是它的背景。我还需要测量它的周长和面积。

到目前为止,我有这段代码,我将原始图像转换为二进制图像,然后对其使用膨胀,然后尝试获取其轮廓。在获取周长和面积时,我不仅会收到缺陷的结果,还会收到不是我想要的图像其余部分的结果。我怎样才能只提取缺陷,所以我只能得到它的面积和参数。

图片:here

fig3 = imread('figure3.png');
imshow(fig3);

title('Original image', 'FontSize', 18);
%Gray image
fig3Gray = rgb2gray(fig3);



%Binary image
BW3 = imbinarize(fig3Gray,0.5);
imshow(BW3);
title('Binary image', 'FontSize', 18);

se3 = strel('square',5);

%Dilation image
dilated3 = imdilate(BW3,sr);
imshow(dilated3);
title('Dilated image', 'FontSize', 18);

minus3 = ~(BW3-dilated3);
imshow(minus3);
title('Contour image', 'FontSize', 18);
imshowpair(minus3,BW3,'montage');

%Perimeter and Area calculation
Coon3 = bwconncomp(~BW3)
ANS3 = length(Coon3.PixelIdxList{1});
OUTPUT3 = regionprops(Coon3,'Perimeter','Area');
P3 = OUTPUT3.Perimeter
Area3 = OUTPUT3.Area

最佳答案

让我们从读取图像并将其转换为二进制开始。请注意,我降低了阈值以消除不需要的细节。

clear; close all; clc

fig3 = imread('XEQ59.png');
imshow(fig3);

title('Original image', 'FontSize', 18);
%Gray image
fig3Gray = rgb2gray(fig3);
%Binary image
BW3 = imbinarize(fig3Gray, 0.2); % lowered threshold
figure; imshow(BW3)
title('binary image')

thresholded image

现在我们继续寻找缺陷的坐标。为此,我们定义了一个结构元素来定义我们想要的形状 se .

structuring element (se)

我们正在寻找图片中与 se 匹配的部分.对于要匹配的给定坐标,周围区域必须恰好是 se .
请注意,这里的灰度值被忽略,它们可以是白色或黑色。
se手动定义,其中 1代表白色, -1代表黑色, 0表示被忽略的像素。

% hit-miss
se = [1, 1, -1*ones(1,5), ones(1, 3); ...
ones(6,1), -1*ones(6), zeros(6,2), ones(6,1); ...
ones(3,2), zeros(3,1), -1*ones(3,6), ones(3,1)];
figure; imshow(uint8(255/2*(se+1)), 'InitialMagnification', 3000)
title('structuring element')


应用命中-未命中操作来找到缺陷的位置:

pos = bwhitmiss(BW3, se);
figure; imshow(pos)
title('position of defect')
input('Press enter to continue...')

既然我们有了位置,我们就增加那个特定的像素位置,直到它不再增长,以获得缺陷。

% get the defect
close all; clc
def = pos;
last_def = zeros(size(def));
while ~isequal(def, last_def)
last_def = def;
def = ~BW3 & imdilate(def, ones(3));
imshow(def)
title('defect')
pause(0.1)
end

defect

计算面积和周长:
% area
area = sum(def(:))

% perimeter
vert = imdilate(def, [1; 1; 1]) - def;
horz = imdilate(def, [1 1 1]) - def;
perimeter = sum(vert(:)) + sum(horz(:))
area =
102
perimeter =
54

关于matlab - 如何检测此半导体图像中的缺陷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59512922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com