Удаление цветового шума из целого патча слайд-изображения - PullRequest
0 голосов
/ 25 февраля 2020

После полудня,

Я занимаюсь глубоким изучением целых изображений слайдов (биомедицинские изображения физических образцов). Я использую openslide для разбиения всего слайд-изображения (размером 5 ГБ) на более мелкие фрагменты всего изображения, а затем преобразую его в цветовое пространство RGB (я считаю, что патч находится в RGBA как объект изображения PIL). Если я использую 5-кратное увеличение, я обнаруживаю, что когда я сохраняю изображение вниз, я обнаруживаю странный шум в пикселе, который выглядит так, как будто многие пиксели флуоресцентны (не присутствуют при больших увеличениях). Мой вопрос: кто-нибудь знает, почему это вызывает функция read_region библиотеки Openslide, или они знают, как я могу выполнить некоторую постобработку, чтобы удалить этот артефакт из изображения? Я попытался способы преобразования изображения см. Ниже

1.

for w in range(boundaries[0][0], boundaries[0][1], 500):
        for h in range(boundaries[1][0], boundaries[1][1], 500):
            patch = scan.read_region((w-2000, h-2000), 3, (500, 500))
            img2 = img[h-2000:h+2000, w-2000:w+2000,:]
            patch=np.asarray(patch)
            patchRGB = cv2.cvtColor(patch, cv2.COLOR_RGBA2RGB)
            print(np.mean(patchRGB), img2.shape)
            if (img2.shape == (4000, 4000, 3) and np.mean(patchRGB) < 200) and np.mean(patchRGB) > 50:
                    cv2.imwrite('output/test/images/'+os.path.basename(ndpi)[:-5]+'_'+str(w)+'_'+str(h)+'.png', patchRGB)
                    cv2.imwrite('output/test/masks/'+os.path.basename(ndpi)[:-5]+'_'+str(w)+'_'+str(h)+'_masks.png', img2) 

2.

for w in range(boundaries[0][0], boundaries[0][1], 500):
        for h in range(boundaries[1][0], boundaries[1][1], 500):
            patch = scan.read_region((w-2000, h-2000), 3, (500, 500))
            img2 = img[h-2000:h+2000, w-2000:w+2000,:]
            patchRGB = patch.convert('RGB')
            print(np.mean(patchRGB), img2.shape)
            if (img2.shape == (4000, 4000, 3) and np.mean(patchRGB) < 200) and np.mean(patchRGB) > 50:
                    patchRGB.save('output/5x/images/'+os.path.basename(ndpi)[:-5]+'_'+str(w)+'_'+str(h)+'.png')
                    cv2.imwrite('output/5x/masks/'+os.path.basename(ndpi)[:-5]+'_'+str(w)+'_'+str(h)+'_masks.png', img2) 

patch from whole slide image containing noise

...