Skip to content

Commit 22f99a9

Browse files
authored
Merge pull request #182 from WilhelmusLab/165-optimize-discriminate_ice_water
Reduce memory allocations ice-water-disc
2 parents 768960f + d67174a commit 22f99a9

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

src/ice-water-discrimination.jl

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ function discriminate_ice_water(
5757
clouds_channel = IceFloeTracker.create_clouds_channel(
5858
cloudmask_bitmatrix, reflectance_image
5959
)
60-
reflectance_image_band7 = channelview(reflectance_image)[1, :, :]
60+
reflectance_image_band7 = @view(channelview(reflectance_image)[1, :, :])
6161
image_sharpened_gray = IceFloeTracker.imsharpen_gray(
6262
image_sharpened, landmask_bitmatrix
6363
)
@@ -76,12 +76,12 @@ function discriminate_ice_water(
7676
image_floes = IceFloeTracker.apply_landmask(reflectance_image, landmask_bitmatrix) # source reflectance, landmasked
7777
image_floes_view = channelview(image_floes)
7878

79-
floes_band_2 = image_floes_view[2, :, :]
80-
floes_band_1 = image_floes_view[3, :, :]
79+
floes_band_2 = @view(image_floes_view[2, :, :])
80+
floes_band_1 = @view(image_floes_view[3, :, :])
8181

8282
# keep pixels greater than intensity 100 in bands 2 and 1
83-
floes_band_2_keep = floes_band_2[floes_band_2 .> floes_threshold]
84-
floes_band_1_keep = floes_band_1[floes_band_1 .> floes_threshold]
83+
floes_band_2_keep = floes_band_2[floes_band_2.>floes_threshold]
84+
floes_band_1_keep = floes_band_1[floes_band_1.>floes_threshold]
8585

8686
_, floes_bin_counts = ImageContrastAdjustment.build_histogram(floes_band_2_keep, nbins)
8787
_, vals = Peaks.findmaxima(floes_bin_counts)
@@ -129,15 +129,21 @@ function discriminate_ice_water(
129129

130130
normalized_image_copy = copy(normalized_image)
131131
normalized_image_copy[normalized_image_copy.>THRESH] .= 0
132-
normalized_filtered = normalized_image - (normalized_image_copy * 3)
132+
@. normalized_image_copy = normalized_image - (normalized_image_copy * 3)
133133

134-
mask_image_clouds = (
135-
image_clouds .< mask_clouds_lower .|| image_clouds .> mask_clouds_upper
134+
# reusing memory allocated in landmask_bitmatrix
135+
# used to be mask_image_clouds
136+
@. landmask_bitmatrix = (
137+
image_clouds < mask_clouds_lower || image_clouds > mask_clouds_upper
136138
)
137-
band7_masked = image_cloudless .* .!mask_image_clouds
138-
ice_water_discriminated_image = clamp01nan.(normalized_filtered - (band7_masked * 3))
139139

140-
return ice_water_discriminated_image
140+
# reusing image_cloudless - used to be band7_masked
141+
@. image_cloudless = image_cloudless * !landmask_bitmatrix
142+
143+
# reusing normalized_image_copy - used to be ice_water_discriminated_image
144+
@. normalized_image_copy = clamp01nan(normalized_image_copy - (image_cloudless * 3))
145+
146+
return normalized_image_copy
141147
end
142148

143149
function _check_threshold_50(

0 commit comments

Comments
 (0)