def run(self): print("Processing No.", self.index, "image") time1 = time.time() sigma = 1.6 num_intervals = 3 assumed_blur = 0.5 image_border_width = 5 image = self.image.astype('float32') base_image = SIFT.generateBaseImage(image, sigma, assumed_blur) # print("Processing No.", self.index, "step1.") num_octaves = SIFT.computeNumberOfOctaves(base_image.shape) # print("Processing No.", self.index, "step2.") gaussian_kernels = SIFT.generateGaussianKernels(sigma, num_intervals) # print("Processing No.", self.index, "step3.") gaussian_images = SIFT.generateGaussianImages(base_image, num_octaves, gaussian_kernels) # print("Processing No.", self.index, "step4.") dog_images = SIFT.generateDoGImages(gaussian_images) # print("Processing No.", self.index, "step5.") keypoints = SIFT.findScaleSpaceExtrema(gaussian_images, dog_images, num_intervals, sigma, image_border_width) # print("Processing No.", self.index, "step6.") keypoints = SIFT.removeDuplicateKeypoints(keypoints) # print("Processing No.", self.index, "step7.") keypoints = SIFT.convertKeypointsToInputImageSize(keypoints) # print("Processing No.", self.index, "step8.") descriptors = SIFT.generateDescriptors(keypoints, gaussian_images) # print("Processing No.", self.index, "finished.") threadLock.acquire() # 释放锁,开启下一个线程 self.list.append([self.index, keypoints, descriptors]) threadLock.release() time2 = time.time() c = time2 - time1 print("Processing No.", self.index, " costs ", c)