Почему выходные данные фильтра Собеля имеют тот же размер, что и входное изображение, хотя размер ядра равен 3?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему выходные данные фильтра Собеля имеют тот же размер, что и входное изображение, хотя размер ядра равен 3?

Сообщение Anonymous »

Я использую OpenCV и NumPy для применения фильтра Собеля к изображению в Python и ожидал, что после применения фильтра выходные данные будут иметь меньшие размеры. Согласно уравнению вывод = ввод - размер ядра // шаг + 1, я думал, что вывод должен быть меньше ввода на размер ядра (в данном случае он равен 3). Однако когда я применяю фильтр Собеля, размеры выходного изображения остаются такими же, как у входного.
Вот код, который я использую:

Код: Выделить всё

import cv2
import numpy as np

input_image = cv2.imread('img3.pgm', cv2.IMREAD_GRAYSCALE)
print(f"length of input image rows : {len(input_image)}")
print(f"length of input image columns: {len(input_image[0])}")

sobel_x = cv2.Sobel(input_image, cv2.CV_64F, 1, 0, ksize=3)  # Sobel in x-direction
sobel_y = cv2.Sobel(input_image, cv2.CV_64F, 0, 1, ksize=3)  # Sobel in y-direction

edge_magnitude = cv2.magnitude(sobel_x, sobel_y)

edge_magnitude_cropped = np.clip(edge_magnitude, 0, 255).astype(np.uint8)
print(f"length of filtered_image row {len(edge_magnitude_cropped)}" )
print(f"length of filtered_image col {len(edge_magnitude_cropped[0])}" )
cv2.imwrite('filtered_image_cv_cropped.pgm', edge_magnitude_cropped)
print("\nFiltered image saved as 'filtered_image_cv.pgm'.")

with open('original_image_cv_cropped.txt', 'w') as f:
for row in input_image:
f.write(" ".join(str(pixel) for pixel in row) + "\n")
print("\nOriginal image data saved as 'original_image_cv.txt'.")

with open('filtered_image_cv_cropped.txt', 'w') as f:
for row in edge_magnitude_cropped:
f.write(" ".join(str(pixel) for pixel in row) + "\n")
print("\nFiltered image data saved as 'filtered_image_cv.txt'.")

В приведенном выше коде я применяю фильтр Собеля с размером ядра 3. Входное изображение имеет размер 736x736, и я ожидал, что выходное изображение будет меньше, как указано в формуле. Но после применения фильтра Собеля размеры вывода такие же, как и входные (736x736). Когда я вручную выполняю операцию, я получаю ожидаемое изображение меньшего размера. Почему это происходит с OpenCV?

Подробнее здесь: https://stackoverflow.com/questions/792 ... e-even-tho
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»