Operador Robert: este operador basado en gradientes calcula la suma de los cuadrados de las diferencias entre los píxeles diagonalmente adyacentes en una imagen a través de la diferenciación discreta. Luego se realiza la aproximación del gradiente. Utiliza los siguientes núcleos o máscaras 2 x 2:
Acercarse:
Paso 1: Ingresar: leer una imagen
Paso 2: Convertir la imagen RGB de color verdadero en una imagen en escala de grises
Paso 3: Convertir la imagen a doble
Paso 4: Preasignar la array de imagen_filtrada con ceros
Paso 5: Definir la máscara de operador Robert
Paso 6 : Proceso de detección de bordes (Calcule la aproximación del gradiente y la magnitud del vector)
Paso 7: Muestre la imagen filtrada
Paso 8: Umbral en la imagen filtrada
Paso 9: Muestre la imagen detectada por el borde
Implementación en MATLAB:
% MATLAB Code | Robert Operator from Scratch % Read Input Image input_image = imread('[name of input image file].[file format]'); % Displaying Input Image input_image = uint8(input_image); figure, imshow(input_image); title('Input Image'); % Convert the truecolor RGB image to the grayscale image input_image = rgb2gray(input_image); % Convert the image to double input_image = double(input_image); % Pre-allocate the filtered_image matrix with zeros filtered_image = zeros(size(input_image)); % Robert Operator Mask Mx = [1 0; 0 -1]; My = [0 1; -1 0]; % Edge Detection Process % When i = 1 and j = 1, then filtered_image pixel % position will be filtered_image(1, 1) % The mask is of 2x2, so we need to traverse % to filtered_image(size(input_image, 1) - 1 %, size(input_image, 2) - 1) for i = 1:size(input_image, 1) - 1 for j = 1:size(input_image, 2) - 1 % Gradient approximations Gx = sum(sum(Mx.*input_image(i:i+1, j:j+1))); Gy = sum(sum(My.*input_image(i:i+1, j:j+1))); % Calculate magnitude of vector filtered_image(i, j) = sqrt(Gx.^2 + Gy.^2); end end % Displaying Filtered Image filtered_image = uint8(filtered_image); figure, imshow(filtered_image); title('Filtered Image'); % Define a threshold value thresholdValue = 100; % varies between [0 255] output_image = max(filtered_image, thresholdValue); output_image(output_image == round(thresholdValue)) = 0; % Displaying Output Image output_image = im2bw(output_image); figure, imshow(output_image); title('Edge Detected Image');
Imagen de entrada –
Imagen filtrada:
Imagen de borde detectado:
ventajas:
- La detección de bordes y la orientación son muy fáciles.
- Se conservan los puntos de dirección diagonal
Limitaciones:
- Muy sensible al ruido
- No es muy preciso en la detección de bordes.
Publicación traducida automáticamente
Artículo escrito por goodday451999 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA