[PYTHON] Expérience du filtre laplacien

Présentation Je voulais détecter les bords (en fait, c'est juste une différence de couleur plutôt qu'un bord), et je me demandais quel filtre laplacien dans 4 ou 8 directions était le meilleur, alors j'ai expérimenté.

Image d'entrée ![gray.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/2b678c00-02d5-185b-3ff9-eb5614a0e74b.png)

Filtre laplacien à 4 voies ![img_lap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/3748afe0-b3dc-dfcb-dfe5-ece09439f834.png)

Filtre laplacien à 8 directions ![img_lap copy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/7a69082e-6639-cb43-596d-2f3ed706d6ee.png)

Conclusion Presque la même! Comme le résultat est le même, j'aimerais utiliser le filtre à 8 directions, qui semble avoir moins d'effet sur la rotation pour le moment.

Code 8 directions 4 directions Veuillez choisir votre favori
   def LaplacianLayer(self, img):
        # 4 direction Laplacian
        laplacian_filter = torch.cuda.FloatTensor(
            [[0, 1, 0], [1, -4, 1], [0, 1, 0]]).view(1, 1, 3, 3)
        # 8 direction Laplacian
        # laplacian_filter = torch.cuda.FloatTensor(
        #     [[1, 1, 1], [1, -8, 1], [1, 1, 1]]).view(1, 1, 3, 3)

        gray = self.getGrayImage(img)

        img_lap = torch.nn.functional.conv2d(input=gray,
                                            weight=Variable(laplacian_filter),
                                            stride=1,
                                            padding=0)

        img_lap = torch.abs(img_lap)

        return img_lap

    def getGrayImage(self,rgbImg):
        gray = 0.114*rgbImg[:,0,:,:] + 0.587*rgbImg[:,1,:,:] + 0.299*rgbImg[:,2,:,:]
        gray = torch.unsqueeze(gray,1)
        return gray

Références [Traitement d'image] Principes, fonctionnalités et formules de calcul pour les filtres laplaciens https://algorithm.joho.info/image-processing/laplacian-filter/

Recommended Posts

Expérience du filtre laplacien
inspecter l'expérience
expérience svm 1
Extraction de bords avec python + OpenCV (filtre Sobel, filtre laplacien)