\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Aditangkasz} \pdfinfo{ /Title (mean-noise-filter.pdf) /Creator (Cheatography) /Author (Aditangkasz) /Subject (Mean Noise Filter Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{A3A3A3} \definecolor{LightBackground}{HTML}{F3F3F3} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Mean Noise Filter Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Aditangkasz} via \textcolor{DarkBackground}{\uline{cheatography.com/208415/cs/44652/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Aditangkasz \\ \uline{cheatography.com/aditangkasz} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 21st October, 2024.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Konsep Teori}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Mean Noise Filter adalah teknik pengolahan citra yang digunakan untuk mengurangi noise pada gambar dengan menghitung rata-rata nilai piksel dalam sebuah patch. Filter ini menggantikan nilai piksel pusat dengan rata-rata dari piksel-piksel tetangga untuk menghaluskan gambar.% Row Count 6 (+ 6) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{1. Library}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{import cv2 \newline import numpy as np} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{cv2 adalah library OpenCV yang digunakan untuk pengolahan citra. np adalah alias untuk NumPy, library yang digunakan untuk operasi numerik pada array.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{2. Load Image}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{image = cv2.imread('C:/Kuliah ya ges yak/Semester 3/PCD/Foto/example.jpg')} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Fungsi cv2.imread() digunakan untuk membaca gambar dari path yang diberikan. Path ini menuju ke file gambar yang akan diproses. Setelah gambar dibaca, gambar disimpan sebagai array NumPy dalam variabel image.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{3. Initializing Filtered Image}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{filtered\_image = np.zeros\_like(image)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Membuat array filtered\_image yang berukuran sama dengan gambar aslinya image, tetapi isinya adalah nol. Array ini akan digunakan untuk menyimpan hasil gambar yang telah difilter.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{4. Kernel Size and Padding Calculation}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{kernel\_size = 3 \newline padding = kernel\_size // 2} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{kernel\_size = 3 berarti kamu menggunakan kernel 3x3 (sebuah patch persegi dengan ukuran 3x3 piksel) untuk menghitung rata-rata piksel di sekitar setiap piksel pusat. padding = kernel\_size // 2 menentukan berapa banyak piksel di sekitar tepi gambar yang perlu ditambahkan sebagai "padding" agar proses filter bisa bekerja di tepi gambar. Untuk kernel 3x3, padding adalah 1 piksel.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{5. Padding Image}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{padded\_image = cv2.copyMakeBorder(image, padding, padding, padding, padding, cv2.BORDER\_REFLECT)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Fungsi cv2.copyMakeBorder() digunakan untuk menambahkan padding pada gambar. Dengan padding, ukuran gambar ditambah di setiap sisinya agar saat proses filtering, piksel di tepi gambar tetap bisa dihitung. cv2.BORDER\_REFLECT menambahkan padding dengan merefleksikan piksel tepi (mirror effect) sehingga hasil filter di tepi gambar tidak terlalu terdistorsi.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{6. Iterating Over Image}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{for i in range(padding, padded\_image.shape{[}0{]} - padding): \newline for j in range(padding, padded\_image.shape{[}1{]} - padding):} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Dua loop ini berjalan pada setiap piksel dalam gambar yang telah dipadding, kecuali piksel yang ada di luar area padding (loop dimulai dari padding hingga padded\_image.shape{[}0{]} - padding untuk baris, dan padded\_image.shape{[}1{]} - padding untuk kolom).} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Gambar asli}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{p{5.377cm}}{\vspace{1px}\centerline{\includegraphics[width=5.1cm]{/web/www.cheatography.com/public/uploads/aditangkasz_1729436451_Screenshot 2024-10-20 230017.png}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Gambar penuh noise dengan tepi-tepi yang kasar dan bintik-bintik acak.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{7. Extracting Patches for Filtering}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{patch = padded\_image{[}i-padding:i+padding+1, j-padding:j+padding+1{]}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Pada setiap iterasi, kamu mengambil sebuah patch berukuran 3x3 (disebabkan oleh kernel yang berukuran 3x3) di sekitar piksel yang sedang diproses. Patch ini adalah potongan gambar yang akan digunakan untuk menghitung nilai rata-rata.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{8. Applying the Mean Filter}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{filtered\_image{[}i-padding, j-padding{]} = np.mean(patch)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Menghitung rata-rata dari nilai-nilai intensitas piksel dalam patch menggunakan np.mean(). Nilai rata-rata ini kemudian digunakan untuk menggantikan nilai piksel di posisi yang sesuai dalam filtered\_image.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{9. Displaying the Filtered Image}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{cv2.imshow('Mean Filter', filtered\_image) \newline cv2.waitKey(0) \newline cv2.destroyAllWindows()} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{cv2.imshow() digunakan untuk menampilkan gambar yang telah difilter dalam jendela bernama 'Mean Filter'. cv2.waitKey(0) menunggu input dari pengguna sebelum menutup jendela. cv2.destroyAllWindows() menutup semua jendela yang dibuka oleh OpenCV.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Output}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Gambar asli: Gambar sebelum difilter menunjukkan adanya noise, terutama pada area dengan warna seragam. \newline % Row Count 3 (+ 3) Gambar hasil filter: Setelah menggunakan Mean Noise Filter, gambar menjadi lebih halus dengan noise yang berkurang.% Row Count 6 (+ 3) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Gambar hasil filter}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{p{5.377cm}}{\vspace{1px}\centerline{\includegraphics[width=5.1cm]{/web/www.cheatography.com/public/uploads/aditangkasz_1729436530_Screenshot 2024-10-20 230106.png}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Gambar lebih halus, bintik-bintik noise berkurang, dan tepi-tepi menjadi lebih smooth.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}