2011-02-17 7 views
0

사각형 (m x n 차원)이 아닌 이미지가 있습니다. 또한 그것의 크기는 밑이 2가 아니다 (즉, m = 2^k & n not = 2^k). I는 다음 사용 큰 사각형의 (두개의 다음 전력) 화상을 배치하여 처리했다 :쿼드 트리 문제 - 중복 정보 저장

int width = (int)Math.ceil(Math.pow(2, Math.log(img.width)/Math.log(2))); 
int height = (int)Math.ceil(Math.pow(2, Math.log(img.height)/Math.log(2))); 

큰 사이즈 산출에 따라, I는 사각형 세트는 최대 치수로 연신 될 즉 :

if (img.width > img.height) { 
    // draw width * width square 
} 

if (img.height > img.width) { 
    // draw height * height square 
} 

문제 : 그것은 트리의 모든 이미지 이외의 노드를 저장하는대로

쿼드 트리 지금은 완전히 다른 보인다. 이는 분명히 가정 된 이미지 데이터 (즉, 최소/최대 깊이) 및 전체 트리 형태 자체에 영향을 미친다. 내 질문은 효율적인 방법으로이 작업을 수행하고, 그렇다면 이미지에 속하지 않는 데이터를 저장하지 않는 방법은 무엇입니까? 누군가 정사각형이 아닌 이미지를 그리는 가장 좋은 방법이 아니라면 누군가 나를 올바른 방향으로 향하게 할 수 있습니까? 구글에 대한 모든 기사는 내 목적을 위해 너무 깊이있는 것 같습니다.

+1

quadtree는 일반적으로 월드 공간의 객체 (물리/논리)를 추적하는 데 사용됩니다. 이미지를 그릴 때 렌더링과 관련이있는 것은 무엇입니까? –

+1

쿼드 트리는 합리적인 양의 동일한 색상 영역이있는 이미지를 저장하는 데 아주 일반적입니다. 몇 픽셀에 걸쳐 다양한 색상이있는 경우 잘 처리되지 않습니다. 괜찮은 압축을 얻으려면 동일한 색의 더 큰 사각형이 필요합니다. – ventaur

답변

0

quadtrees에 대한 좋은 점은 동일한 데이터의 큰 덩어리를 저장한다는 것입니다. 여분의 빈 이미지 데이터는 전체 저장 용량 크기에 약간만 추가해야합니다. 나는, 이미지의 실제 원래 크기를 저장하는 데이터 구조와 함께 추가 정보 비트를 추가하는 것이 좋습니다. 쿼드 트리를 비 직렬화 할 때 실제 치수를 기반으로 추가 부품을 "잘라내어"원본을 생성 할 수 있습니다.

+0

어떻게하면 '여분의 부분을 잘랐습니까?' – user559142

+0

코드가 경계 외부에있는 노드를 처리 할 때마다이를 무시하고 다음 노드로 이동하십시오. 어떤 종류의 작업을 트리에서 수행하고 있습니까? –

+0

Java에 대한 지식이 있으면 직렬화되지 않은 이미지에서 getSubimage (x, y, width, height)를 사용합니다. 원의 이미지를 「큰 정사각형」의 0, 0에 격납하고있는 경우는, 단순하게 img.getSubimage (0, 0, originalWidth, originalHeight)가됩니다. – ventaur

0

아마도 나무가 (개념상의) 개별 픽셀로 끝나는 대신, 한 픽셀 당 p 픽셀의 작은 블록을 저장할 수 있습니다. 일부 픽셀 당 측면 당 블록 수는 2의 거듭 제곱이됩니다. 그렇게하면 구조에 또 다른 개념을 도입하는 대신에 나무가 멋지게 행동하게됩니다.