From ad39ec1be5eca0cb8c169e33dd5678965cfb17b7 Mon Sep 17 00:00:00 2001 From: Ashwani Rathee Date: Tue, 10 Aug 2021 23:39:54 +0530 Subject: [PATCH 1/3] Initial GLCM --- docs/examples/image_features/assets/glcm.png | Bin 0 -> 7677 bytes .../image_features/assets/scatter.png | Bin 0 -> 16081 bytes docs/examples/image_features/glcm.jl | 140 ++++++++++++++++++ 3 files changed, 140 insertions(+) create mode 100644 docs/examples/image_features/assets/glcm.png create mode 100644 docs/examples/image_features/assets/scatter.png create mode 100644 docs/examples/image_features/glcm.jl diff --git a/docs/examples/image_features/assets/glcm.png b/docs/examples/image_features/assets/glcm.png new file mode 100644 index 0000000000000000000000000000000000000000..de2d1d077b9a148cf13c3caae564a8f98de73347 GIT binary patch literal 7677 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 VJ>%bmcx=>yqlloDFSzS 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 z Date: Tue, 10 Aug 2021 23:41:29 +0530 Subject: [PATCH 2/3] remove plots --- docs/examples/image_features/glcm.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/examples/image_features/glcm.jl b/docs/examples/image_features/glcm.jl index 2a2ad1ed..37efe7c1 100644 --- a/docs/examples/image_features/glcm.jl +++ b/docs/examples/image_features/glcm.jl @@ -52,7 +52,6 @@ using Images, TestImages using ImageFeatures -using Plots img_src = testimage("coffee") From 8bf2ffc4cda598cd35834d92f09759b7e704055c Mon Sep 17 00:00:00 2001 From: Ashwani Rathee Date: Wed, 22 Sep 2021 21:01:20 +0530 Subject: [PATCH 3/3] Fixes some of the issues --- docs/examples/image_features/glcm.jl | 65 ++++++++++------------------ 1 file changed, 22 insertions(+), 43 deletions(-) diff --git a/docs/examples/image_features/glcm.jl b/docs/examples/image_features/glcm.jl index 37efe7c1..b8c81974 100644 --- a/docs/examples/image_features/glcm.jl +++ b/docs/examples/image_features/glcm.jl @@ -1,32 +1,32 @@ # --- -# cover: assets/glcm.gif +# cover: assets/glcm.png # title: Gray Level Co-occurrence Matrix -# description: This demo shows GLCM(Gray Level Co-occurrence Matrix) +# description: The first introduction to GLCM(Gray Level Co-occurrence Matrix) # author: Ashwani Rathee # date: 2021-08-9 # --- -# Gray Level Co-occurrence Matrix (GLCM) is used for texture analysis. +# Gray Level Co-occurrence Matrix (GLCM) is used for texture analysis. # We consider two pixels at a time, called the reference and the neighbour pixel. # We define a particular spatial relationship between the reference and neighbour -# pixel before calculating the GLCM. For eg, we may define the neighbour to be 1 +# pixel before calculating the GLCM. For example, we may define the neighbour to be 1 # pixel to the right of the current pixel, or it can be 3 pixels above, or 2 pixels # diagonally (one of NE, NW, SE, SW) from the reference. # Once a spatial relationship is defined, we create a GLCM of size (Range of -# Intensities x Range of Intensities) all initialised to 0. For eg, a 8 bit single +# Intensities x Range of Intensities) all initialised to 0. For example, a 8 bit single # channel Image will have a 256x256 GLCM. We then traverse through the image and for # every pair of intensities we find for the defined spatial relationship, we increment # that cell of the matrix. # ## Gray Level Co-occurence Matrix -# Each entry of the GLCM[i,j] holds the count of the number of times that pair of +# Each entry of the GLCM[i,j] holds the count of the number of times that pair of # intensities appears in the image with the defined spatial relationship. # ![](assets/glcm.png) -# The matrix may be made symmetrical by adding it to its transpose and normalised to +# The matrix may be made symmetrical by adding it to its transpose and normalised to # that each cell expresses the probability of that pair of intensities occurring in the image. # Once the GLCM is calculated, we can find texture properties from the matrix to represent @@ -55,25 +55,23 @@ using ImageFeatures img_src = testimage("coffee") -# In this section, we will see how glcm could be calculated and how results are -# different for different types of textures. We will be using 4 `10x10` pixels +# In this section, we will see how glcm could be calculated and how results are +# different for different types of textures. We will be using 4 `11x11` pixels # patches as shown below. img_patch1 = img_src[170:180, 20:30] # Patch 1 & Patch 2 are from table with unidirectional texture img_patch2 = img_src[190:200, 20:30] -img_patch3 = img_src[40:50, 310:320] # Patch 3 & Patch 4 are from coffe inside cup +img_patch3 = img_src[40:50, 310:320] # Patch 3 & Patch 4 are from coffee inside cup img_patch4 = img_src[60:70, 320:330] img_patches = [img_patch1, img_patch2, img_patch3, img_patch4] mosaicview(img_patches; nrow=1, npad=1, fillvalue=1) -# As we can already take a guess, patch 1 and patch 2 are very similiar(unidirectional texture) and +# As we can already take a guess, patch 1 and patch 2 are very similiar(unidirectional texture) and # that's also true for patch 3 and patch 4 which are very similiar(smooth texture). glcm_results = []; -glcm_sym_results = []; -glcm_norm_results = []; -# The `distances` and `angles` arguments may be a single integer or a vector of +# The `distances` and `angles` arguments may be a single integer or a vector of # integers if multiple GLCMs need to be calculated. The `mat_size` argument is used # to define the granularity of the GLCM. @@ -81,46 +79,24 @@ distance = 5 angle = 0 mat_size = 4 -for patch in img_patches - glcm_output = glcm(patch, distance, angle, mat_size) - glcm_sym_output = glcm_symmetric(patch, distance, angle, mat_size) - glcm_norm_output = glcm_norm(patch, distance, angle, mat_size) - push!(glcm_results, glcm_output) - push!(glcm_sym_results, glcm_sym_output) - push!(glcm_norm_results, glcm_norm_output) -end +glcm_results = [glcm(patch, distance, angle, mat_size) for patch in img_patches] + glcm_results # GLCM matrix # GLCM symmetrical is basically `glcm_output .+ transpose(glcm_output)` - -glcm_sym_results # GLCM Symmetrical matrix - # GLCM normalised is basically `glcm_output ./ sum(glcm_output)` -glcm_norm_results # GLCM normalised matrix - -# In next part, we will see how the GLCM matrix calculation can be used to +# In next part, we will see how the GLCM matrix calculation can be used to # differentiate textures based on statistics. `glcm_prop` is used to calculate # various properties. # Various properties can be calculated like `mean`, `variance`, `correlation`, # `contrast`, `IDM` (Inverse Difference Moment),`ASM` (Angular Second Moment), # `entropy`, `max_prob` (Max Probability), `energy` and `dissimilarity`. -property = [correlation,dissimilarity] -x = [] -y = [] - -for i in glcm_results - point = [] - for j in property - glcm_pro = glcm_prop(i, j) - push!(point,glcm_pro) - end - push!(x,point[1]) - push!(y,point[2]) -end -x,y +glcm_correlation = [glcm_prop(x, correlation) for x in glcm_results] +glcm_dissimilarity = [glcm_prop(x, dissimilarity) for x in glcm_results] +glcm_correlation, glcm_dissimilarity # These properties can be directly calculated too using syntax `property(glcm_matrix)`. # For example: To calculate correlation, we can do `correlation(glcm(img_patch1))`` @@ -134,6 +110,9 @@ x,y # Graph can be made using GLCM symmetric and normalised version, which produces very similiar outputs to give # us a hint at how similiar textures have similiar properties. +save("assets/glcm.png", img_src) #src + # References: # - https://en.wikipedia.org/wiki/Co-occurrence_matrix -# - Scikit GLCM example \ No newline at end of file +# - Scikit GLCM example +# - http://www.code.ucsd.edu/pcosman/glcm.pdf