Resource Aware Implementation of Image Processing Algorithms – A Teacher Perspective Petar Rajković1, ∗, †, Dragan Janković1, † 1 University of Niš, Faculty of Electronic Engineering, Aleksandra Medvedeva 14, Niš, Serbia Abstract Teaching image processing algorithms is a widely interesting and easily accepted topic by students. The mentioned algorithms offer initial visual results, a lot of space for improvements, personal initiative, and the opportunity for continuous work. This paper presents our experience in teaching image processing algorithm implementation with different approaches, emphasizing concepts of resource awareness. The programming routines explained to the students start from a managed environment with and without dedicated classes and packages, through the unsafe code execution up to native code integration. The paper presents the comparison of time utilization, programming effort, and the level of the concept adoption by the students. The analysis was based on the student projects uploaded to the learning management system in the period from 2018 to 2024. The results are used to adjust the course structure and better adopt resource awareness-related concepts. The percentage of projects entirely based on more effective approaches rose from 44% in 2018 to 80% in 2023 and 2024. During the monitored period, the overall average execution time of the benchmark algorithms was reduced closely to one-third compared to the results from 2018, which follows the shift towards more effective approaches. In this way, we tend to say that it is important to point out all the technology benefits and shortcomings and to encourage students to try to find more effective ways to solve time and resource-consuming problems. Keywords Image processing algorithms, resource awareness, execution efficiency 1 1. Introduction The result should be a well-defined engineering course and a properly suited set of requirements for the projects Implementation of image processing algorithms is that should be implemented by the students. considered a remarkably interesting part of computer One of the well-known approaches, that we used as science [1]. Many students and programmers genuinely the starting point, is to create an environment with basic like this topic since it gives results that can be verified methods and interfaces that will allow students to quickly and visually. implement their algorithms as plugins [4]. This To learn about image processing, a variety of methodology typically favors technologies that enable sources are available through different books, papers, rapid implementation, such as Java or C#, with the and tutorials. Looking at Google Scholar, it could be objective being to grasp complex algorithms. In our realized that standard learning resources like [2] and [3] scenario, we present students with a project that are cited several thousand times. Furthermore, the topic includes fundamental functionalities and an application offers particularly good ground for students’ further framework, yet they retain the liberty to develop their development and research. applications from the start. Teaching image processing itself, is also an Since we teach the course in the eighth (final) interesting challenge. It is important to find a suitable semester of bachelor studies, we tend to move the focus approach in terms of the used technology, offered of the subject to more efficient programming, while frameworks, and teaching methods. All this should basing the course outline on the standard image consider previous students’ knowledge and experience. processing algorithms that could be practically used, as 3rd workshop on Resource AWareness of Systems and Society 0000-0003-4998-2036 (P. Rajković); 0000-0003-1198-0174 (D (RAW 2024) .Janković); ∗ Corresponding author. Copyright © 2024 for this paper by its authors. Use permitted under † These authors contributed equally. Creative Commons License Attribution 4.0 International (CC BY 4.0). petar.rajkovic@elfak.ni.ac.rs (P. Rajković); dragan.janković@elfak.mi.ac.rs(D. Janković); CEUR ceur-ws.org Workshop ISSN 1613-0073 Proceedings in [5] and [6]. The idea of focusing on real-life effects, For this reason, we choose one possible approach such as execution speed, was taken from [5], while that could bring the best of both worlds, with the topics from the research shown in [6] helped in forming technology that offers a combination of both execution the curriculum. speed and fast developments, in the parts where each of On the other hand, the image processing algorithms the approaches has its value [14]. are interesting from the point of view of execution At the same time, we do not post any limitations to optimization and general resource awareness, using the students for the technology choice, but advocate different techniques and approaches [7][8]. implementation approaches that result in the code that In this study, emphasis is placed on examining the executes faster. However, in this paper, four different students’ execution of image processing algorithms and implementation approaches, which are presented to the their propensity to adopt various resource-aware students during the course, are compared by the strategies to enhance performance in their projects. execution and development speed, with a set of Besides the execution of complex algorithms constitutes guidelines on how to use them. a component of the curriculum at the bachelor’s, The mentioned approaches are used by the students master’s, and doctoral study levels. This analysis for the implementation of various categories of image- concentrates on a cohort of final-year bachelor’s degree processing algorithms, as part of their projects. Data students who undertake image processing algorithm collected over several years are examined to identify the implementation as part of their Multimedia Systems student’s responses to the use of the different course. [9]. implementation approaches. To implement some operations on digital images, The study shows that students are willing to adopt they must be stored in the form of a matrix of pixels [1]. implementation approaches that are more complex, The operation should run through the matrix and from the point of view of the implementation, up to perform some calculations for each pixel. To describe some point, for the benefit of faster code execution. the importance of resource awareness in image processing, let us analyze the processing requirements 2. Course Environment and for the simple invert operation [3]. Invert operation is replacing every byte in the picture with its Project Implementation complementary value. I.e., if one byte in the original It should be noted that each student that attended our picture has a value of 30, in the inverted picture it will course, hails from the Department of Computer Science have a value of 225. The inverted value is calculated as and is presently in their final semester. Throughout their the difference between the maximal value for a byte and academic journey, they have uniformly completed a the original value. foundational curriculum encompassing algorithms, If the image, where we perform the invert operation, mathematics, as well as programming environments and has a resolution of 1000x1000 pixels, and three bytes per technologies. Consequently, there exists no subset of pixel (standard 24bRGB format [10]), this means that students possessing a disproportionate advantage in three million operations need to be performed to create terms of prior knowledge. Prior to commencing our the inverted image. course, they have garnered experience with If we observe today's image resolution, which is far programming languages such as C++, Java/C#, in more than one million pixels, it is obvious that image addition to various Web and Mobile technologies. processing must be implemented carefully and The example project environment is set up to effectively. Looking at the side of the story related to the Microsoft .NET Windows Forms application [11]. Such execution speed, the obvious direction is to go towards setup is advocated by the fact that the technology has all the implementation in the programming environment the prominent features of object-oriented design (similar closest to the processor and operation system’s core. to Java in [4]), is constantly developed, and has a fully Unfortunately, such environments are not usually integrated development environment offering the user-friendly and not convenient for the one-semester possibility to build user interfaces fast and debug course teaching where students must finish their tasks efficiently. and learn as much as possible. On the other hand, the Like Java, .NET is the environment that runs on a environments based on the execution of virtual process virtual machine [12]. In that sense, it offers machines, such are Java and .NET offer high higher security for the end-user in terms of garbage programming flexibility and user-friendly interface collection, exception handling, and managed code which makes the work on the project much faster. execution. The downside of this approach is slower Unfortunately, the execution speed in such execution. environments is much slower than with native code.  Processing based on the native code, in the unsafe block, which runs through the managed environment.  Processing based purely on a native code, written, and evaluated in an external execution environment, and then brought to the managed environment using COM (Component Object Model) interface and runtime-capable wrapper. As presented in Figure 2, the source code, crafted in .NET languages such as C#, is initially translated into intermediate or bytecode. Subsequently, this bytecode is compiled into the final executable. In contrast, unsafe Figure 1: Method with an unsafe block. code bypasses the intermediate code stage and is compiled directly into the executable. Additionally, Source code integrated calls to native libraries are executed directly (any language supported by Unsafe Source Code in the executable code, leveraging the capabilities .NET Framework) provided by the COM interface. 2.1. Course and Project Outline The curriculum is delivered over the spring semester, spanning 14 working weeks, and encompasses a variety MSIL Code of topics related to image processing. In the initial stages, students become acquainted with various color models, image file formats, and techniques for reducing Runtime Capable Wrapper image size, including downscaling and compression methods. Subsequently, the course curriculum introduces students to a range of image processing algorithms, including fundamental filters (such as brightness, Executable Code grayscale, contrast, gamma correction, and others), dithering techniques, convolution, and displacement filters. Furthermore, advanced subjects are explored, Figure 2: Integration of managed and unmanaged code encompassing histogram-based methods and intricate (as described in [12]) filters like the Kuwahara filter. [13]. When teaching image processing algorithms we To overcome this issue, the application requires a focus on three major points – algorithm higher execution speed, the .NET framework offers the construction/correctness, variants and similar filters, concept of unsafe code execution [14] which allows the and execution efficiency. In most cases, execution programmer to write native C++ code into a managed efficiency is more important than memory use, since environment directly (Figure 1). Furthermore, unsafe many algorithms are built around additional data allows full pointer level memory access without structures which cannot be avoided during the restriction. The unsafe code is written under a specific implementation. block starting with the keyword unsafe. As mentioned, the focus of our course is execution Also, .NET offers the possibility to directly include analysis. Since we expect that students implement libraries written in native code, as in any other algorithms efficiently, from the algorithm flow’s point programming environment, which is supposed to run as of view, we display the differences in the execution fast as possible. To support lectures, the following depending on the chosen technology. implementation modes are presented to the students. The students are then able to measure in the demo Namely: filters differences in the execution speed between the implementation in different technologies and directly  Raw data processing through managed code experience trade-offs between comfort programming  Included capabilities of framework classes environments (such as C# and Java), and execution (managed code) speed in native code implementation (C++). Since the execution time is one of the most Project element Maximal Correctness Execution important factors in the eventual grade (14 out of 30 points time points), students could decide whether pays off if they Application 2 2 n/a invest more time in a faster solution (Table 1). structure Over the years, we slightly adapted the project Downsampling 4 2 2 structure, taking into consideration results from the Compression 4 1 3 previous years. The current project structure consists of: Basic filter 2 1 1  Image processing application that can load Convolution 5 2 3 standard file formats and display changes after filter applying image transformation. Displacement 5 3 2  Defining own file format by implementing filter down sampling and compression Advanced topic 6 3 3  Implementation of one basic filter Code quality 2 2 n/a  Implementation of one dithering method (like Total 30 16 14 convolution filters)  Implementation of one displacement filter  Additional advanced filter implementation Table 2 Examples of project composition between different During this time, we kept the project complexity years (Project elements: B – basic filter, C – convolution- requirements at the same level. The basic requirement is style filter, D – displacement filter, A – advanced topic) to implement a user-friendly application that will Project 2018 2021 2024 display, at any point, original and changed pictures, and element to allow the user to save the effect of transformation B Gamma Grayscale Contrast either to some standard or to a custom file format. C Edge detect Sharpen Dithering From year to year, we are changing requirements D Pixelate Time-Warp Water in terms of classes of implemented algorithms as well A Trans-domain Histogram Kuwahara as the definition of the file format. The projects from one year exclude combinations of algorithms implemented in previous years, but the general The students upload their projects in Moodle (until requirements remain at the same level. For example, this 2020) and Teams (2021 onwards). After that, we execute year (2024) the students had to convert RGB pictures to them in the referent environment and with a referent set YUV models and then apply some downsample scheme of images and assign points for each project item. We as in JPEG (4:2:0, or 4:1:1, etc.). After downsample, they evaluate both algorithm correctness and execution had to implement some of the dictionary based lossless speed. In all these years evaluation has been done only compression algorithms like Huffman or Shannon-Fano. by the authors of these papers, which, we believe, Table 2 shows the requirements for filters in three ensured the same level of assessment. In this work, we different years. are focused only on execution time. Since the student This year students had to implement contrast as the applications execute a single algorithm at a time, basic filter, where different variants will be applied to memory usage and scalability are out of the scope of different group of students. Similarly, for the their projects. In the same semester, they have different convolution style filter, dithering was the theme for course (Distributed systems) where the main aim is on 2024, where each group should implement its specific scalability and robustness). variant (like Jarvis, Stucki, Sierra, etc.). When we look in the Table 1, each project element 2.2. Raw Data Processing comes in two to five variants, giving us more Raw data processing is the basic way to process images combinations than the students, which means that every (Figure 3). The programmer should load an array of student will have a unique project. I.e., in 2024, we had bytes from the file and transform them into a meaningful 4 downsampling variants, 2 compression algorithms, 3 data structure. The complexity of this task depends on contrast variants, 4 dithering filters, 3 variants of the file type. For example, uncompressed files like displacement filter, and 2 different advanced topics, bitmaps could be directly loaded and converted, while which makes 576 different variants for less than 100 compressed files, like JPEGs and PNGs, must be students. significantly processed. Table 1 General point distribution scheme and criteria Once, the image is loaded and converted to a bitmap object, each pixel can be accessed by GetPixel method. Figure 4: Method invert written in managed code with supporting Bitmap class and Color structure. This method returns an instance of type Color with Red, Blue, Green, and Alpha components. These values could be then processed, and new color values now could be written back to the Bitmap object. From the Figure 3: Method invert written as raw data processing. logical point of view, the programmer must focus only on the implementation of processing algorithms, For bitmaps [15], every byte has its meaning, and the without the need to take care or pay attention to any corresponding piece of information could be extracted. other task in the scope of image processing. I.e., in the presented example, 4 bytes started at position On the other hand, this approach runs fully under 10 in the file defining image height and the next 4 image managed code, and it is the slowest way of weight. The bytes starting from position 54, for images implementation. One can say that the programming stored as 24b RGB files, define the image, and knowing comfort is paid by the slowest runtime. that each pixel is described by three bytes makes the Development using the provided framework classes image processing straightforward. [16] is the easiest from the programmer's point of view The implementation based on raw data processing is (Figure 4). With the simple call of the single method, the suitable only for plain bitmap files since they contain programmer will have a completely structured image directly stored pixel-related data. This approach requires converted to a bitmap object with all the features and no additional data structures and classes and could be properties directly exposed. The downside of this implemented using the programming language basics approach is that the code execution is the slowest. The only. In this sense, it requires a bit more organization of execution time is directly proportional to the size of the the processing and it could be suitable for the filters with image, and additional time will be spent on locking and simpler implementation. This approach could be used in unlocking the memory area for every single execution any programming language, and if properly of SetPixel function. implemented, could give excellent execution The calls of the methods that should get or set the performance. pixel value must go through the execution virtual machine and must ensure necessary locking 2.3. Processing Based on Framework mechanisms each time. The recommendation for this Classes approach is to be used in the initial stage of the projects where the students are setting up their environment and For the most effective use, the framework classes could learning the process of image processing itself. This be utilized. The most important class for image approach could be used if the expected size of the picture processing is the class Bitmap inherited from the more will not exceed certain limits, and if it will be used for common class Image [16]. previews since they could be easily integrated into Web This class offers the easiest, from the programming routines and technologies such as Blazor. point of view, approach. The programmer loads a picture of any supported type using the Load method. 2.4. The Use of Unsafe/Native Code There are two options to use unsafe/native/non- managed code. First, the programmer could write a method in the native language library and then include the library in the project (Figure 5). The problem with this approach is that debugging of such code should be done in some programming tool, different from the environment where the main application is written. Figure 5: Declaration of the external function written in native code. It is important to point out that such an approach is not a problem per se during the development of real software systems, but for student projects whose duration is very limited, and where students have to cope concurrently with the additional tasks, learning to use multiple environments could be a challenge up to some point. Figure 6: Method invert written in unsafe code. To have the best of both worlds – managed and unmanaged code, the students are encouraged to use The approach with an unsafe code execution is the unsafe blocks in the Windows Forms application [18]. fastest way to perform image processing from the This approach is not common for other development managed code environment. It is up to some percent environments, such is Java, and it is considered more slower combined with direct native applications, but the like an additional than the technology standard. comfort of the integrated development seems justified as Working in the unsafe block is close, if not equal to the acceptable price. writing code in the native, C++ environment. The As can be seen in the previous section .NET programmers have under their disposal, complete environment offers adequate transformation classes that pointer arithmetic with the additional requirements to help in moving the execution context from managed to transform data types from .NET to native classes, and to unmanaged. Keeping in mind that the application take care of garbage collection. development, in the case of the student project, relates The implementation of the invert operation in an to tight deadlines such an approach proved its value. unsafe environment is displayed in Figure 6. To support the coding, programmers could use BitmapData [17] 2.5. Brief on Implementation class and its properties. Conversion from Bitmap to Approaches BitmapData is done using LockBits and UnlockBits methods, which ensure, in addition, uninterrupted As it could be seen each of the approaches has its memory management. The area of memory that stores benefits and drawbacks. While raw data processing raw image bytes will be safely locked before the requires no additional libraries and frameworks, it processing moves to an unsafe environment and then requires more attention to organize code, and it is not unlocked when the program flow returns. useful for complex image types. The only programmer required to translate managed to native code.  Convolution filters – the filters where the values of neighboring pixels affect the currently processed pixel. Compared to basic filters they require significantly more processing, but a similar amount of memory  Displacement filters – require additional data structure which needs a comparable amount of memory as the processed image. Compared to basic filters they require more memory and more processing operations Figure 7: An example of the demo picture used for filter evaluation, taken from the Bing wallpaper site https://bing.gifposter.com/au/column-41-container- ship-near-a-commercial-port-in-thailand.html, and then cropped to 2000x2000 Relying only on the framework based on managed code will speed up the development process, at the price of the slowest execution. The integration of externally developed algorithms brought the fastest execution, but the development must be split between multiple projects, development tools, and programming languages. It requires the highest amount of time for development. The approach based on the unsafe code seems like a Figure 8: Example of applied contrast filter. promising approach for student projects focused on image processing algorithms. It offers performance close 3.1. Basic Filters to the native code, seamless integration of the native code in the managed environment, and higher memory As has been mentioned, basic filters are those that efficiency since it enables precise memory management. require one pass through the matrix of pixels with an The drawbacks of this approach are the same as with the optional parameter transformation. For our evaluation, native code execution - higher potential for bugs and we choose a contrast filter (Figure 8), which is an higher complexity for maintenance [18]. The images example of a common filter with many specific variants used for the evaluation are in resolution of 2000x2000 depending on the area of the application [19]. Aside pixels (Figure 7) and higher with different aspect ratios from this one, the students had a few more as part of the and color representation. task - brightness, color, gamma, grayscale, and conversion to distinct color models [20] – like luma- chroma (or YUV) or hue-saturation-value (HSV). 3. Classes of Image Filters for Demo 3.2. Convolution Filters For the application of the mentioned approaches, the Unlike the basic filters, the convolution filters use the students have the task of implementing several image auxiliary matrix structure, usually called the kernel. The filters from the various categories. To make the most kernel is a matrix of small size, in most cases 3x3, and is convenient test cases, three diverse types of filters are set up with predefined parameters. In addition, the checked: convolution filter has two more values - factor and  Basic filters – their implementation requires offset. Some of the example of convolution matrices are only iteration through all pixels in the image. presented in Figure 9. Figure 9: The examples of convolution filters with corresponding kernel matrices, offset, and factor values. Figure 11: Example of displacement time warp filter. The number of operations needed to perform the convolution filter is significantly higher than with basic filters. We can assume that during basic filter execution, the number of performed steps is the multiplication of the image resolution, for the convolution filters it is a multiplication of the image resolution and number of elementary operations connected with a chosen kernel matrix. For example, the execution of a sharpened filter (Figure 10) will execute ten times (nine multiplication and division with the factor value) more operations than the execution of a basic invert. 3.3. Displacement Filters Displacement filters are based on a pre-built transformation matrix which is the same size as the Figure 10: Example of the applied convolution filter targeting picture (Figure 11). Their execution is split into setup and execution phases. In the setup phase, the The processing works in a way that the submatrix, transformation matrix is created using some algorithm, of the same size as a kernel, from the picture, should be and in the execution phase, the values from the extracted. The value of each pixel from the extracted transformation matrix are combined with the pixel matrix is multiplied by the corresponding parameter in values from the picture to achieve the desired effect. the kernel. All these products are then summed up together, divided by the value provided for factor, and 4. Discussion on Students' on top of this value is added offset. The values in the matrix are important for the Response filtering operation itself, while the values for factor and We have been teaching courses that partly cover image offset are used to normalize the sum of products into the processing for longer than a decade and a half. Image required value range. In our case, these are the values processing was taught as a part of courses such are that could be stored in one byte (0 to 255). Algorithm Complexity, Multimedia Systems, Secure Software Design, Medical Imaging, and Medical Informatics. These courses were conducted on diverse levels of studies with different complexity and structure of the student projects. Depending on the subject, we used to point out different elements of the image processing. Somewhere the focus is on the algorithm design, somewhere on the integration in large-scale systems, somewhere on a Data in Table 2 and Table 3 show the project minimal alteration of the existing algorithms with a distribution per technology. The projects, by the focus on the execution performance. For the evaluation implementation technology of image processing of different programming approaches, we used the algorithms, could be categorized into four major subject of Multimedia Software Systems – an electoral categories – managed, native, unsafe, and other. Projects course in the fourth year of bachelor study. In the developed in .NET and Java are considered managed evaluated period, the number of students was in the code-based projects. range from 32 to 70 (2018 57, 2019 35, 2020 44, 2021 47, The projects marked as “native” are those whose 2022 50, 2023 49, 2024 70). algorithms are developed in various C++ environments, The image processing software project is one of the regardless of the technology used for the front end. In assignments in the course, and the requirement is to the category unsafe are these that follow the suggestion implement several image processing algorithms of to include unsafe code blocks in managed projects. different complexity with minimal use of processing Category other is for the projects implemented in power and memory. For the test, the students must various Web technologies with different approaches create an application that is comparable to Windows considering implementations of algorithms both in the Forms in a .NET environment which can immediately front and back end, using technologies such are various display the result after processing is finished. JavaScript-based frameworks. After the students uploaded their projects in the Table 3 collaborative learning platform, initially it was Moodle Number of students who finished complete project. and later switched to Microsoft Teams, the projects were Year Number of enrolled Students who finished checked for performance in the demo machine to verify students complete project against the same conditions. The demo machine is an 2018 57 45 (79%) Intel-based i7-8550U running at 1.8 GHz with 4 cores 2019 35 22 (63%) and 8 logical processors, supported by 16GB of RAM. It 2020 44 29 (65%) is important to point out that all projects from the year 2021 47 39 (83%) 2018 until now are run and evaluated under the same 2022 50 41 (82%) conditions. 2023 64 58 (90%) The Intel processors which mark ends by the sign U 2024 70 61 (87%) are not designed primarily for speed, but rather for energy efficiency. In that sense, such a computer is the perfect environment for the execution demo since the The only limitation that students have is related to differences are better displayed. the user interface which has to be fast and responsive The obvious benefit of using native and unsafe and allow the display of the processed image. There is approaches can be seen in Table 6. Comparing execution no specific request for a certain technology, besides, we time between native and unsafe approaches shows that advocate Microsoft .NET. On the other hand, there are native code runs 10 to 20 percent faster. The exact time no limitations to the implementation of image varies depending on which moment of implementation processing algorithms themselves. students brought unsafe mechanisms to the project. For Table 3 shows the number of enrolled students per those that start with unsafe functions during data year together with the number of students who loading, the results are better than those that use unsafe successfully finished the entire project. Excluding the mechanisms only for the algorithm execution. years 2019 and 2020, where the lectures were conducted The significant difference is between unsafe and in online mode, the percentage of the students who managed code. The difference is in dozens of finished the projects was above 80%. During the period multiplications. Figure 12 shows that the difference is of online classes, this percentage dropped to less than such, that the logarithmic scale could be easily employed two-thirds. to display the difference. Other approaches, based on In the previous year (2023) we made a slight change different Web technologies demonstrate the worst in course organization by moving the image processing results in the sense of the execution time. Based on Web project to be the last in the row, as we considered it more technology, the disadvantage is that considerable time is complex. This gave the students the possibility to work required to upload the source picture and then to on it in a period where they had fewer overall tasks download the results, which, makes the situation worse. during the school year. This resulted in the highest What could be seen, during the years, is that percentage of successfully finished projects at 90%. This students accept the resource awareness narrative at a year, we will follow the same approach, and, at the high percent. Besides the higher popularity of Web beginning of June, we will have complete data for 2024. applications and JavaScript-based frameworks, this approach was not the dominant choice to manage image 2023 8 12 9 8 processing problems. 2024 7 13 8 9 Table 4 Distribution of technology used in successful student projects. Year Managed Native Unsafe Other 2018 21 8 12 4 2019 14 2 6 1 2020 17 4 6 2 2021 10 11 13 5 2022 6 12 17 6 2023 8 17 27 6 2024 11 12 31 7 Table 5 Distribution of technology used in unfinished student projects. Year Managed Native Unsafe Other Figure 12: Comparison of relative execution times for 2018 1 5 2 4 simple, convolution, and displacement filters. 2019 3 3 4 3 Student projects are set up for three weeks, which 2020 7 5 3 1 makes 15 days the maximal amount of time needed for 2021 0 4 1 3 the execution. During the project, students must 2022 1 6 0 2 implement several filters that belong to various 2023 1 2 1 2 categories. The filters that should be implemented are 2024 4 1 2 2 changed each year. Besides that, the overall project complexity tends to be kept, in the teachers’ opinion, on Projects predicated on managed code predominated the same level. in 2019 and 2020, coinciding with the period when Table 7 and Figure 13 show an insight into how lectures were delivered online. With the resumption of many days students were active on the project. These conventional in-person lectures and the enhancement of numbers represent the difference between the dates interactive, hands-on laboratory demonstrations, there when students downloaded the assignment and the was a discernible shift in preference towards approaches dates when the solutions were submitted. This is not the that are more efficient in terms of performance. best conceivable way, since there is no exact way to prove the correctness of this approach, but, on the other Table 6 hand, there is no morally acceptable way to measure Average execution time by technology in benchmark machine for default image of 2000x2000 resolution in how much time students spend working on their milliseconds projects. Optionally the survey could be created, but the answers could be disputable either. Approach Simple Convolution Displacement Managed C# 2054.77 6810.82 15490.77 Managed Java 2955.41 8191.38 18927.35 Native 35.41 124.77 450.20 Unsafe 39.61 146.76 559.44 Other 4850.66 11843.17 41817.93 Table 7 The average number of working days that student needed for implementation. Year Managed Native Unsafe Other 2018 7 12 8 9 2019 11 10 10 15 2020 10 11 12 15 2021 7 13 10 11 2022 6 14 9 8 Figure 13: Comparison of relative programming effort completely managed approach could be in most cases between different programming approaches through optimal way. observed years. However, each of the presented approaches has its pros and contras, and depending on the type of the Nevertheless, several observations can be discerned. projects, domain of usage, and the expectations Primarily, students who commence their assignments regarding performance and memory usage, could be late tend to opt for a managed solution or a JavaScript- voted as optimal. In any case, future programmers must based framework, as these approaches necessitate less have a good overview of all the options and be aware of time investment. This trend was particularly the appropriate use for the most valuable resource they pronounced during the years 2019 and 2020 when choose – either development time or the use of the instruction was conducted in an online format. execution resources. Most unsuccessful solutions were developed using In this context, we posit that the incorporation of the native code, which is logical given its demand for resource-awareness principles into the educational more time and advanced programming expertise. curriculum is crucial, particularly in the concluding year Additionally, it is noteworthy that the greatest failure of study. Our research advocates for an instructional rate was observed in the “other” category. This may be approach in image-processing education that utilizes attributed to students’ lack of sufficient familiarity with managed code examples instead of pseudocode for technologies that appeared promising, yet they lacked algorithmic elucidation during lectures. Concurrently, adequate experience to utilize them effectively. laboratory exercises should employ unsafe and An unsafe approach seemed like a good balance. It unmanaged code to elucidate the disparities in execution offers the possibility to start with the managed velocity, which can be significant in certain instances. approach, reach some point in implementation, make Through this paper, our objective is to convey that the proof concept of all the algorithms, and then convert while numerous contemporary technologies offer only parts of the project to the native code. Besides the considerable programming convenience and efficient approach being heavily technology-dependent and even development at the business layer, they should not be not easily portable, it is a good example of the hybrid indiscriminately adopted as a panacea for all approach in development and how this kind of approach programming challenges. Instead, prospective could bring overall benefits. developers must meticulously analyze the specific For an average of 15% more time than needed than problem domain and judiciously select appropriate for the projects based on managed code, the output runs technologies for each component therein. only 10% slower compared to the projects in which image processing algorithms are entirely built in the Acknowledgments native code. Ignoring years 2019 and 2020, the average time needed for the native approach is around 50% more The Ministry of Science, Technological Development than with the managed code. and Innovation of the Republic of Serbia supported this work [grant number 451-03-65/2024-03/200102]. 5. Conclusion This work is partially supported by the cost action CA 19135 CERCIRAS (Connecting Education and Research Bringing the concepts of general resource awareness in Communities for an Innovative Resource Aware programming is yet again important. Besides the rising Society). popularity of fast-to-build and nice-to-look frameworks, followed by the constant increase of processing power References and memory volume of all computational devices, one cannot entirely rely on the easiest solutions. [1] M. J. Burge, W. Burger, Digital Image Processing: As could be seen with a managed approach in the An Algorithmic Introduction, Springer languages based on the execution virtual machine, the International Publishing AG, 2022 two-line implementation could save time while [2] J. R. Jensen, Introductory Digital Image programming, but it will result in a fifty times slower Processing, Third Edition (Prentice Hall Series in overall execution. Geographic Information Science), 3rd. ed., Prentice The use of the native environment will, of course, Hall, 2004. bring the best possible results, but the price will be [3] B. Jähne, Digital Image Processing: Concepts, significantly longer development phase. In that sense, Algorithms, and Scientific Applications, Springer the technology-specific solutions, like unsafe, could be London, Limited, 2013. an extremely good compromise between approaches. [4] D. Sage and M. Unser, "Teaching image-processing Getting 10% worse results, compared to native code, programming in Java," in IEEE Signal Processing with spending around 15% more time compared to a Magazine, vol. 20, no. 6, pp. 43-52, Nov. 2003, doi: [17] BitmapData Class (System.Drawing.Imaging). 10.1109/MSP.2003.1253553. URL: https://learn.microsoft.com/en- [5] L. de O. Alves, L. F. Cruz, P. T. M. Saito, and P. H. us/dotnet/api/system.drawing.imaging.bitmapdat Bugatti, "Towards Practical Computer Vision in a?view=dotnet-plat-ext-8.0. Teaching and Learning of Image Processing [18] G. Chobanyan, A Comprehensive Guide to Unsafe, Theories," 2019 IEEE Frontiers in Education Unmanaged Code and Pointers, 2023. URL: Conference (FIE), Covington, KY, USA, 2019, pp. 1- https://itnext.io/a-comprehensive-guide-to- 7, doi: 10.1109/FIE43999.2019.9028645. unsafe-unmanaged-code-and-pointers- [6] Gil, P., García, G. J., Puente, S. T., Mateo, C. M., b8e143867b3e. Alacid, B., & Mira, D. (2016). Teaching image and [19] Hiary, Hazem, et al. "Image contrast enhancement video processing with a practical cases-based using geometric mean filter." Signal, Image and methodology at the University of Alicante. In Video Processing 11 (2017): 833-840. EDULEARN16 Proceedings (pp. 6067-6077). [20] Ibraheem, N. A., Hasan, M. M., Khan, R. Z., & IATED. Mishra, P. K. (2012). Understanding color models: [7] V. Monga, Y. Li, Y. C. Eldar, Algorithm Unrolling: a review. ARPN Journal of science and technology, Interpretable, Efficient Deep Learning for Signal 2(3), 265-275. and Image Processing, IEEE Signal Process. Mag. 38.2 (2021) 18–44. doi:10.1109/msp.2020.3016905. [8] J. Tang, G. Liu, Q. Pan, A Review on Representative Swarm Intelligence Algorithms for Solving Optimization Problems: Applications and Trends, IEEE/CAA J. Autom. SIn. 8.10 (2021) 1627– 1643. doi:10.1109/jas.2021.1004129. [9] University of Niš, Faculty of Electronic Engineering, Course Catalog, English. URL: https://www.ni.ac.rs/en/studies-and- admission/studies/course- catalogue/courses?task=download.send&id= 6594&catid=666&m=0. [10] RGB24 pixel format for digital imaging, URL: https://www.theimagingsource.com/en- us/documentation/icimagingcontrolcpp/Pixelfor matRGB24.htm. [11] Windows Forms for .NET 7 documentation. URL: https://learn.microsoft.com/en- us/dotnet/desktop/winforms/?view=netdesktop- 8.0. [12] Managed Execution Process - .NET. URL: https://learn.microsoft.com/en- us/dotnet/standard/managed-execution-process. [13] Bartyzel, Krzysztof. "Adaptive kuwahara filter." Signal, image and video processing 10 (2016): 663- 670. [14] Unsafe code, pointers to data, and function pointers - C#. URL: https://learn.microsoft.com/en- us/dotnet/csharp/language-reference/unsafe- code. [15] Bitmap Image File (BMP), Version 5. URL: https://www.loc.gov/preservation/digital/formats /fdd/fdd000189.shtml. [16] Bitmap Class (System.Drawing). URL: https://learn.microsoft.com/en- us/dotnet/api/system.drawing.bitmap?view=dotn et-plat-ext-8.0.