Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Detecção de Cantos e Blobs | Processamento de Imagens com OpenCV
Fundamentos de Visão Computacional

bookDetecção de Cantos e Blobs

Detecção de Cantos

A detecção de cantos é utilizada para identificar mudanças bruscas de intensidade onde dois contornos se encontram. É útil em correspondência de características, rastreamento de objetos e reconhecimento de estruturas.

Métodos Populares:

  • Detector de cantos de Harris (cv2.cornerHarris): detecta cantos com base em mudanças de gradiente;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Convert to float32
gray = np.float32(gray)

# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None)  # Improve visibility

# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Note
Nota

Parâmetros:

  • src: imagem de entrada em escala de cinza (deve ser float32);
  • blockSize: tamanho da janela local para cálculo dos gradientes;
  • ksize: tamanho da abertura do operador Sobel (ímpar, por exemplo, 3, 5, 7);
  • k: parâmetro livre do detector de Harris (valores típicos: 0.04 - 0.06).
  • Detector de cantos de Shi-Tomasi (cv2.goodFeaturesToTrack): seleciona os cantos mais fortes em uma imagem;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

# Draw detected corners in blue
for corner in corners:
    x, y = np.int32(corner[0])
    cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Note
Nota

Parâmetros:

  • image: imagem de entrada em escala de cinza;
  • maxCorners: número máximo de cantos a serem detectados;
  • qualityLevel: qualidade mínima dos cantos detectados (intervalo: 0.01 - 0.1);
  • minDistance: distância mínima entre os cantos detectados.
Note
Estude Mais

Parâmetros do método cv2.circle() para destacar objetos:

  • image: imagem na qual o círculo será desenhado;
  • center_coordinates: coordenadas do centro do círculo, representadas como uma tupla de dois valores: (X, Y);
  • radius: raio do círculo;
  • color: cor da borda do círculo. No formato BGR, passado como uma tupla (por exemplo, (255, 0, 0) para azul);
  • thickness: espessura da borda do círculo em pixels. Um valor de -1 preenche todo o círculo com a cor especificada.

Detecção de Blobs

A detecção de blobs identifica regiões de intensidade semelhante em uma imagem, sendo útil para detecção e rastreamento de objetos.

Um dos métodos populares para detecção de blobs é o SimpleBlobDetector

  • cv2.SimpleBlobDetector: detecta keypoints que representam blobs com base em tamanho, formato e intensidade.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()

# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001

# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)

# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
                                     cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Note
Nota

Parâmetros:

  • minThreshold, maxThreshold: faixa de intensidade para detecção de blobs;
  • filterByArea: ativa o filtro baseado no tamanho do blob;
    • minArea, maxArea: especifica as restrições de tamanho para blobs detectados;
  • filterByCircularity: ativa o filtro baseado na circularidade;
    • minCircularity: valores menores detectam blobs alongados;
  • filterByConvexity: ativa o filtro baseado na convexidade;
    • minConvexity: valores menores permitem formas côncavas;
  • filterByInertia: ativa o filtro baseado na razão de inércia;
    • minInertiaRatio: valores menores detectam blobs alongados.
Tarefa

Swipe to start coding

