>source

회색조 이미지에서 얻은 통합 이미지에서 대비 맵을 만들려고 합니다. 적분 이미지가 함수에 전달됩니다.skimage.transform.integral.integrate두 상자가 경계를 벗어나지 않고 맞는 이미지의 모든 픽셀에 대해 지정된 중앙 및 서라운드 크기 상자의 중앙 및 서라운드 평균을 계산하는 데 사용됩니다. 내 현재 솔루션은 이미지의 x, y 좌표에 대해 이중 for 루프를 사용합니다. 나는 항상 NumPy 배열을 사용하여 벡터화된 접근 방식을 생각하는 것을 꺼립니다. 특히 이 예에서와 같이 인접 픽셀의 정보에 액세스해야 할 때 그렇습니다. code는 다음과 같습니다.

def create_contrast_map(image, cs, ss):
    # Create black image according to image shape
    y, x= image.shape
    contrast_map= np.zeros((y, x))
    # Get distance from center pixel to border of windows
    cd, sd= cs //2, ss //2
    # Iterate over pixels in bound of surround distance, compute center-and surround average,
    # and set surround average -center average at corresponding position in contrast_map
    for i in range(sd, y-sd):
        for j in range(sd, x-sd):
            ca= integrate(image, (i-cd, j-cd), (i+cd, j+cd)) /cs ** 2
            sa= integrate(image, (i-sd, j-sd), (i+sd, j+sd)) /ss ** 2
            contrast_map[i, j]= sa -ca
    # Return contrast map without borders
    return contrast_map[sd:y-sd, sd:x-sd]

분명히, 모든 픽셀에 대한 중앙 및 서라운드 평균을 모두 계산하려면 이 방법으로 많은 시간이 걸립니다.

튜플 목록에 대한 이야기를 통합합니다... 다중 조회에는 비효율적으로 들립니다. 통합 호출 자체는 필요하지 않습니다. 조회를 직접 할 수 있습니다. 조회 색인을 계산하기 위해 색인 배열(np.mgrid 또는 기타)을 생성하는 것이 좋습니다. 정수 이미지에 필요한 4개의 조회에 대해 해당 인덱스 배열 중 4개를 생성합니다. 음, 하나, 그리고 스칼라 오프셋을 더하거나 빼서 오프셋된 인덱스 배열을 생성합니다.

Christoph Rackwitz2021-10-24 14:24:53

이러한 종류의 문제에 대해 가장 쉽고 빠른 솔루션은numa에 의해 가속화된 루프를 사용하는 것입니다.

yann ziselman2021-10-24 14:37:27
  • 이전 Amazon S3에서 GCP 인스턴스로 파일을 지속적으로 전송하는 시스템 아키텍처
  • 다음 javascript : 자바 스크립트에서 버튼을 클릭하면 테이블 데이터 행 표시