Skip to content
Snippets Groups Projects
Commit f10b9cc7 authored by Russel Arbore's avatar Russel Arbore
Browse files

simplify edge code

parent 776a69d6
No related branches found
No related tags found
1 merge request!210A whole bunch of optimization
Pipeline #201965 failed
...@@ -43,35 +43,16 @@ fn laplacian_estimate<n, m, sz: usize>( ...@@ -43,35 +43,16 @@ fn laplacian_estimate<n, m, sz: usize>(
@image_loop for row = 0 to n { @image_loop for row = 0 to n {
for col = 0 to m { for col = 0 to m {
// Copy data for dilation filter
@shr1 let imageArea : f32[sz, sz];
@filter_loop for i = 0 to sz {
for j = 0 to sz {
imageArea[i, j] = if row + i < r
|| row + i - r > n - 1
|| col + j < r
|| col + j - r > m - 1 then MIN_BR
else input[row + i - r, col + j - r];
}
}
// Compute pixel of dilated image // Compute pixel of dilated image
let dilated = MIN_BR; let dilated = MIN_BR;
@filter_loop for i = 0 to sz { @filter_loop for i = 0 to sz {
for j = 0 to sz { for j = 0 to sz {
dilated = max!(dilated, imageArea[i, j] * structure[i, j]); let filter = if row + i < r
} || row + i - r > n - 1
} || col + j < r
|| col + j - r > m - 1 then MIN_BR
// Data copy for erotion filter else input[row + i - r, col + j - r];
@shr2 let imageArea : f32[sz, sz]; dilated = max!(dilated, filter * structure[i, j]);
@filter_loop for i = 0 to sz {
for j = 0 to sz {
imageArea[i, j] = if row + i < r
|| row + i - r > n - 1
|| col + j < r
|| col + j - r > m - 1 then MAX_BR
else input[row + i - r, col + j - r];
} }
} }
...@@ -79,7 +60,12 @@ fn laplacian_estimate<n, m, sz: usize>( ...@@ -79,7 +60,12 @@ fn laplacian_estimate<n, m, sz: usize>(
let eroded = MAX_BR; let eroded = MAX_BR;
@filter_loop for i = 0 to sz { @filter_loop for i = 0 to sz {
for j = 0 to sz { for j = 0 to sz {
eroded = min!(eroded, imageArea[i, j] * structure[i, j]); let filter = if row + i < r
|| row + i - r > n - 1
|| col + j < r
|| col + j - r > m - 1 then MAX_BR
else input[row + i - r, col + j - r];
eroded = min!(eroded, filter * structure[i, j]);
} }
} }
...@@ -101,37 +87,17 @@ fn zero_crossings<n, m, sz: usize>( ...@@ -101,37 +87,17 @@ fn zero_crossings<n, m, sz: usize>(
@image_loop for row = 0 to n { @image_loop for row = 0 to n {
for col = 0 to m { for col = 0 to m {
// Data copy for dilation filter
@shr1 let imageArea : f32[sz, sz];
@filter_loop for i = 0 to sz {
for j = 0 to sz {
imageArea[i, j] = if row + i < r
|| row + i - r > n - 1
|| col + j < r
|| col + j - r > m - 1 then MIN_BR
else if input[row + i - r, col + j - r] > MIN_BR then MAX_BR
else MIN_BR;
}
}
// Compute the pixel of dilated image // Compute the pixel of dilated image
let dilated = MIN_BR; let dilated = MIN_BR;
@filter_loop for i = 0 to sz { @filter_loop for i = 0 to sz {
for j = 0 to sz { for j = 0 to sz {
dilated = max!(dilated, imageArea[i, j] * structure[i, j]); let filter = if row + i < r
} || row + i - r > n - 1
} || col + j < r
|| col + j - r > m - 1 then MIN_BR
// Data copy for erotion filter else if input[row + i - r, col + j - r] > MIN_BR then MAX_BR
@shr2 let imageArea : f32[sz, sz]; else MIN_BR;
@filter_loop for i = 0 to sz { dilated = max!(dilated, filter * structure[i, j]);
for j = 0 to sz {
imageArea[i, j] = if row + i < r
|| row + i - r > n - 1
|| col + j < r
|| col + j - r > m - 1 then MAX_BR
else if input[row + i - r, col + j - r] > MIN_BR then MAX_BR
else MIN_BR;
} }
} }
...@@ -139,7 +105,13 @@ fn zero_crossings<n, m, sz: usize>( ...@@ -139,7 +105,13 @@ fn zero_crossings<n, m, sz: usize>(
let eroded = MAX_BR; let eroded = MAX_BR;
@filter_loop for i = 0 to sz { @filter_loop for i = 0 to sz {
for j = 0 to sz { for j = 0 to sz {
eroded = min!(eroded, imageArea[i, j] * structure[i, j]); let filter = if row + i < r
|| row + i - r > n - 1
|| col + j < r
|| col + j - r > m - 1 then MAX_BR
else if input[row + i - r, col + j - r] > MIN_BR then MAX_BR
else MIN_BR;
eroded = min!(eroded, filter * structure[i, j]);
} }
} }
......
...@@ -27,7 +27,7 @@ simpl!(gaussian_smoothing); ...@@ -27,7 +27,7 @@ simpl!(gaussian_smoothing);
predication(gaussian_smoothing); predication(gaussian_smoothing);
simpl!(gaussian_smoothing); simpl!(gaussian_smoothing);
no-memset(laplacian_estimate@res, laplacian_estimate@shr1, laplacian_estimate@shr2); no-memset(laplacian_estimate@res);
fixpoint { fixpoint {
forkify(laplacian_estimate); forkify(laplacian_estimate);
fork-guard-elim(laplacian_estimate); fork-guard-elim(laplacian_estimate);
...@@ -35,7 +35,7 @@ fixpoint { ...@@ -35,7 +35,7 @@ fixpoint {
} }
simpl!(laplacian_estimate); simpl!(laplacian_estimate);
no-memset(zero_crossings@res, zero_crossings@shr1, zero_crossings@shr2); no-memset(zero_crossings@res);
fixpoint { fixpoint {
forkify(zero_crossings); forkify(zero_crossings);
fork-guard-elim(zero_crossings); fork-guard-elim(zero_crossings);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment