2013-03-26 2 views
0

아래에 표시된 잘못된 색상 이미지가 있습니다. 이 이미지를 각 false color 영역에 레이블을 지정할 수있는 배열로 변환하고 싶습니다. 따라서 나는 그 라벨 값을 사용하여 이미지에 접근 할 수있다. 나는 각 색상별로 지정된 특정 레이블에 거짓 색상 이미지를 매핑하는 방법

r_channel = image[:, :, 0] 
    g_channel = image[:, :, 1] 
    b_channel = image[:, :, 2] 
    label_map = (0.2989) * (r_channel) + (0.5870) * g_channel + (0.1140) * b_channel 
    label_map = label_map * 500/255 
    label_map = np.round(label_map).astype(int) 

를 사용하여 시도하지만 문제는이 경우 레이블을 반복받을 것입니다. I은 비 - 제로 값 인 "배경"로 "객체"를 제로로 간주되는 값의 배열을 지정해 1.

enter image description here

답변

0

라벨을 가져 오는 독특한 방법을 발견했습니다. 이것이 내가 한 일입니다.

r_channel = image[:, :, 0] 
    g_channel = image[:, :, 1] 
    b_channel = image[:, :, 2] 
    label_map = 1000000 * (r_channel) + 1000 * g_channel + b_channel 
    label_map = np.round(label_map).astype(int) 

이제 각 슈퍼 픽셀 영역에 고유 한 레이블이 표시됩니다.

1

부터 바람직 오름차순으로, 각 영역은 고유 라벨을 할 , 당신은 scipy.ndimage.label 기능을 사용 객체에 레이블을 지정할 수 있습니다 :

scipy.ndimage.label, (382) 영역을 사용
import scipy 
from scipy import ndimage 
import numpy as np 

fname='/tmp/splotches.png' 
arr = scipy.misc.imread(fname) 
print(arr.shape) 
# (160, 240, 3) 

r, g, b = np.rollaxis(arr, axis = -1) 
label_map = 0.2989 * r + 0.5870 * g + 0.1140 * b 
label_map = label_map * 500/255 
label_map = np.round(label_map).astype(int) 
print(label_map.shape) 
# (160, 240) 

seen = set() 
region = {} 
i = 1 
for val in label_map.flat: 
    if val not in seen: 
     seen.add(val) 
     mask = (label_map == val) 
     labeled, nr_objects = ndimage.label(mask) 
     for label in range(1, nr_objects+1): 
      assert np.any(labeled==label) 
      region[i] = labeled==label 
      i += 1 

print(len(region)) 
# 382 

이 발견되었다.

+0

제 질문을 분명히하지 않았다고 생각합니다. 사실, 내가 직면하고있는 문제는지도에서 사용 된 색상이 다른 지역에 따라 모두 다르다는 것입니다. 그러나 변환을 사용할 때'label_map = 0.2989 * r + 0.5870 * g + 0.1140 * b label_map = label_map * 500/255 label_map = np.round (label_map) .astype (int)' 일부 색상은 다음과 같아야합니다. 다른 것은 같은 가치를 얻는다. 나는이 일이 일어나기를 원하지 않으며 모든 지역이 고유 한 식별자를 갖기를 바랍니다. – Khushboo

+0

답을 고맙게 생각하지만 label_map에서 일부 지역의 '0.2989 * r + 0.5870 * g + 0.1140 * b'값이 비슷할 수 있습니다. 내가 생각하기에이 변환이 정확하지 않은 이유는 무엇입니까? 제가 게시 한 답변을 확인하십시오. 도와 줘서 고마워. :) – Khushboo

관련 문제