Você recebe as imagens da fábrica (factory) e dos girassóis (sunflowers):

  • Converter a imagem factory para escala de cinza e armazenar na variável gray_factory;
  • Converter a imagem sunflowers para escala de cinza e armazenar na variável gray_sunflowers;
  • É necessário para o Detector de Harris converter a matriz da imagem para float32, faça isso e armazene em gray_float;
  • Aplique a detecção de cantos de Harris e armazene em harris_corners (parâmetros recomendados: blockSize=2, ksize=3, k=0.04);
  • Utilize dilate() para melhorar a visibilidade de harris_corners;
  • Aplique a detecção de cantos de Shi-Tomasi na imagem e armazene em shi_tomasi_corners (parâmetros recomendados: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Crie um objeto SimpleBlobDetector_Params para inicializar os parâmetros e armazene em params;
  • Crie um detector de blobs com os parâmetros especificados e armazene em detector;
  • Detecte os keypoints dos blobs e armazene em keypoints.

Solução

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 8
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you explain the difference between Harris and Shi-Tomasi corner detectors?

How do I choose between corner detection and blob detection for my application?

Can you provide more details on tuning the parameters for SimpleBlobDetector?

close

Awesome!

Completion rate improved to 3.45

bookDetecção de Cantos e Blobs

Deslize para mostrar o menu

Detecção de Cantos

A detecção de cantos é utilizada para identificar mudanças bruscas de intensidade onde dois contornos se encontram. É útil em correspondência de características, rastreamento de objetos e reconhecimento de estruturas.

Métodos Populares:

  • Detector de cantos de Harris (cv2.cornerHarris): detecta cantos com base em mudanças de gradiente;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Convert to float32
gray = np.float32(gray)

# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None)  # Improve visibility

# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Note
Nota

Parâmetros:

  • src: imagem de entrada em escala de cinza (deve ser float32);
  • blockSize: tamanho da janela local para cálculo dos gradientes;
  • ksize: tamanho da abertura do operador Sobel (ímpar, por exemplo, 3, 5, 7);
  • k: parâmetro livre do detector de Harris (valores típicos: 0.04 - 0.06).
  • Detector de cantos de Shi-Tomasi (cv2.goodFeaturesToTrack): seleciona os cantos mais fortes em uma imagem;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

# Draw detected corners in blue
for corner in corners:
    x, y = np.int32(corner[0])
    cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Note
Nota

Parâmetros:

  • image: imagem de entrada em escala de cinza;
  • maxCorners: número máximo de cantos a serem detectados;
  • qualityLevel: qualidade mínima dos cantos detectados (intervalo: 0.01 - 0.1);
  • minDistance: distância mínima entre os cantos detectados.
Note
Estude Mais

Parâmetros do método cv2.circle() para destacar objetos:

  • image: imagem na qual o círculo será desenhado;
  • center_coordinates: coordenadas do centro do círculo, representadas como uma tupla de dois valores: (X, Y);
  • radius: raio do círculo;
  • color: cor da borda do círculo. No formato BGR, passado como uma tupla (por exemplo, (255, 0, 0) para azul);
  • thickness: espessura da borda do círculo em pixels. Um valor de -1 preenche todo o círculo com a cor especificada.

Detecção de Blobs

A detecção de blobs identifica regiões de intensidade semelhante em uma imagem, sendo útil para detecção e rastreamento de objetos.

Um dos métodos populares para detecção de blobs é o SimpleBlobDetector

  • cv2.SimpleBlobDetector: detecta keypoints que representam blobs com base em tamanho, formato e intensidade.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()

# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001

# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)

# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
                                     cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Note
Nota

Parâmetros:

  • minThreshold, maxThreshold: faixa de intensidade para detecção de blobs;
  • filterByArea: ativa o filtro baseado no tamanho do blob;
    • minArea, maxArea: especifica as restrições de tamanho para blobs detectados;
  • filterByCircularity: ativa o filtro baseado na circularidade;
    • minCircularity: valores menores detectam blobs alongados;
  • filterByConvexity: ativa o filtro baseado na convexidade;
    • minConvexity: valores menores permitem formas côncavas;
  • filterByInertia: ativa o filtro baseado na razão de inércia;
    • minInertiaRatio: valores menores detectam blobs alongados.
Tarefa

Swipe to start coding

Você recebe as imagens da fábrica (factory) e dos girassóis (sunflowers):

  • Converter a imagem factory para escala de cinza e armazenar na variável gray_factory;
  • Converter a imagem sunflowers para escala de cinza e armazenar na variável gray_sunflowers;
  • É necessário para o Detector de Harris converter a matriz da imagem para float32, faça isso e armazene em gray_float;
  • Aplique a detecção de cantos de Harris e armazene em harris_corners (parâmetros recomendados: blockSize=2, ksize=3, k=0.04);
  • Utilize dilate() para melhorar a visibilidade de harris_corners;
  • Aplique a detecção de cantos de Shi-Tomasi na imagem e armazene em shi_tomasi_corners (parâmetros recomendados: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Crie um objeto SimpleBlobDetector_Params para inicializar os parâmetros e armazene em params;
  • Crie um detector de blobs com os parâmetros especificados e armazene em detector;
  • Detecte os keypoints dos blobs e armazene em keypoints.

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 8
single

single

some-alt