Я решаю проблему сегментации изображения. Чтобы повысить точность модели, я наткнулся на следующий шаг предварительной обработки:
Сначала определяется набор пикселей внешней границы области интереса, т. Е. Пикселей, находящихся за пределами области интереса. и являются соседями (используя четыре окрестности) для пикселей внутри него. Затем каждое значение пикселя этого набора заменяется средним значением его соседей (на этот раз с использованием восьми соседей) внутри области интереса. Наконец, ROI расширяется путем включения этого измененного набора пикселей. Этот процесс повторяется и может рассматриваться как искусственное увеличение ROI.
Изображение после применения следующего шага ниже -
ИзображениеЯ применяю вышеуказанный шаг ниже -
Задав вопрос здесь , я получил первоначальный подход, чтобы взять черную область, окружающую мое изображение, ииспользуйте его как альфа-маску.
Мой подход к решению этой проблемы состоит в том, чтобы найти все граничные пиксели (вне поля зрения), которые являются первыми черными пикселями вне красной части, которые я получил с помощью приведенного ниже кода:
my_list = []
for i in range(img.shape[0]):
for j in range(img.shape[1]):
if (j+1)<=564:
if (img[i][j+1]==255) and (img[i][j-1]!=255):
my_list.append([i,j])
elif (j+1)<=564:
if img[i][j+1]==0 and img[i][j]!=0:
my_list.append([i,j])
elif (i-1)>=0:
if img[i-1][j]==255 and img[i][j]==0 :
my_list.append([i,j])
elif (i+1) >=0:
if img[i+1][j]==255 and img[i][j]==0:
my_list.append([i,j])
Моя идеяза приведенным выше кодом я могу разделить маску на 4 секции и затем найти граничные пиксели в соответствии с этим - я выделил 4 секции ниже (извинения за плохую иллюстрацию) -
Теперь, после определения граничных пикселей вне поля зрения, мне нужно заменить их на среднее значение соседних пикселей (8-соседей), которое в данном случае будет средним значением 3 пикселей в качестве пикселя. который мы модифицируем, всегда будет в углу, как показано ниже -
Так что мои вопросы -
1) Правильно ли мыслительный процесс?
2) Я не знаю, как изменить пиксели соседними пикселями?
Любой другой подход к его решению также приветствуется.
Редактировать --- Решение проблемы в соответствии сответить
while(notroi):
border_pixels = []
for i in range(img.size[0]):
for j in range(img.size[1]):
if [i,j] not in roi and ([i+1, j] in roi or [i-1, j] in roi or [i, j+1] in roi or [i, j-1] in roi):
border_pixels.append([i,j])
for (each_i,each_j) in border_pixels:
color_sum = 0
count = 1
eight_neighbourhood = [[each_i-1,each_j],[each_i+1,each_j],[each_i,each_j-1],[each_i,each_j+1],[each_i-1,each_j-1],[each_i-1,each_j+1],[each_i+1,each_j-1],[each_i+1,each_j+1]]
for pix_i,pix_j in eight_neighbourhood:
if (pix_i,pix_j) in roi:
color_sum+=pixelMap[pix_i,pix_j]
count+=1
pixelMap[each_i,each_j]=(color_sum//count)
for (each_i,each_j) in border_pixels:
roi.append([each_i,each_j])
border_pixels.remove([each_i,each_j])
notroi = notroi-1
print(notroi)
Редактировать: полученное изображение -