Выполнение отражающей центральной площадки на изображении - PullRequest
0 голосов
/ 24 сентября 2018

В этой ветке форума из активного конкурса Kaggle упоминается то, что автор называет "отражающей центральной площадкой".По сути, это преобразование, которое берет края изображения и отражает их наружу, вызывая зеркальное отражение по краям изображения, которое автор показывает немного, но заметно улучшает производительность модели.

Для справки вот изображениеони публикуют демонстрацию этой техники:

Мой вопрос состоит из двух частей:

  1. Имеет ли это преобразование каноническое имя?«Отражающая центральная панель» звучит неофициально.
  2. Какой простой способ выразить это преобразование в коде, возможно, используя numpy и что-то вроде skimage?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Имеет ли это преобразование каноническое имя?«Отражающий центральный блок» звучит неофициально.

«Симметричное заполнение» - это часто используемое выражение для обозначения этого преобразования.

Какой простой способ выразить это преобразование вcode

Я думаю, что самым простым способом добиться этого было бы использование Numpy's pad с mode='symmetric'.

Demo

import numpy as np
from skimage import data
import matplotlib.pyplot as plt

img = data.astronaut()
padded = np.pad(img, pad_width=((100, 200), (100, 500), (0, 0)), mode='symmetric')

fig, (ax1, ax2) = plt.subplots(2, 1)
ax1.imshow(img)
ax2.imshow(padded)
fig.show()

Padding results

0 голосов
/ 24 сентября 2018

Чтобы ответить на второй вопрос:

import Image
import numpy as np
from scipy.misc import face

# example input
f = face()[200:500:2, 400:800:2]
# example output size
outy, outx = 480, 640

iny, inx, *_ = f.shape
iny -= 1; inx -= 1
yoffs, xoffs = (outy - iny) // 2, (outx - inx) // 2

Y, X = np.ogrid[:outy, :outx]
# transformation logic is essentially contained in line below
out = f[np.abs((Y - yoffs + iny) % (2*iny) - iny), np.abs((X - xoffs + inx) % (2*inx) - inx)]

Image.fromarray(out).save('m.png')

Результат:

enter image description here

...