diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..cf6262b --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "HW01/report/AUThReport"] + path = HW01/report/AUThReport + url = ssh://git@git.hoo2.net:222/hoo2/AUThReport.git diff --git a/HW01/report/AUThReport b/HW01/report/AUThReport new file mode 160000 index 0000000..74ec4b5 --- /dev/null +++ b/HW01/report/AUThReport @@ -0,0 +1 @@ +Subproject commit 74ec4b5f6c66382e5f1b6d2e6930897e4ed53ea6 diff --git a/HW01/report/report.pdf b/HW01/report/report.pdf new file mode 100644 index 0000000..339ce65 Binary files /dev/null and b/HW01/report/report.pdf differ diff --git a/HW01/report/report.tex b/HW01/report/report.tex new file mode 100644 index 0000000..c628e28 --- /dev/null +++ b/HW01/report/report.tex @@ -0,0 +1,207 @@ +% +% !TEX TS-program = xelatex +% !TEX encoding = UTF-8 Unicode +% !TEX spellcheck = el-GR +% +% AUTH report template for english +% +% Requires compilation with pdfLaTeX or XeLaTeX +% +% authors: +% Χρήστος Χουτουρίδης ΑΕΜ 8997 +% cchoutou@ece.auth.gr + +% Options: +% +% 1) mainlang= +% Default: english +% Set the default language of the document which affects hyphenations, +% localization (section, dates, etc...) +% +% example: \documentclass[mainlang=greek]{AUThReport} +% +% 2) +% Add hyphenation and typesetting support for other languages +% Currently supports: english, greek, german, frenc +% +% example: \documentclass[english, greek]{AUThReport} +% +% 3) short: Requests a shorter title for the document +% Default: no short +% +% example: \documentclass[short]{AUThReport} +% +\documentclass[a4paper, 11pt, mainlang=greek, english]{AUThReport/AUThReport} + +\CurrentDate{\today} + +% Greek report document setup suggestions +%--------------------------------- +% Document configuration +\AuthorName{Χρήστος Χουτουρίδης} +\AuthorAEM{8997} +\AuthorMail{cchoutou@ece.auth.gr} + +%\CoAuthorName{CoAuthor Name} +%\CoAuthorAEM{AEM} +%\CoAuthorMail{CoAuthor Mail} + +% \WorkGroup{Ομάδα Χ} + +\DocTitle{Εργασία 1} +\DocSubTitle{Παραλλαγές αλγορίθμων εξισορρόπησης και αντιστοίχισης ιστογράμματος} + +\Department{Τμήμα ΗΜΜΥ. Τομέας Ηλεκτρονικής} +\ClassName{Ψηφιακή Επεξεργασία Εικόνας} + +\InstructorName{Α. Ντελόπουλος} +\InstructorMail{} + + +\CoInstructorName{Δ. Αλέτρας} +\CoInstructorMail{lnmpikas@ece.auth.gr} + + +% Local package requirements +%--------------------------------- +%\usepackage{tabularx} +%\usepackage{array} +%\usepackage{commath} + +\usepackage{amsmath, amssymb, amsfonts} +\usepackage{graphicx} +\usepackage{float} + +\begin{document} + +% Request a title page or header +\InsertTitle + +\section{Εισαγωγή} + +\par + + +\subsection{Παραδοτέα} +Τα παραδοτέα της εργασίας αποτελούνται από: +\begin{itemize} + \item Την παρούσα αναφορά. + \item Τα αρχεία dmeo.py, hist\_modif.py, hist\_utils.py + \item Το \href{https://git.hoo2.net/hoo2/DigitalImageProcessing/src/branch/master/HW01}{σύνδεσμο} με το αποθετήριο που περιέχει όλο το project με τον κώδικα σε python της αναφοράς και τα παραδοτέα. +\end{itemize} + +\section{Εξισορρόπηση Ιστογράμματος (Equalization)} + +\subsection{Τεχνική περιγραφή και σχόλια υλοποίησης} + +Η εξισορρόπηση ιστογράμματος στοχεύει στη βελτίωση της αντίθεσης μιας εικόνας κατανέμοντας ομοιόμορφα τις εντάσεις φωτεινότητας. +Για την υλοποίηση αναπτύχθηκε η συνάρτηση \texttt{perform\_hist\_eq()}, η οποία στηρίζεται στη γενικευμένη \texttt{perform\_hist\_modification()}. +Η \texttt{perform\_hist\_eq()} δημιουργεί έναν ισοκατανεμημένο στόχο ιστογράμματος με \texttt{L=256} επίπεδα και καλεί την τροποποίηση με το επιθυμητό mode (\texttt{greedy}, \texttt{non-greedy}, \texttt{post-disturbance}). + +\paragraph{Περιγραφή Κώδικα} +Ο κώδικας ακολουθεί τα εξής βήματα: +\begin{enumerate} + \item Υπολογισμός του ιστογράμματος εισόδου. + \item Δημιουργία στόχου: ισοκατανομή με ίσες πιθανότητες ανά επίπεδο. + \item Κλήση της \texttt{perform\_hist\_modification()} με το επιλεγμένο mode για να μετασχηματιστεί η εικόνα. +\end{enumerate} + +Η \texttt{perform\_hist\_modification()} χαρτογραφεί κάθε επίπεδο εισόδου σε επίπεδο εξόδου με βάση την επιθυμητή κατανομή, χρησιμοποιώντας διαφορετικές στρατηγικές εκχώρησης αναλόγως του mode. + +\subsection{Plots και σχόλια για τα αποτελέσματα} + +\begin{figure}[H] + \centering + \includegraphics[width=0.9\textwidth]{../scripts/demo_outputs/equalization_greedy.png} + \caption{Ισοστάθμιση ιστογράμματος με χρήση greedy στρατηγικής.} +\end{figure} + +\begin{figure}[H] + \centering + \includegraphics[width=0.9\textwidth]{../scripts/demo_outputs/equalization_non-greedy.png} + \caption{Ισοστάθμιση ιστογράμματος με χρήση non-greedy στρατηγικής.} +\end{figure} + +\begin{figure}[H] + \centering + \includegraphics[width=0.9\textwidth]{../scripts/demo_outputs/equalization_post-disturbance.png} + \caption{Ισοστάθμιση ιστογράμματος με χρήση post-disturbance στρατηγικής.} +\end{figure} + +\paragraph{Σχολιασμός αποτελεσμάτων} + +Παρατηρείται ότι η ισοστάθμιση δεν επιτυγχάνεται πλήρως. +Πιο συγκεκριμένα: +\begin{itemize} + \item Στο \texttt{greedy} mode, πολλά επίπεδα εισόδου συγκεντρώνονται στα ίδια επίπεδα εξόδου, καθώς η στρατηγική είναι άπληστη και δεν διασφαλίζει σωστή εξισορρόπηση. + \item Στο \texttt{non-greedy} mode, υπάρχει κάποια βελτίωση, αλλά η μέθοδος δεν εξισορροπεί τέλεια, επειδή τα επίπεδα εισόδου δεν κατανέμονται ιδανικά λόγω του τρόπου που διαχειριζόμαστε το έλλειμμα (deficiency). + \item Στο \texttt{post-disturbance} mode, εισάγεται τυχαίος θόρυβος πριν την αντιστοίχιση, γεγονός που οδηγεί σε ελαφρώς καλύτερη κατανομή, αλλά το αποτέλεσμα εξακολουθεί να είναι μακριά από την ιδανική ισοκατανομή. +\end{itemize} + +Η κύρια αιτία είναι ότι η μετατροπή βασίζεται σε απλή αντιστοίχιση επιπέδων χωρίς πραγματική υπολογιστική σύγκλιση σε ομοιόμορφο ιστόγραμμα. + +\section{Αντιστοίχιση Ιστογράμματος (Matching)} + +\subsection{Τεχνική περιγραφή και σχόλια υλοποίησης} + +Η αντιστοίχιση ιστογράμματος έχει ως στόχο τη μεταβολή του ιστογράμματος μιας εικόνας ώστε να προσεγγίσει αυτό μιας εικόνας αναφοράς. +Για την υλοποίηση χρησιμοποιήθηκε η συνάρτηση \texttt{perform\_hist\_matching()}, η οποία: +\begin{itemize} + \item Υπολογίζει το κανονικοποιημένο ιστόγραμμα της εικόνας αναφοράς. + \item Καλεί την \texttt{perform\_hist\_modification()} χρησιμοποιώντας το ιστόγραμμα αναφοράς ως στόχο. +\end{itemize} + +\paragraph{Περιγραφή Κώδικα} +Η διαδικασία ακολουθεί τα εξής βήματα: +\begin{enumerate} + \item Ανάγνωση της εικόνας αναφοράς. + \item Υπολογισμός κανονικοποιημένου ιστογράμματος για την εικόνα αναφοράς. + \item Εκτέλεση της τροποποίησης με βάση το ιστόγραμμα αναφοράς και το επιθυμητό mode. +\end{enumerate} + +Όπως και στην εξισορρόπηση, τα διαφορετικά modes καθορίζουν πώς γίνεται η αντιστοίχιση των επιπέδων. + +\subsection{Plots και σχόλια για τα αποτελέσματα} + +\begin{figure}[H] + \centering + \includegraphics[width=0.9\textwidth]{../scripts/demo_outputs/matching_greedy.png} + \caption{Αντιστοίχιση ιστογράμματος με χρήση greedy στρατηγικής.} +\end{figure} + +\begin{figure}[H] + \centering + \includegraphics[width=0.9\textwidth]{../scripts/demo_outputs/matching_non-greedy.png} + \caption{Αντιστοίχιση ιστογράμματος με χρήση non-greedy στρατηγικής.} +\end{figure} + +\begin{figure}[H] + \centering + \includegraphics[width=0.9\textwidth]{../scripts/demo_outputs/matching_post-disturbance.png} + \caption{Αντιστοίχιση ιστογράμματος με χρήση post-disturbance στρατηγικής.} +\end{figure} + +\paragraph{Σχολιασμός αποτελεσμάτων} + +Παρατηρείται ότι και στην περίπτωση της αντιστοίχισης η τελική μορφή των ιστογραμμάτων δεν προσεγγίζει με ακρίβεια το ιστόγραμμα της εικόνας αναφοράς. +Συγκεκριμένα: +\begin{itemize} + \item Στο \texttt{greedy} mode, πολλά επίπεδα εισόδου συνδέονται με λίγα επίπεδα εξόδου, προκαλώντας υπερσυσσώρευση. + \item Στο \texttt{non-greedy} mode, υπάρχει μερική βελτίωση, όμως εξακολουθεί να υπάρχει απώλεια ακρίβειας στις περιοχές χαμηλής ή υψηλής πυκνότητας. + \item Στο \texttt{post-disturbance} mode, η διασπορά βελτιώνεται, αλλά η κατανομή απέχει ακόμα από το ιδανικό. +\end{itemize} + +Η αποτυχία στην πλήρη αντιστοίχιση οφείλεται στο γεγονός ότι η υλοποίηση βασίζεται σε τοπική αντιστοίχιση επιπέδων και όχι σε παγκόσμια αντιστοίχιση αθροιστικών συναρτήσεων κατανομής (CDF), όπως απαιτείται στη θεωρητικά σωστή μέθοδο. + +\section{Συμπεράσματα} + +Από την πειραματική αξιολόγηση διαπιστώθηκε ότι: +\begin{itemize} + \item Η μέθοδος ισοστάθμισης και αντιστοίχισης που αναπτύχθηκε λειτουργεί σε βασικό επίπεδο, αλλά δεν επιτυγχάνει ακριβή προσαρμογή της κατανομής. + \item Η στρατηγική \texttt{post-disturbance} οδηγεί σε πιο ομαλή και φυσική κατανομή επιπέδων, αν και δεν αρκεί για την πλήρη επιδιόρθωση. + \item Μια ακριβέστερη υλοποίηση θα απαιτούσε τη χρήση σωστής αντιστοίχισης των αθροιστικών συναρτήσεων κατανομής (CDF matching). +\end{itemize} + +Η συνολική υλοποίηση βασίστηκε σε modular σχεδίαση, επιτρέποντας εύκολη παραμετροποίηση και δοκιμή διαφορετικών στρατηγικών αντιστοίχισης. + +\end{document} diff --git a/HW01/scripts/demo.py b/HW01/scripts/demo.py index a9e8291..205e20c 100644 --- a/HW01/scripts/demo.py +++ b/HW01/scripts/demo.py @@ -79,12 +79,14 @@ modes = ["greedy", "non-greedy", "post-disturbance"] # Run equalization for mode in modes: + print("Perform histogram equalization in mode: ", mode) equalized_img = perform_hist_eq(input_array, mode) out_filename = f"demo_outputs/equalization_{mode}.png" plot_comparison(input_array, equalized_img, f"Histogram Equalization ({mode})", out_filename) # Run matching for mode in modes: + print("Perform histogram matching in mode: ", mode) matched_img = perform_hist_matching(input_array, ref_array, mode) out_filename = f"demo_outputs/matching_{mode}.png" plot_comparison(input_array, matched_img, f"Histogram Matching ({mode})", out_filename) diff --git a/HW01/scripts/demo_outputs/equalization_post-disturbance.png b/HW01/scripts/demo_outputs/equalization_post-disturbance.png index cdcb37b..5441e4e 100644 Binary files a/HW01/scripts/demo_outputs/equalization_post-disturbance.png and b/HW01/scripts/demo_outputs/equalization_post-disturbance.png differ diff --git a/HW01/scripts/demo_outputs/matching_post-disturbance.png b/HW01/scripts/demo_outputs/matching_post-disturbance.png index e64194c..93ed6f5 100644 Binary files a/HW01/scripts/demo_outputs/matching_post-disturbance.png and b/HW01/scripts/demo_outputs/matching_post-disturbance.png differ