使用傅利葉描述子識別形狀(matlab

2021-10-14 08:00:33 字數 4119 閱讀 1825

有整個程式和測試在文件裡,測試可執行。

檔案:n459.com/file/25127180-478678004

以下內容無關:

-------------------------------------------分割線---------------------------------------------

一,概述

抽象工廠模式為乙個產品家族提供了統一的建立介面。當需要這個產品家族的某一系列的時候,可以從抽象工廠中選出相對應的系列來建立乙個具體的工廠類別。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。

在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供物件。

產品等級結構:產品的繼承結構,與類的繼承相似。例如筆記本是乙個抽象的類,那麼華為筆記本、蘋果和聯想筆記本就是其子類。

產品族:指同乙個工廠生產的,位於不同的產品等級結構的一組產品。例如華為筆記本、手機、路由器等都產自華為,筆記本的等級結構不同,構成乙個產品族。

抽象工廠:是乙個介面,抽象工廠模式的核心,包含對多個產品等級結構的宣告,任何工廠類都必須實現這個介面。

具體工廠:是抽象工廠的實現,負責例項化某個產品族中的產品物件。例如華為工廠生產華為筆記本、手機、路由器等。

二,產品族和產品等級結構圖

我們以乙個品牌為乙個產品族,電腦、手機、路由器為產品等級,每乙個品牌都有自己的產品族,這就構成乙個完整產品群;

橫向代表一族,縱向代表乙個等級,橫縱交集代表某乙個品牌的某乙個產品(比如下圖中交集的點為電腦),請看下圖;

三,uml圖

這個類圖其實比較簡單,簡單說明下:

產品頂級介面:主要被產品抽象類實現;

產品抽象類:某個具體產品要實現的類;

具體實現類:具體產品實現,比如華為路由器實現自抽象類abstractrouter;

工廠介面:工廠介面中定義建立每個產品方法;

具體華為工廠:實現工廠介面,建立華為一族產品(路由器、手機、電腦);

四,具體**實現

**中我們以華為產品為例,分別定義華為電腦、手機、路由器產品,從uml類圖中可以看出我們的產品結構層級比較清晰,現在我們先設計我們產品。

下面開始定義產品;

產品頂級介面;

複製**

package pattern.abstractfactory.product;

/**

複製**

package pattern.abstractfactory.product;

/**

複製**

package pattern.abstractfactory.product;

/**

複製**

package pattern.abstractfactory.product;

/**

複製**

package pattern.abstractfactory.product;

/**

複製**

package pattern.abstractfactory.product;

/**

複製**

package pattern.abstractfactory.product;

/**

定義工廠介面;

複製**

package pattern.abstractfactory.factory;

import pattern.abstractfactory.product.inte***ceproduct;

/**

複製**

package pattern.abstractfactory.factory;

import pattern.abstractfactory.product.huaweicomputer;

import pattern.abstractfactory.product.huaweiphone;

import pattern.abstractfactory.product.huaweirouter;

import pattern.abstractfactory.product.inte***ceproduct;

/**

複製**

package pattern.abstractfactory;

import pattern.abstractfactory.factory.huaweifactory;

import pattern.abstractfactory.factory.inte***ctfactory;

import pattern.abstractfactory.product.inte***ceproduct;

/**

五,抽象工廠方法模式如何擴充套件產品族

抽象工廠模式對於橫向擴充套件方便,對於縱向擴充套件非常困難,也就是說:假如我們要擴充套件乙個新的品牌,比如擴充套件乙個小公尺品牌,小公尺產品有電腦、手機、路由器,擴充套件新品牌就是橫向擴充套件,非常方便,但是我們要給小公尺新增乙個電飯煲產品卻非常困難,這就是縱向擴充套件,所以在使用抽象工廠模式時一定要選擇合適的場景,也就是在不同場景中使用最適合的模式才是設計模式的精髓。

下面我們就來橫向擴充套件乙個新品牌的產品族,需要新增電腦、手機、路由器具體類(小公尺品牌)**如下;

小公尺電腦

複製**

package pattern.abstractfactory.product;

/**

複製**

package pattern.abstractfactory.product;

/**

複製**

package pattern.abstractfactory.product;

/**

複製**

package pattern.abstractfactory.factory;

import pattern.abstractfactory.product.inte***ceproduct;

import pattern.abstractfactory.product.micomputer;

import pattern.abstractfactory.product.miphone;

import pattern.abstractfactory.product.mirouter;

/**

複製**

package pattern.abstractfactory;

import pattern.abstractfactory.factory.huaweifactory;

import pattern.abstractfactory.factory.inte***ctfactory;

import pattern.abstractfactory.factory.mifactory;

import pattern.abstractfactory.product.inte***ceproduct;

/**注意:通過上面的品牌擴充套件我們發現,橫向擴充套件容易,縱向擴充套件非常困難,**可以非常方便的擴充套件乙個品牌已有的產品,但要擴充套件乙個未定義的產品卻異常困難,比如要擴充套件乙個華為平板,需要修改工廠邏輯**,新增產品結構,這顯然不符合設計模式開閉原則,所以在使用時一定要考慮清楚,確定不在有新的產品等級擴充套件。

六,優點和缺點及使用場景

優點抽象工廠模式隔離了具體類的生成, 使得客戶並不需要知道什麼被建立。 由於這種隔離,更換乙個具體工廠就變得相對容易, 所有的具體工廠都實現了抽象工廠中定義的那些公共介面, 因此只需改變具體工廠的例項, 就可以在某種程度上改變整個軟體系統的行為。

當乙個族中的多個物件被設計成一起工作時, 它能夠保證客戶端始終只使用同乙個族中的物件。

增加新的族很方便, 無須修改已有系統, 符合「開閉原則」。

缺點增加新的等級結構麻煩, 需要對原有系統進行較大的修改, 甚至需要修改抽象層**,這顯然會帶來較大的不便, 違背了「開閉原則」。

使用場景

乙個系統不應當依賴於具體類例項如何被建立、 組合和表達的細節, 這對於所有型別的工廠模式都是很重要的, 使用者無須關心物件的建立過程, 將物件的建立和使用解耦。

系統中有多於乙個的族, 而每次只使用其中某一族。 可以通過配置檔案等方式來使得使用者可以動態改變族, 也可以很方便地增加新的族。

等級結構穩定, 設計完成之後, 不會向系統中增加新的等級結構或者刪除已有的等級結構。

傅利葉 灰度

假設你原來的圖象為 i n,n 傅利葉變換後的矩陣為 f n,n 顯示傅利葉變換後的圖象其實就是顯示矩陣 f n,n 啊,因為變換後的係數是複數,所以取幅值。同時為了顯示方便,有時候會進行 normalize,把 f n,n 的範圍變換到0 255區間,有時候為了突出黑 白對比,還會進行對數運算 l...

傅利葉分析

傅利葉分析究竟是幹什麼用的?這段相對比較枯燥,已經知道了的同學可以直接跳到下乙個分割線。先說乙個最直接的用途。無論聽廣播還是看電視,我們一定對乙個詞不陌生 頻道。頻道頻道,就是頻率的通道,不同的頻道就是將不同的頻率作為乙個通道來進行資訊傳輸。下面大家嘗試一件事 先在紙上畫乙個sin x 不一定標準,...

傅利葉級數

微積分 總結自課本基礎知識 三角函式與正交性 特別注意三角函式系1,cosx sin x,co s2x,sin2 x,cos nx,s innx 在區間 上正交,指的是該函式系中任何兩個不用的函式積在 上的積分為0.這是乙個很奇妙的特性,特別驗證一下。給定的是對稱區間,因此,如果被積函式是奇函式,則...