Как я могу обнаружить неровности и царапины на изображении с помощью Matlab? - PullRequest
0 голосов
/ 07 марта 2020

Я хочу обнаруживать неровности, царапины на изображениях. У меня есть изображения различного типа, такие как metalli c et c. Я буду работать со всеми из них, чтобы обнаруживать ошибки (царапины, неровности). Некоторые изображения имеют неровности, некоторые имеют царапины, а некоторые имеют и то, и другое. Как я могу обнаружить их с помощью кода Matlab? У меня есть код для этого, но он не так хорош (даже меняя значения для каждого изображения). Пожалуйста, помогите мне об этом. Спасибо.

Я не могу загрузить изображения сюда, поэтому вот они (я задаю тот же вопрос сообществу matlab, вы можете найти изображения там): https://www.mathworks.com/matlabcentral/answers/509499-how-can-i-detect-scratch-and-bump-in-image-please-help?s_tid=prof_contriblnk

Градиентная функция:

function [gx,gy,mag,phi] = Gradients(gray)
gray = double(gray);
horzmask = fspecial('sobel');

% vertmask = horzmask ';

gx = imfilter(gray,horzmask,'replicate');
gy = imfilter(gray,horzmask','replicate');

phi = (atan2((gy),(gx)));

mag = mat2gray(sqrt(gx.^2+gy.^2));
end

Код:

clc;
im1 = imresize(imread('5768942_W_WRL_h.bmp'),0.5);

gSize = 15;

im1 = imfilter(im1,fspecial('gaussian',[gSize,gSize],gSize/2),'replicate');

[~,~,mag,~] = Gradients(im1);

imshow(mag);

mgBw = mag > 0.07*max(mag(:));
imshow(mgBw);
mgBw1 = imclose(mgBw,strel('disk',1));
imshow(mgBw1);
mgBw2 = bwareaopen(mgBw1,500);
imshow(mgBw2);
mgBw3 = imclose(mgBw2,strel('disk',2));
imshow(mgBw3);
mgBw4 = imfill(mgBw3,'holes');

imshow(mgBw4);
...