【发布时间】:2020-01-30 20:16:55
【问题描述】:
我正在解决一个图像分割问题。为了提高模型的准确性,我遇到了以下预处理步骤-
首先,ROI外边界的像素集合是de 终止的,即在 ROI 之外并且是邻居的像素 (使用四邻域)到其中的像素。然后,每个像素值 这个集合的平均值被它的邻居的平均值替换(这个 时间使用八邻域)在 ROI 内。最后,投资回报率是 通过包含这组更改的像素来扩展。这个过程是 重复,可以看作是人为地增加了投资回报率。
在问here 的问题时,我得到了最初的方法来获取图像周围的黑色区域并将其用作 alpha 蒙版。
我解决这个问题的方法是找到所有边界像素(在 FOV 之外),这是我使用以下代码获得的红色部分之外的第一个黑色像素-
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 个部分(为糟糕的插图道歉)-
现在,在确定 FOV 外的边界像素后,我需要用相邻像素(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)
【问题讨论】:
标签: python image image-processing graphics computer-vision