1- function glcm {T<:Real} (img:: AbstractArray{T, 2} , distance:: Integer , angle:: Real , mat_size:: Integer = 16 )
1+ function glcm (img:: AbstractArray{T, 2} , distance:: Integer , angle:: Real , mat_size:: Integer = 16 ) where T <: Real
22 max_img = maximum (img)
33 img_rescaled = map (i -> max (1 , Int (ceil (i * mat_size / max_img))), img)
44 _glcm (img_rescaled, distance, angle, mat_size)
55end
66
7- function glcm {T<:Real, A<:Real} (img:: AbstractArray{T, 2} , distances:: Array{Int, 1} , angles:: Array{A, 1} , mat_size:: Integer = 16 )
7+ function glcm (img:: AbstractArray{T, 2} , distances:: Array{Int, 1} , angles:: Array{A, 1} , mat_size:: Integer = 16 ) where {T <: Real , A <: Real }
88 max_img = maximum (img)
99 img_rescaled = map (i -> max (1 , Int (ceil (i * mat_size / max_img))), img)
1010 glcm_matrices = [_glcm (img_rescaled, d, a, mat_size) for d in distances, a in angles]
1111 glcm_matrices
1212end
1313
14- function glcm {T<:Colorant} (img:: AbstractArray{T, 2} , distance:: Integer , angle:: Real , mat_size:: Integer = 16 )
14+ function glcm (img:: AbstractArray{T, 2} , distance:: Integer , angle:: Real , mat_size:: Integer = 16 ) where T <: Colorant
1515 img_rescaled = map (i -> max (1 , Int (ceil ((reinterpret (gray (convert (Gray{N0f8}, i)))) * mat_size / 256 ))), img)
1616 _glcm (img_rescaled, distance, angle, mat_size)
1717end
1818
19- function glcm {T<:Colorant, A<:Real} (img:: AbstractArray{T, 2} , distances:: Array{Int, 1} , angles:: Array{A, 1} , mat_size:: Integer = 16 )
19+ function glcm (img:: AbstractArray{T, 2} , distances:: Array{Int, 1} , angles:: Array{A, 1} , mat_size:: Integer = 16 ) where {T <: Colorant , A <: Real }
2020 img_rescaled = map (i -> max (1 , Int (ceil ((reinterpret (gray (convert (Gray{N0f8}, i)))) * mat_size / 256 ))), img)
2121 glcm_matrices = [_glcm (img_rescaled, d, a, mat_size) for d in distances, a in angles]
2222 glcm_matrices
2323end
2424
25- glcm {T<:Union{Colorant, Real}, A<:Real} (img:: AbstractArray{T, 2} , distances:: Int , angles:: Array{A, 1} , mat_size:: Integer = 16 ) = glcm (img, [distances], angles, mat_size)
26- glcm {T<:Union{Colorant, Real}} (img:: AbstractArray{T, 2} , distances:: Array{Int, 1} , angles:: Real , mat_size:: Integer = 16 ) = glcm (img, distances, [angles], mat_size)
25+ glcm (img:: AbstractArray{T, 2} , distances:: Int , angles:: Array{A, 1} , mat_size:: Integer = 16 ) where {T <: Union{Colorant, Real} , A <: Real } = glcm (img, [distances], angles, mat_size)
26+ glcm (img:: AbstractArray{T, 2} , distances:: Array{Int, 1} , angles:: Real , mat_size:: Integer = 16 ) where {T <: Union{Colorant, Real} } = glcm (img, distances, [angles], mat_size)
2727
28- function _glcm {T} (img:: AbstractArray{T, 2} , distance:: Integer , angle:: Number , mat_size:: Integer )
28+ function _glcm (img:: AbstractArray{T, 2} , distance:: Integer , angle:: Number , mat_size:: Integer ) where T
2929 co_oc_matrix = zeros (Int, mat_size, mat_size)
3030 sin_angle = sin (angle)
3131 cos_angle = cos (angle)
@@ -70,7 +70,7 @@ function glcm_norm(img::AbstractArray, distances, angles, mat_size)
7070 co_oc_matrices_norm
7171end
7272
73- function glcm_prop {T<:Real} (gmat:: Array{T, 2} , window_height:: Integer , window_width:: Integer , property:: Function )
73+ function glcm_prop (gmat:: Array{T, 2} , window_height:: Integer , window_width:: Integer , property:: Function ) where T <: Real
7474 k_h = Int (floor (window_height / 2 ))
7575 k_w = Int (floor (window_width / 2 ))
7676 glcm_size = size (gmat)
@@ -82,59 +82,59 @@ function glcm_prop{T<:Real}(gmat::Array{T, 2}, window_height::Integer, window_wi
8282 prop_mat
8383end
8484
85- glcm_prop {T<:Real} (gmat:: Array{T, 2} , window_size:: Integer , property:: Function ) = glcm_prop (gmat, window_size, window_size, property)
85+ glcm_prop (gmat:: Array{T, 2} , window_size:: Integer , property:: Function ) where {T <: Real } = glcm_prop (gmat, window_size, window_size, property)
8686
87- function glcm_prop {T<:Real} (gmat:: Array{T, 2} , property:: Function )
87+ function glcm_prop (gmat:: Array{T, 2} , property:: Function ) where T <: Real
8888 property (gmat)
8989end
9090
91- function contrast {T<:Real} (glcm_window:: Array{T, 2} )
91+ function contrast (glcm_window:: Array{T, 2} ) where T <: Real
9292 sum ([(id[1 ] - id[2 ]) ^ 2 * glcm_window[id] for id in CartesianRange (size (glcm_window))])
9393end
9494
95- function dissimilarity {T<:Real} (glcm_window:: Array{T, 2} )
95+ function dissimilarity (glcm_window:: Array{T, 2} ) where T <: Real
9696 sum ([glcm_window[id] * abs (id[1 ] - id[2 ]) for id in CartesianRange (size (glcm_window))])
9797end
9898
99- function glcm_entropy {T<:Real} (glcm_window:: Array{T, 2} )
99+ function glcm_entropy (glcm_window:: Array{T, 2} ) where T <: Real
100100 - sum (map (i -> i * log (i), glcm_window))
101101end
102102
103- function ASM {T<:Real} (glcm_window:: Array{T, 2} )
103+ function ASM (glcm_window:: Array{T, 2} ) where T <: Real
104104 sum (map (i -> i ^ 2 , glcm_window))
105105end
106106
107- function IDM {T<:Real} (glcm_window:: Array{T, 2} )
107+ function IDM (glcm_window:: Array{T, 2} ) where T <: Real
108108 sum ([glcm_window[id] / (1 + (id[1 ] - id[2 ]) ^ 2 ) for id in CartesianRange (size (glcm_window))])
109109end
110110
111- function glcm_mean_ref {T<:Real} (glcm_window:: Array{T, 2} )
111+ function glcm_mean_ref (glcm_window:: Array{T, 2} ) where T <: Real
112112 sumref = sum (glcm_window, 2 )
113113 meanref = sum ([id * sumref[id] for id = 1 : size (glcm_window)[1 ]])
114114 meanref
115115end
116116
117- function glcm_mean_neighbour {T<:Real} (glcm_window:: Array{T, 2} )
117+ function glcm_mean_neighbour (glcm_window:: Array{T, 2} ) where T <: Real
118118 sumneighbour = sum (glcm_window, 1 )
119119 meanneighbour = sum ([id * sumneighbour[id] for id = 1 : size (glcm_window)[2 ]])
120120 meanneighbour
121121end
122122
123- function glcm_var_ref {T<:Real} (glcm_window:: Array{T, 2} )
123+ function glcm_var_ref (glcm_window:: Array{T, 2} ) where T <: Real
124124 mean_ref = glcm_mean_ref (glcm_window)
125125 sumref = sum (glcm_window, 2 )
126126 var_ref = sum ([((id - mean_ref) ^ 2 ) * sumref[id] for id = 1 : size (glcm_window)[1 ]])
127127 var_ref ^ 0.5
128128end
129129
130- function glcm_var_neighbour {T<:Real} (glcm_window:: Array{T, 2} )
130+ function glcm_var_neighbour (glcm_window:: Array{T, 2} ) where T <: Real
131131 mean_neighbour = glcm_mean_neighbour (glcm_window)
132132 sumneighbour = sum (glcm_window, 1 )
133133 var_neighbour = sum ([((id - mean_neighbour) ^ 2 ) * sumneighbour[id] for id = 1 : size (glcm_window)[2 ]])
134134 var_neighbour ^ 0.5
135135end
136136
137- function correlation {T<:Real} (glcm_window:: Array{T, 2} )
137+ function correlation (glcm_window:: Array{T, 2} ) where T <: Real
138138 mean_ref = glcm_mean_ref (glcm_window)
139139 var_ref = glcm_var_ref (glcm_window)
140140 mean_neighbour = glcm_mean_neighbour (glcm_window)
@@ -145,10 +145,10 @@ function correlation{T<:Real}(glcm_window::Array{T, 2})
145145 sum ([glcm_window[i, j] * (i - mean_ref) * (j - mean_neighbour) for i = 1 : size (glcm_window)[1 ], j = 1 : size (glcm_window)[2 ]]) / (var_ref * var_neighbour)
146146end
147147
148- function max_prob {T<:Real} (glcm_window:: Array{T, 2} )
148+ function max_prob (glcm_window:: Array{T, 2} ) where T <: Real
149149 maxfinite (glcm_window)
150150end
151151
152- function energy {T<:Real} (glcm_window:: Array{T, 2} )
152+ function energy (glcm_window:: Array{T, 2} ) where T <: Real
153153 ASM (glcm_window) ^ 0.5
154154end
0 commit comments