From d459dfcf1cae8f5fb3b4080417befbb01eb9eb75 Mon Sep 17 00:00:00 2001 From: Zheyuan Wu <60459821+Trance-0@users.noreply.github.com> Date: Wed, 2 Apr 2025 10:50:56 -0500 Subject: [PATCH] update --- pages/CSE332S/CSE332S_L17.md | 147 +++++++++++++++++++++++++++ pages/CSE559A/CSE559A_L19.md | 71 +++++++++++++ pages/CSE559A/_meta.js | 1 + pages/Math4121/Math4121_L29.md | 119 +++++++++++++++++++++- public/Math4121/Finite_union_cut.png | Bin 0 -> 23034 bytes 5 files changed, 337 insertions(+), 1 deletion(-) create mode 100644 pages/CSE332S/CSE332S_L17.md create mode 100644 pages/CSE559A/CSE559A_L19.md create mode 100644 public/Math4121/Finite_union_cut.png diff --git a/pages/CSE332S/CSE332S_L17.md b/pages/CSE332S/CSE332S_L17.md new file mode 100644 index 0000000..7e96681 --- /dev/null +++ b/pages/CSE332S/CSE332S_L17.md @@ -0,0 +1,147 @@ +# CSE332S Lecture 17 + +## Object Oriented Programming Building Blocks + +OOP Building Blocks for Extensible, Flexible, and Reusable Code + +Today: Techniques Commonly Used in Design Patterns + +- **Program to an interface** (last time) +- **Object composition and request forwarding** (today) + - Composition vs. inheritance +- **Run-time relationships between objects** (today) + - Aggregate vs. acquaintance +- **Delegation** (later...) + +Next Time: Design Patterns + +Describe the core of a repeatable solution to common design problems. + +### Code Reuse: Two Ways to Reuse a Class + +#### Inheritance + +Code reuse by inheriting the implementation of a base class. + +- **Pros:** + - Inheritance relationships defined at compile-time - simple to understand. +- **Cons:** + - Subclass often inherits some implementation from superclass - derived class now depends on its base class implementation, leading to less flexible code. + +#### Composition + +Assemble multiple objects together to create new complex functionality, forward requests to the responsible assembled object. + +- **Pros:** + - Allows flexibility at run-time, composite objects often constructed dynamically by obtaining references/pointers to other objects (dependency injection). + - Objects known only through their interface - increased flexibility, reduced impact of change. +- **Cons:** + - Code can be more difficult to understand, how objects interact may change dynamically. + +### Example: Our First Design Pattern (Adapter Pattern) + +**Problem:** We are given a class that we cannot modify for some reason - it provides functionality we need, but defines an interface that does not match our program (client code). + +**Solution:** Create an adapter class, adapter declares the interface needed by our program, defines it by forwarding requests to the unmodifiable object. + +Two ways to do this: + +```cpp +class unmodifiable { +public: + int func(); // does something useful, but doesn’t match the interface required by the client code +}; +``` + +1. **Inheritance** + + ```cpp + // Using inheritance: + class adapter : protected unmodifiable { + // open the access to the protected member func() for derived class + public: + int myFunc() { + return func(); // forward request to encapsulated object + } + }; + ``` + +2. **Composition** + + ```cpp + class adapterComp { + unmodifiable var; + public: + int myFunc() { + return var.func(); + } + }; + ``` + +### Thinking About and Describing Run-time Relationships + +Typically, composition is favored over inheritance! Object composition with programming to an interface allows relationships/interactions between objects to vary at run-time. + +- **Aggregate:** Object is part of another. Its lifetime is the same as the object it is contained in. (similar to base class and derived class relationship) +- **Acquaintance:** Objects know of each other, but are not responsible for each other. Lifetimes may be different. + +```cpp +// declare Printable Interface +// declare printable interface +class printable { + public: + virtual void print(ostream &o) = 0; +}; +// derived classes defines printable +// interface +class smiley : public printable { + public: + virtual void print(ostream &o) { + o << ":)"; + }; +}; +// second derived class defines +// printable interface +class frown : public printable { + public: + virtual void print(ostream &o) {o << ":("; + }; +}; +``` + +1. **Aggregate** + +```cpp +// implementation 1: +// Aggregate relationship +class emojis { +printable * happy; +printable * sad; +public: +emojis() { +happy = new smiley(); +sad = new frown(); +}; +~emojis() { +delete happy; +delete sad; +}; +}; +``` + +2. **Acquaintance** + +```cpp +// implementation 2: +// Acquaintances only +class emojis { +printable * happy; +printable * sad; +public: +emojis(); +~emojis(); +// dependency injection +void setHappy(printable *); +void setSad(printable *); +}; +``` diff --git a/pages/CSE559A/CSE559A_L19.md b/pages/CSE559A/CSE559A_L19.md new file mode 100644 index 0000000..ad84824 --- /dev/null +++ b/pages/CSE559A/CSE559A_L19.md @@ -0,0 +1,71 @@ +# CSE559A Lecture 19 + +## Feature Detection + +### Behavior of corner features with respect to Image Transformations + +To be useful for image matching, “the same” corner features need to show up despite geometric and photometric transformations + +We need to analyze how the corner response function and the corner locations change in response to various transformations + +#### Affine intensity change + +Solution: + +- Only derivative of intensity are used (invariant to intensity change) +- Intensity scaling + +#### Image translation + +Solution: + +- Derivatives and window function are shift invariant + +#### Image rotation + +Second moment ellipse rotates but its shape (i.e. eigenvalues) remains the same + +#### Scaling + +Classify edges instead of corners + +## Automatic Scale selection for interest point detection + +### Scale space + +We want to extract keypoints with characteristic scales that are equivariant (or covariant) with respect to scaling of the image + +Approach: compute a scale-invariant response function over neighborhoods centered at each location $(x,y)$ and a range of scales $\sigma$, find scale-space locations $(x,y,\sigma)$ where this function reaches a local maximum + +A particularly convenient response function is given by the scale-normalized Laplacian of Gaussian (LoG) filter: + +$$ +\nabla^2_{norm}=\sigma^2\nabla^2\left(\frac{\partial^2}{\partial x^2}g+\frac{\partial^2}{\partial y^2}g\right) +$$ + +![Visualization of LoG](./images/Laplacian_of_Gaussian.png) + +#### Edge detection with LoG + +![Edge detection with LoG](./images/Edge_detection_with_LoG.png) + +#### Blob detection with LoG + +![Blob detection with LoG](./images/Blob_detection_with_LoG.png) + +### Difference of Gaussians (DoG) + +DoG has a little more flexibility, since you can select the scales of the Gaussians. + +### Scale-invariant feature transform (SIFT) + +The main goal of SIFT is to enable image matching in the presence of significant transformations + +- To recognize the same keypoint in multiple images, we need to match appearance descriptors or "signatures" in their neighborhoods +- Descriptors that are locally invariant w.r.t. scale and rotation can handle a wide range of global transformations + +### Maximum stable extremal regions (MSER) + +Based on Watershed segmentation algorithm + +Select regions that are stable over a large parameter range diff --git a/pages/CSE559A/_meta.js b/pages/CSE559A/_meta.js index 3a518e5..1d8dc77 100644 --- a/pages/CSE559A/_meta.js +++ b/pages/CSE559A/_meta.js @@ -21,4 +21,5 @@ export default { CSE559A_L16: "Computer Vision (Lecture 16)", CSE559A_L17: "Computer Vision (Lecture 17)", CSE559A_L18: "Computer Vision (Lecture 18)", + CSE559A_L19: "Computer Vision (Lecture 19)", } diff --git a/pages/Math4121/Math4121_L29.md b/pages/Math4121/Math4121_L29.md index c21aece..08ff5b9 100644 --- a/pages/Math4121/Math4121_L29.md +++ b/pages/Math4121/Math4121_L29.md @@ -1 +1,118 @@ -# Lecture 29 \ No newline at end of file +# Math4121 Lecture 29 + +## Continue on Measure Theory + +### Lebesgue Measure + +Caratheodory's criterion: + +$S$ is Lebesgue measurable if for all $A\subset S$, + +$$ +m_e(X) = m_e(X\cap S) + m_e(X\cap S^c) +$$ + +Let $\mathfrak{M}$ be the collection of all Lebesgue measurable sets. + +1. $\phi\in\mathfrak{M}$ +2. $\mathfrak{M}$ is closed under countable unions (proved last lecture) +3. $\mathfrak{M}$ is closed under complementation ($\mathfrak{M}$ is a $\sigma$-algebra) (goal today) + +> Desired properties of a measure: +> +> 1. $m(I)=\ell(I)$ for all intervals $I$ +> 2. If $\{S_n\}_{n=1}^{\infty}$ is a set of pairwise disjoint Lebesgue measurable sets, then +> +> $$ m\left(\bigcup_{n=1}^{\infty}S_n\right) = \sum_{n=1}^{\infty}m(S_n)$$ +> 3. If $R\subset S$, then $m(S\setminus R) = m(S) - m(R)$ + +Recall the Borel $\sigma$-algebra $\mathcal{B}$ was the smallest $\sigma$-algebra containing closed intervals. Therefore $\mathcal{B}\subset\mathfrak{M}$. + +Towards proving $\mathfrak{M}$ is closed under countable unions: + +#### Theorem 5.9 (Finite union/intersection of Lebesgue measurable sets is Lebesgue measurable) + +Any finite union/intersection of Lebesgue measurable sets is Lebesgue measurable. + +Proof: + +Suppose $S_1, S_2$ is a measurable, and we need to show that $S_1\cup S_2$ is measurable. Given $X$, need to show that + +![Finite union cut](https://notenextra.trance-0.com/math4121/Finite_union_cut.png) + +$$ +m_e(X) = m_e(X_1\cup X_2\cup X_3)+ m_e(X_4) +$$ + +Since $S_1$ measurable, $m_e(X_1\cup X_2\cup X_3)=m_e(X_3)+m_e(X_1\cup X_2)$. + +Since $S_2$ measurable, $m_e(X_3\cup X_4)=m_e(X_3)+m_e(X_4)$. + +Therefore, + +$$ +\begin{aligned} +m_e(X) &= m_e(X_1\cup X_2\cup X_3) + m_e(X_4) \\ +&= m_e(X_1\cup X_2) + m_e(X_3)+m_e(X_4) \\ +&= m_e(X_1\cup X_2) + m_e(X_3\cup X_4) \\ +&= m_e(X) +\end{aligned} +$$ + +by measurability of $S_1$ again. + +QED + +#### Theorem 5.10 (Countable union/intersection of Lebesgue measurable sets is Lebesgue measurable) + +Any countable union/intersection of Lebesgue measurable sets is Lebesgue measurable. + +Proof: + +Let $\{S_j\}_{j=1}^{\infty}\subset\mathfrak{M}$. Definte $T_j=\bigcup_{k=1}^{j}S_k$ such that $T_{j-1}\subset T_j$ for all $j$. + +And $U_1=T_1$, $U_j=T_j\setminus T_{j-1}$ for $j\geq 2$. + +Then $\bigcup_{j=1}^{\infty}S_j=\bigcup_{j=1}^{\infty}T_j=\bigcup_{j=1}^{\infty}U_j$. Notice that $\{U_j\}_{j=1}^{\infty}$ are pairwise disjoint, and $\{T_j\}_{j=1}^{\infty}$ are monotone. + +Let $X$ have finite outer measure. Since $U_n$ is measurable, + +$$ +\begin{aligned} +m_e(X\cap T_n) &= m_e(X\cap T_n\cap U_n)+ m_e(X\cap T_n\cap U_n^c) \\ +&= m_e(X\cap U_n)+ m_e(X\cap T_{n-1}) \\ +&= \sum_{j=1}^{n}m_e(X\cap U_j) +\end{aligned} +$$ + +Since $T_n$ is measurable and $T_n\subset S$, $S^c\subset T_n^c$. $m_e(X\cap T_n^c)\geq m_e(X\cap S^c)$. + +Therefore, + +$$ +m_e(X)=m_e(X\cap T_n)+m_e(X\cap T_n^c)\\ +\geq \sum_{j=1}^{n}m_e(X\cap U_j)+m_e(X\cap S^c) +$$ + +Take the limit as $n\to\infty$, + +$$ +\begin{aligned} +m_e(X) &\geq \sum_{j=1}^{\infty}m_e(X\cap U_j)+m_e(X\cap S^c) \\ +&= m_e(\bigcup_{j=1}^{\infty}(X\cap U_j))+m_e(X\cap S^c) \\ +&= m_e(X\cap S)+m_e(X\cap S^c) \\ +&\geq m_e(X) +\end{aligned} +$$ + +Therefore, $m_e(X\cap S)=m_e(X)$. + +Therefore, $S$ is measurable. + +QED + +#### Corollary from the proof + +Every open or closed set is Lebesgue measurable. + +(Every open set is a countable union of disjoint open intervals) diff --git a/public/Math4121/Finite_union_cut.png b/public/Math4121/Finite_union_cut.png new file mode 100644 index 0000000000000000000000000000000000000000..0f4e9971d432f15ed30bf21f0e7bda268df79d81 GIT binary patch literal 23034 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 r*NohqAt