\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{Dodyy} \pdfinfo{ /Title (gaussian-filter-python.pdf) /Creator (Cheatography) /Author (Dodyy) /Subject (Gaussian Filter Python 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}{000000} \definecolor{LightBackground}{HTML}{F7F7F7} \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{Gaussian Filter Python Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Dodyy} via \textcolor{DarkBackground}{\uline{cheatography.com/208428/cs/44638/}}} \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}Dodyy \\ \uline{cheatography.com/dodyy} \\ \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*}{2} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Gaussian Filter}} \tn \SetRowColor{white} \mymulticolumn{1}{x{8.4cm}}{Kode ini menggunakan Gaussian Filtering untuk mengurangi noise dan menghaluskan gambar. Metode ini bekerja dengan mengonvolusi gambar menggunakan kernel Gaussian, yang membuat gambar tampak lebih halus. Noise berkurang, namun efek smoothing bisa mengorbankan beberapa detail halus. Meskipun begitu, Gaussian filter tetap efektif untuk membersihkan noise dengan sedikit penurunan ketajaman.% Row Count 8 (+ 8) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{1. Import Libraries}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{import cv2 \newline import numpy as np} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{cv2: Library OpenCV yang digunakan untuk pemrosesan gambar, termasuk membaca, menampilkan, dan memanipulasi gambar. \newline \newline numpy: Library untuk operasi numerik pada array multidimensi, seperti manipulasi data citra yang direpresentasikan sebagai matriks piksel.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{2. Load Image}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{image = cv2.imread('C:/Kuliah ya ges yak/Semester 3/PCD/Foto/example.jpg') \newline \newline if image is None: \newline print("Error: Image not found. Check the path.") \newline exit()} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{cv2.imread(): Mengambil gambar dari file. Jika gambar tidak ditemukan, program akan berhenti sebagai bagian dari penanganan error.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{3. Define Gaussian Kernel}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{kernel = np.array({[}{[}1, 2, 1{]}, \newline {[}2, 4, 2{]}, \newline {[}1, 2, 1{]}{]}) / 16} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{Gaussian Kernel: Matriks 3x3 yang digunakan untuk menghasilkan efek smoothing pada gambar. \newline Normalisasi: Nilai kernel dibagi 16 untuk menjaga total intensitas gambar tetap konsisten.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{4. Add Padding}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{padded\_image = cv2.copyMakeBorder(image, 1, 1, 1, 1, cv2.BORDER\_REFLECT)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{cv2.copyMakeBorder(): Menambahkan padding (dengan metode refleksi) di sekeliling gambar.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{5. Create Output Image}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{\seqsplit{gaussian\_filtered\_image} = np.zeros\_like(image)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{np.zeros\_like(): Membuat array dengan ukuran yang sama dengan gambar asli untuk menyimpan hasil filter.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{6. Apply Gaussian Filter (Manual Convolution)}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{for channel in range(image.shape{[}2{]}): \newline for i in range(1, padded\_image.shape{[}0{]} - 1): \newline for j in range(1, padded\_image.shape{[}1{]} - 1): \newline patch = padded\_image{[}i - 1:i + 2, j - 1:j + 2, channel{]} \newline gaussian\_filtered\_image{[}i - 1, j - 1, channel{]} = np.sum(patch * kernel)} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{Iterasi Channel: Memproses masing-masing channel warna (R, G, B) secara independen. \newline Patch 3x3: Mengambil area 3x3 dari gambar yang telah dipadankan. \newline Konvolusi: Mengalikan area tersebut dengan kernel Gaussian, lalu menjumlahkan hasilnya.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{7. Save Filtered Image}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{\seqsplit{cv2.imwrite('gaussian\_filtered\_image\_manual.jpg'}, \seqsplit{gaussian\_filtered\_image)}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{cv2.imwrite(): Menyimpan gambar hasil konvolusi ke file dengan nama yang diberikan.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{8. Display Images}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{cv2.imshow('Original Image', image) \newline cv2.imshow('Gaussian Filtered Image (Manual)', \seqsplit{gaussian\_filtered\_image)} \newline cv2.waitKey(0) \newline cv2.destroyAllWindows()} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{cv2.imshow(): Menampilkan gambar dalam jendela OpenCV. \newline cv2.waitKey(0): Menunggu input dari pengguna, seperti menekan tombol, untuk menutup jendela. \newline cv2.destroyAllWindows(): Menutup semua jendela gambar yang sedang terbuka.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Perbandingan Input dan Output}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{p{8.4cm}}{\vspace{1px}\centerline{\includegraphics[width=5.1cm]{/web/www.cheatography.com/public/uploads/dodyy_1729471855_Screenshot 2024-10-21 084700.png}}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{Gambar Original (Kiri): \newline Tingkat noise sangat tinggi, tersebar merata dengan bintik-bintik terang dan gelap yang membuat detail sulit terlihat. \newline Gambar Gaussian Filtered (Kanan): \newline Setelah diterapkan filter Gaussian, noise berkurang secara signifikan. Gambar menjadi lebih halus, meskipun beberapa noise masih tersisa dan detail halus sedikit kabur akibat efek smoothing.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}