HW01: First version of report added

This commit is contained in:
Christos Choutouridis 2025-04-29 20:36:41 +03:00
parent d771baa443
commit cb7a1f2a7c
7 changed files with 213 additions and 0 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "HW01/report/AUThReport"]
path = HW01/report/AUThReport
url = ssh://git@git.hoo2.net:222/hoo2/AUThReport.git

@ -0,0 +1 @@
Subproject commit 74ec4b5f6c66382e5f1b6d2e6930897e4ed53ea6

BIN
HW01/report/report.pdf Normal file

Binary file not shown.

207
HW01/report/report.tex Normal file
View File

@ -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=<language>
% Default: english
% Set the default language of the document which affects hyphenations,
% localization (section, dates, etc...)
%
% example: \documentclass[mainlang=greek]{AUThReport}
%
% 2) <language>
% 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}

View File

@ -79,12 +79,14 @@ modes = ["greedy", "non-greedy", "post-disturbance"]
# Run equalization # Run equalization
for mode in modes: for mode in modes:
print("Perform histogram equalization in mode: ", mode)
equalized_img = perform_hist_eq(input_array, mode) equalized_img = perform_hist_eq(input_array, mode)
out_filename = f"demo_outputs/equalization_{mode}.png" out_filename = f"demo_outputs/equalization_{mode}.png"
plot_comparison(input_array, equalized_img, f"Histogram Equalization ({mode})", out_filename) plot_comparison(input_array, equalized_img, f"Histogram Equalization ({mode})", out_filename)
# Run matching # Run matching
for mode in modes: for mode in modes:
print("Perform histogram matching in mode: ", mode)
matched_img = perform_hist_matching(input_array, ref_array, mode) matched_img = perform_hist_matching(input_array, ref_array, mode)
out_filename = f"demo_outputs/matching_{mode}.png" out_filename = f"demo_outputs/matching_{mode}.png"
plot_comparison(input_array, matched_img, f"Histogram Matching ({mode})", out_filename) plot_comparison(input_array, matched_img, f"Histogram Matching ({mode})", out_filename)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 KiB

After

Width:  |  Height:  |  Size: 208 KiB