2011-03-30 3 views
0

높이와 너비가 14000x18000 (~ 30MB) 인 비트 맵 이미지가 있습니다. 다른 이미지 처리 라이브러리 (OpenCV (OpenCvSharp 래퍼 사용), Aforge.NET ..)를 사용하여 이미지 처리 라이브러리를 처리하려고합니다. 그러나 비트 맵 이미지에 레이블을 지정하면 메모리 할당 문제가 발생합니다. 라이브러리는 레이블이 지정된 이미지를 32 비트 이미지에 매핑하려고 시도합니다.blob detectin, C# .Net의 큰 비트 맵 이미지 메모리 할당

적은 양의 메모리로 라벨 작업을 수행 할 수 있습니까? (이미지 자르기는 해결책이 아닙니다)

예를 들어 32 비트 이미지 대신 8 비트 이미지에 비트 맵 이미지를 레이블링 하시겠습니까? 경우

답변

1

는 8 비트 일에 대한 답이 없다 ... 그리고이 경우에도 ...

속도와 메모리 목적

, 나는 자르기하지 (이미지를 크기 조정 제안이 높은 것). this sample does과 같은 고품질 보간법을 사용하면 썸네일 (7.5MB 메신저 메모리)이 아닌 50 %로만 크기가 조절됩니다.

당신이 이것을하고 싶지 않다고 언급하지 않았고 아마도 라이브러리가 전체 해상도에서 더 나은 얼룩 감지를 수행 할 것이라고 생각하고 있습니다. 먼저 테스트 할 아이디어를 푸시 푸시하십시오. 견본 이미지의 전체 해상도 하위 섹션은 라이브러리가 처리 할 크기로 50 % 동일한 하위 섹션과 비교됩니다.

실제로이 작업을 수행하지 않으면 알 수 없습니다. 사진에서 사용할 수있는 최대 메모리 양을 계산하고 크기를 조정할 크기를 계산하여 안전을 위해 크기를 줄이십시오 (테스트시 문제가 발생할 때이를 파악할 수 있습니다). 물건이 원래 이미지에있는 곳을 돌보는 경우 요인으로 다시 스케일합니다.

+0

1GB 메모리를 할당하려고하는데 C#에서 "바이트를 할당하지 못했습니다"예외가 발생하지만 8GB 메모리가 있습니다. 필요한 것을 사용하도록 어떻게 할 수 있습니까? – cerezza

+0

@cerezza - 복잡하고 가슴 아픈 문제! 게다가 .NET은 실제로 가능한 한 많이 할당하지는 못합니다. 이유를 모릅니다. [이 스레드]에 대한 통찰력 (http://stackoverflow.com/questions/2985408/net-out-of-memory-troubleshooting). .net에서 거대한 메모리 덩어리를 할당하는 것은 많은 인터넷 검색을 수행하는 별도의 문제입니다. – FastAl

0

이 방법은 특정 문제를 해결할 수는 없지만 프레임을 2x2 (또는 3x3) 매트릭스로 분할/분할 한 다음 각 프레임을 개별적으로 처리하는 방법을 고려해 보았습니다. 그런 다음 4 개 (또는 9 개) 프레임에서 얼룩을 발견 한 위치를 기반으로 인접한 얼룩을 상호 연관시키고 합체하여 단일 얼룩을 만듭니다. 물론,이 높은 수준의 블롭 병합은 자신의 논리 여야합니다.

PS> 물론, Aforge에 대한 고도의 지식을 다뤄야합니다. 그렇게 실제 경험이 없습니다.