Я хочу обнаруживать неровности, царапины на изображениях. У меня есть изображения различного типа, такие как 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);