2016-08-29 13 views
0

색인화 된 색상의 분할 마스크가 있습니다. 불행히도 물체의 가장자리에는 (착색 된) 소음이 있습니다. 하나의 색상 영역에서 다음 색상 영역으로의 전환시, 두 색상 영역을 분리하는 서로 다른 색상의 작은 픽셀 영역이 있습니다 (가장자리의 투명한 픽셀 변환으로 인해 발생 함).컬러 이미지에서 작은 픽셀 영역 (가장자리)을 제거/재 할당 할 수 있습니까? (MATLAB)

See image: Segmentation with Noise

나는 이웃 큰 지역 중 하나의 색상을 지정하여 (MATLAB과)이 노이즈를 제거 할. 중요하지 않은 부분은 작은 부분을 제거하는 것입니다. ANY 색상의 작은 영역을이 방법으로 제거 할 수 있다고 가정 할 수 있습니다 (인접한 큰 영역에 재 할당).

이진 이미지의 경우 bwareaopen (이 Q & A : Remove small chunks of labels in an image으로 제안)을 사용할 수 있습니다. 이미지를 각 색상의 이진 이미지로 변환하면 문제를 해결할 수 있지만 많은 비용이 들며 재 할당 문제가 해결됩니다. 이렇게하기위한보다 우아한 방법이 있기를 바랍니다. 다음

+0

어떻게 처음에 인덱스를 지정 했습니까? 보간이나 잘못된 인덱스를 생성하는 것을 사용하면 안됩니다. 어쩌면 한 걸음 뒤로 물러나서 결과를 사후 처리하는 대신 과제를 고칠 수도 있습니다. – Suever

+0

그건 훌륭한 아이디어입니다. 만약 라벨을 직접 작성했다면 이미지를 분할 할 때 투명성을 피할 수 있었을 것입니다. 이제는 주어진 레이블로 작업해야하므로 옵션이 아닙니다 :/ – Honeybear

+0

예를 들어'[1, 2, 3]'의 값을 인덱싱 했습니까? – Suever

답변

1

확인 : 인덱스 이미지

  • 변환 RGB.
  • 색인 된지도에 중간 값 필터를 적용하십시오.
  • 변환 다시 RGB

RGB = imread('GylzKm.png'); 

%Convert RGB to indexed image with 4 levels 
[X, map] = rgb2ind(RGB, 4); 

%Apply median filter on 4 levels images 
X = medfilt2(X, [5, 5]); 

%Convert indexed image back to RGB. 
J = ind2rgb(X, map); 

figure;imshow(J); 

에 검은 색 테두리는 약간의 문제가있다.

enter image description here

+0

감사합니다 - 이것은 매력처럼 작동합니다! 이미 색인 된 이미지가 있었으므로 첫 번째 단계와 마지막 단계가 더 이상 사용되지 않습니다. 커널 크기 ('X = medfilt2 (X, [3, 3]);')를 줄임으로써 그림에 검은 색 테두리로 나타나는 이슈를 제거 할 수있었습니다. 남은 유일한 문제는 검은 색과 빨간색 사이의 갈색 픽셀이었다. 검정으로 색인 된 모든 픽셀을 흰색으로 대체하면 갈색 노이즈도 제거됩니다. 색인 된 색상은 갈색/검은 색 혼합에 가까운 갈색을 신경 쓰지 않아야하는 이유가 궁금합니다. 어쩌면 문제는 색인 순서 때문일 수 있습니다. (검정 = 0, 갈색 = 1, 녹색 = 2, 빨간색 = 4, 흰색 = 6, ...) – Honeybear

+0

나는 이렇게 간단한 해결책을 찾을 수 있었다. 'medfilt2'를 사용하는 아이디어는 빠르게 나타 났지만, 가장 가까운 색상을 얻으려면'rgb2ind'를 사용할 수 있다는 것을 깨달았습니다. 행운이었습니다 ... 어떻게 RGB로 변환하지 않고 해결 했습니까? 'imapprox' 또는'medfilt2' 만 사용 했습니까? – Rotem

+0

이미'medfilt2'를 사용했습니다. 왜냐하면 앞서 언급했듯이 이미 색인 된 컬러 이미지가 있었기 때문에 ('rgb2ind'를 적용하면 아무런 효과가 없거나 아무것도 변경하지 못했을 것입니다). 어쨌든 : 나는 medfilt2 아이디어가 마음에 든다. 다시 한번 감사드립니다 :) – Honeybear