1+ #ifndef TB_AUX_FUNCTIONS_CPP
2+ #define TB_AUX_FUNCTIONS_CPP
3+
4+ #include <stdlib.h>
5+ #include <string.h>
6+
7+ //Extract Window: A function to extract a 3x3 window from an image
8+ void extract_window (int i , int j , unsigned char * initial_address_ptr , unsigned char * local_window_ptr , int img_width , int img_height )
9+ {
10+ unsigned char * read_ptr = malloc (3 * sizeof (char ));
11+ if ((i == 0 ) && (j == 0 )) // Upper left corner of the image
12+ {
13+ // First row
14+ * (local_window_ptr ) = 0 ;
15+ * (local_window_ptr + 1 ) = 0 ;
16+ * (local_window_ptr + 2 ) = 0 ;
17+ // Second row
18+ memcpy (read_ptr , initial_address_ptr , 2 * sizeof (char ));
19+ * (local_window_ptr + 3 ) = 0 ;
20+ * (local_window_ptr + 4 ) = * (read_ptr );
21+ * (local_window_ptr + 5 ) = * (read_ptr + 1 );
22+ // Third row
23+ memcpy (read_ptr , initial_address_ptr + img_height , 2 * sizeof (char ));
24+ * (local_window_ptr + 6 ) = 0 ;
25+ * (local_window_ptr + 7 ) = * (read_ptr );
26+ * (local_window_ptr + 8 ) = * (read_ptr + 1 );
27+ }
28+ else if ((i == 0 ) && (j == img_height - 1 )) // Upper right corner of the image
29+ {
30+ // First row
31+ * (local_window_ptr ) = 0 ;
32+ * (local_window_ptr + 1 ) = 0 ;
33+ * (local_window_ptr + 2 ) = 0 ;
34+ // Second row
35+ memcpy (read_ptr , initial_address_ptr + (img_height - 2 ), 2 * sizeof (char ));
36+ * (local_window_ptr + 3 ) = * (read_ptr );
37+ * (local_window_ptr + 4 ) = * (read_ptr + 1 );
38+ * (local_window_ptr + 5 ) = 0 ;
39+ // Third row
40+ memcpy (read_ptr , initial_address_ptr + (img_height + (img_height - 2 )), 2 * sizeof (char ));
41+ * (local_window_ptr + 6 ) = * (read_ptr );
42+ * (local_window_ptr + 7 ) = * (read_ptr + 1 );
43+ * (local_window_ptr + 8 ) = 0 ;
44+ }
45+ else if (i == 0 ) // Upper border
46+ {
47+ // First row
48+ * (local_window_ptr ) = 0 ;
49+ * (local_window_ptr + 1 ) = 0 ;
50+ * (local_window_ptr + 2 ) = 0 ;
51+ // Second row
52+ memcpy (read_ptr , initial_address_ptr + (j - 1 ), 3 * sizeof (char ));
53+ * (local_window_ptr + 3 ) = * (read_ptr );
54+ * (local_window_ptr + 4 ) = * (read_ptr + 1 );
55+ * (local_window_ptr + 5 ) = * (read_ptr + 2 );
56+ // Third row
57+ memcpy (read_ptr , initial_address_ptr + (img_height + (j - 1 )), 3 * sizeof (char ));
58+ * (local_window_ptr + 6 ) = * (read_ptr );
59+ * (local_window_ptr + 7 ) = * (read_ptr + 1 );
60+ * (local_window_ptr + 8 ) = * (read_ptr + 2 );
61+ }
62+ else if ((i == img_width - 1 ) && (j == 0 )) // Lower left corner of the image
63+ {
64+ // First row
65+ memcpy (read_ptr , initial_address_ptr + ((img_width - 2 ) * img_height ), 2 * sizeof (char ));
66+ * (local_window_ptr ) = 0 ;
67+ * (local_window_ptr + 1 ) = * (read_ptr );
68+ * (local_window_ptr + 2 ) = * (read_ptr + 1 );
69+ // Second row
70+ memcpy (read_ptr , initial_address_ptr + ((img_width - 1 ) * img_height ), 2 * sizeof (char ));
71+ * (local_window_ptr + 3 ) = 0 ;
72+ * (local_window_ptr + 4 ) = * (read_ptr );
73+ * (local_window_ptr + 5 ) = * (read_ptr + 1 );
74+ // Third row
75+ * (local_window_ptr + 6 ) = 0 ;
76+ * (local_window_ptr + 7 ) = 0 ;
77+ * (local_window_ptr + 8 ) = 0 ;
78+ }
79+ else if ((i == img_width - 1 ) && (j == img_height - 1 )) // Lower right corner of the image
80+ {
81+ // First row
82+ memcpy (read_ptr , initial_address_ptr + (((img_width - 2 ) * img_height ) + (img_height - 2 )), 2 * sizeof (char ));
83+ * (local_window_ptr ) = * (read_ptr );
84+ * (local_window_ptr + 1 ) = * (read_ptr + 1 );
85+ * (local_window_ptr + 2 ) = 0 ;
86+ // Second row
87+ memcpy (read_ptr , initial_address_ptr + (((img_width - 1 ) * img_height ) + (img_height - 2 )), 2 * sizeof (char ));
88+ * (local_window_ptr + 3 ) = * (read_ptr );
89+ * (local_window_ptr + 4 ) = * (read_ptr + 1 );
90+ * (local_window_ptr + 5 ) = 0 ;
91+ // Third row
92+ * (local_window_ptr + 6 ) = 0 ;
93+ * (local_window_ptr + 7 ) = 0 ;
94+ * (local_window_ptr + 8 ) = 0 ;
95+ }
96+ else if (i == img_width - 1 ) // Lower border of the image
97+ {
98+ // First row
99+ memcpy (read_ptr , initial_address_ptr + (((img_width - 2 ) * img_height ) + (j - 1 )), 3 * sizeof (char ));
100+ * (local_window_ptr ) = * (read_ptr );
101+ * (local_window_ptr + 1 ) = * (read_ptr + 1 );
102+ * (local_window_ptr + 2 ) = * (read_ptr + 2 );
103+ // Second row
104+ memcpy (read_ptr , initial_address_ptr + (((img_width - 1 ) * img_height ) + (j - 1 )), 3 * sizeof (char ));
105+ * (local_window_ptr + 3 ) = * (read_ptr );
106+ * (local_window_ptr + 4 ) = * (read_ptr + 1 );
107+ * (local_window_ptr + 5 ) = * (read_ptr + 2 );
108+ // Third row
109+ * (local_window_ptr + 6 ) = 0 ;
110+ * (local_window_ptr + 7 ) = 0 ;
111+ * (local_window_ptr + 8 ) = 0 ;
112+ }
113+ else if (j == 0 ) // Left border of the image
114+ {
115+ // First row
116+ memcpy (read_ptr , initial_address_ptr + ((i - 1 ) * img_height ), 2 * sizeof (char ));
117+ * (local_window_ptr ) = 0 ;
118+ * (local_window_ptr + 1 ) = * (read_ptr );
119+ * (local_window_ptr + 2 ) = * (read_ptr + 1 );
120+ // Second row
121+ memcpy (read_ptr , initial_address_ptr + (i * img_height ), 2 * sizeof (char ));
122+ * (local_window_ptr + 3 ) = 0 ;
123+ * (local_window_ptr + 4 ) = * (read_ptr );
124+ * (local_window_ptr + 5 ) = * (read_ptr + 1 );
125+ // Third row
126+ memcpy (read_ptr , initial_address_ptr + ((i + 1 ) * img_height ), 2 * sizeof (char ));
127+ * (local_window_ptr + 6 ) = 0 ;
128+ * (local_window_ptr + 7 ) = * (read_ptr );
129+ * (local_window_ptr + 8 ) = * (read_ptr + 1 );
130+ }
131+ else if (j == img_height - 1 ) // Right border of the image
132+ {
133+ // First row
134+ memcpy (read_ptr , initial_address_ptr + (((i - 1 ) * img_height ) + (j - 1 )), 2 * sizeof (char ));
135+ * (local_window_ptr ) = * (read_ptr );
136+ * (local_window_ptr + 1 ) = * (read_ptr + 1 );
137+ * (local_window_ptr + 2 ) = 0 ;
138+ // Second row
139+ memcpy (read_ptr , initial_address_ptr + ((i * img_height ) + (j - 1 )), 2 * sizeof (char ));
140+ * (local_window_ptr + 3 ) = * (read_ptr );
141+ * (local_window_ptr + 4 ) = * (read_ptr + 1 );
142+ * (local_window_ptr + 5 ) = 0 ;
143+ // Third row
144+ memcpy (read_ptr , initial_address_ptr + (((i + 1 ) * img_height ) + (j - 1 )), 2 * sizeof (char ));
145+ * (local_window_ptr + 6 ) = * (read_ptr );
146+ * (local_window_ptr + 7 ) = * (read_ptr + 1 );
147+ * (local_window_ptr + 8 ) = 0 ;
148+ }
149+ else // Rest of the image
150+ {
151+ // First row
152+ memcpy (read_ptr , initial_address_ptr + (((i - 1 ) * img_height ) + (j - 1 )), 3 * sizeof (char ));
153+ * (local_window_ptr ) = * (read_ptr );
154+ * (local_window_ptr + 1 ) = * (read_ptr + 1 );
155+ * (local_window_ptr + 2 ) = * (read_ptr + 2 );
156+ // Second row
157+ memcpy (read_ptr , initial_address_ptr + ((i * img_height ) + (j - 1 )), 3 * sizeof (char ));
158+ * (local_window_ptr + 3 ) = * (read_ptr );
159+ * (local_window_ptr + 4 ) = * (read_ptr + 1 );
160+ * (local_window_ptr + 5 ) = * (read_ptr + 2 );
161+ // Third row
162+ memcpy (read_ptr , initial_address_ptr + (((i + 1 ) * img_height ) + (j - 1 )), 3 * sizeof (char ));
163+ * (local_window_ptr + 6 ) = * (read_ptr );
164+ * (local_window_ptr + 7 ) = * (read_ptr + 1 );
165+ * (local_window_ptr + 8 ) = * (read_ptr + 2 );
166+ }
167+
168+ //printf("Window is: [%0d, %0d, %0d,%0d, %0d, %0d,%0d,%0d,%0d]\n", *(local_window_ptr), *(local_window_ptr + 1), *(local_window_ptr + 2), *(local_window_ptr + 3), *(local_window_ptr + 4), *(local_window_ptr + 5), *(local_window_ptr + 6), *(local_window_ptr + 7), *(local_window_ptr + 8));
169+ }
170+
171+ #endif //TB_AUX_FUNCTIONS_CPP
0 commit comments