高效快速中值濾波算法c語言,快速中值濾波及c語言實現.docx

.

..

快速中值濾波及c語言實現

學生姓名: 劉 勇 學 號: 6100410218 專業班級: 數媒101

【摘要】本文討論了用c語言在微機上實現中值濾波及快速算法,在程序設計的過程中充分考慮到程序運行的時間復雜度和空間復雜度的問題.解決了由于圖像太大而內存不夠的問題,運用對程序運行時的方法,得出在PENTIUM-S100MHz上中值濾渡的一般算法運行4.23秒.而快速算法運行2 58秒。

【關鍵詞】c語言;中值濾波;快速算法

1 引言

中值濾波是涂基發明的一種非線性信號處理技術,對抑制圖像的噪聲非常有效,在二維形式下,中值濾渡器是一個古有奇數個像素的滑動窗口,窗口正中的象素的灰度值用窗口內各個象素的中值代替窗口的中值為窗口中象素按大小順序排列后處于中間位置的象素;本文討論中值濾的一般算法并比較其運算速度。

2 用C語言實現算法的若干問題

在設計算法編制程序的時候,我們充分考慮到程序運行的時間復雜度和空間復雜度問題,在解決問

題的前提下,使算法盡量簡單,使程序運行占有的空間盡量的小,這樣來減少不必要的時問浪費和空間浪費,從而太大的提高程序執行的效率。

首先考慮到的內存問題。由于在本文算法中用的圖像是512+512 8bit,這就存在一個內存不夠大一整幅圖像不能一次性調入的問題。為了解受此問題,可以只開辟一個3"512的緩沖區n,將原圖像采用分批調入緩沖區,使內存不夠的問題得到了圓滿的解決。

另外為了對中值濾波的快速算法和普通算法進行精確的比較,采用對程序運行計時的方法,并精確計算每個算法運行的時間,使得出的結論更可靠。

3 中值濾波算法的C語言程序實現

本算法采用對開辟的3*512的緩沖區從左到右依次形成一個3*3的窗口.然后將此3*3的窗口放

人一個一維數組中,調用求中值子函數.通過排序得出中值,當此中值不等于窗口中間位置的象素時.用此中值來代替窗VI中間位置的象素灰度值.若此緩沖區處理完畢后,將緩沖區的第一行存入新建的文件中,將第二、第三行分別向上移動一行,若存人新建的文件中的行數小于或等于511(即這樣處理的行

數小于或等于511),則從原文件中調入一行作為緩沖區第三行,按上述方法進行直到處理的總行數等于511為止,最后,將緩沖區的第二、三行存人新建的文件,程序流程框圖如圖1

4 中值濾波快速算法的C語言程序實現

本算法充分利用了上一次處理的結果.采用迭代,逐次逼近的方法得到本次的中值,在一行處理完畢后轉人下一行也采用走S型的方法.這樣除第一個窗口采用了一伏排序得到中值外,其它的窗口都利

用上伏的窗口的象素刪除無用的3個象素后再加人新的3個象素,利用迭代的方法得到本次窗口的中值.這樣太大地提高了程序執行的效率。

4.1算法的解釋

首先是開辟一個3*512的緩沖區a,在初始化緩沖區時考慮到時間復雜度的問題,所以只初始化了第二、三行,而對第一行只初始化了前三個象素,這樣便在緩沖區中可以得到一個3*3的窗口,對此窗口進行排序求中值后得出第一個窗口的中間象素的值.將文件指針定位在2*512處。然后開始循環,當處理的行數小于或等于511時,將緩沖區a中的第二、三行分別向上移動一行變為第一、二行,從文件中讀人512個字節作為緩沖區的第三行,并用行數模2的方法設置方向標志k.當k為0時,從左向右移動窗口.當k為1時.從右向左移動窗口.而每一窗口都利用上次的窗口的像素刪除無用的3個象素后再加入新的3個象素.利用迭代的方法從上次的中值得到本次的中值。當處理完一行后將緩沖區的第一行存入新建的文件中,最后將緩沖區的第二、三行存入文件中。

4.2 算法代碼

// ImageProcessingDoc.cpp : implementation of the CImageProcessingDoc class

//

#include "stdafx.h"

#include "ImageProcessing.h"

#include "ImageProcessingDoc.h"

#include "GreyRatio.h"

#include

#define PI (acos(0.0) * 2)

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/

// CImageProcessingDoc

IMPLEMENT_DYNCREATE(CImageProcessingDoc, CD

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373112.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373112.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373112.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Arquillian 1.0.0.Final正式發布! 準備使用GlassFish和WebLogic! 殺死所有蟲子!

紅帽公司和JBoss社區今天宣布的1.0.0.Final發布的Arquillian ,其屢獲殊榮的建在Java虛擬機(JVM)運行測試平臺。 Arquillian大大減少了編寫和執行Java中間件集成和功能測試所需的工作。 它甚至使測試工程師能夠解決以前認為無法測試或測試成本…

Jquery選擇器特殊字符問題

場景: $("#" AAA ""),AAA代表某表單ID 當AAA為普通字符串時,ok; 當AAA含有特殊符號時(eg:a.b),獲取不到該對象; 原因:特殊符號會進行轉義&#xf…

qq五筆linux,QQ五筆 - 五筆小字典 QQ綁定很實用

九、 智能調頻、空碼檢索、詞序固定在QQ五筆中還有一些小亮點,比如它可以根據“最近輸入”、“輸入次數”對候選詞排序。同時為了加快檢索速度,默認只在常用字庫(GB2312)中檢索,只有出現空碼后才會繼續搜索容量更大的GBK字庫,很好…

DFS:C 小Y的難題(1)

解題心得: 1、在明確使用DFS之后一定要找到遞歸函數的出口、方向,以及遞歸的點(在某個情況下開始遞歸)(void 也可以return,但是沒有返回值)。遞歸時也要有遞歸的方向,最后都能夠達到遞歸的出口。 2、在DF…

使用ActiveMQ支持Spring Integration路由

正如我在上 一篇 文章中所討論的那樣 ,Spring Integration(SI) 是在Spring Framework之上構建的路由框架 ,它使您可以使用經過驗證的企業集成模式來通過消息傳遞解決系統集成問題。 配置好SI并執行路由和中介邏輯后,您…

quagga源碼分析--路由信息處理zebra-rib

對于各個協議生成的路由信息的處理屬于quagga中非常重要的一個功能,如何在內核進行路由增加,更新,刪除是一個復雜的過程。 quagga在thread任務調度中加入了一種工作隊列,work_queue,與內核的工作隊列類似,是…

android 關閉藍牙打電話功能,Android藍牙開發【八】hfp接聽、掛斷電話

繼續研究hfp相關功能。藍牙耳機可以控制手機接聽、拒接、掛斷電話,撥打電話等功能。本文主要分析下起這些操作的大致流程。在系統應用Bluetooth中com_android_bluetooth.cpp提供了多個回調方法,由hardware、協議棧回調過來。藍牙耳機的一些控制命令都會發…

android在listview中放入從sdcard讀取的bitmap

重寫viewbinder public class viewbinder_bookmark implements SimpleAdapter.ViewBinder{Overridepublic boolean setViewValue(View view, Object data, String textRepresentation){if(view instanceof ImageView && data instanceof Bitmap){ImageView imageview(I…

將狀態機模式實現為流處理器

在我的上一個博客中,我說我真的以為某些“四人行”(GOF)模式已經過時了,如果不是過時的話肯定不受歡迎。 特別是我說過StateMachine不是那么有用,因為您通常會想到另一種更簡單的方式來執行您正在執行的事情&#xff0…

android 自定義actionbar,如何讓android的actionbar浮動且透明

如上圖所示,谷歌地圖的actionbar是透明的,且浮動在整個布局之上,沒有占用布局空間。其實要做到這樣的效果,我們首先想到的是兩個方面:1.將讓actionbar浮動起來。2.給actionbar一個背景,可以為顏色也可以為圖…

CentOS 7安裝redis及php擴展

安裝remi源 # wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm # rpm -Uvh remi-release-7.rpm # sed -i -e "s/enabled1/enabled0/g" /etc/yum.repos.d/remi.repo 確認使用remi源時安裝的Redis版本。 安裝Redis 使用remi源yum安裝Redis。 # yum …

對Openshift上的Play Framework 2應用進行故障排除

Openshift故障排除 使用“ 自己動手”應用程序類型,您實際上可以有很大的自由度來支持幾乎可以在Linux機器上構建和運行的任何框架或服務器。 但是您必須做功課,并做一些研究。 因此,在本文中,我將向您展示一些我在使用Openshift和…

關于更換頭像的整個過程理解

之前我遇到一個問題,就是怎樣修改頭像,都沒有更改,后來把某個參數置為null,就解決了問題,但是知其然還要知其所以然,現在還是著重去梳理整個流程 頭像,需要關注的是3個變量: 本地地址…

Ajax與CustomErrors的尷尬

在ASP.NET程序中&#xff0c;為了給用戶顯示友好的錯誤信息&#xff0c;通常在web.config中進行如下的設置&#xff1a; <customErrors mode"RemoteOnly" defaultRedirect"/error/error.htm"> </customErrors> 但如果是一個ajax請求在服務端發…

JSF開發人員應該知道的5種有用方法

這篇文章的目的是總結一些JSF開發人員可以在日常工作中使用的便捷方法。 實用程序類是將所有方法放在一起的好地方。 我會稱此類為FacesAccessor。 第一種方法可能是最常用的方法。 它以給定名稱返回托管bean。 必須按faces-config.xml或注釋注冊該bean。 注入是好的&#xff0…

android項目編碼規范,Android 項目規范

Android 項目規范本文檔的目的是定義項目規范。這些應遵循整個 Android 項目以幫助我們保持整潔和統一的代碼庫。 &#x1f642;

Java創建WebService服務及客戶端實現

簡介 WebService是一種服務的提供方式&#xff0c;通過WebService&#xff0c;不同應用間相互間調用變的很方便&#xff0c;網絡上有很多常用的WebService服務&#xff0c;如&#xff1a;http://developer.51cto.com/art/200908/147125.htm&#xff0c;不同的語言平臺對…

01-17權限管理

管理頁面&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equi…

Java靜態方法可能會產生代碼異味

代碼氣味的定義 &#xff08;來自維基百科&#xff09;&#xff1a; “程序源代碼中任何可能表明存在更深層問題的癥狀。” 在Java中&#xff0c; 靜態方法允許您在“類范圍”內執行代碼&#xff0c;而不是像成員方法這樣的實例范圍。 這意味著&#xff0c;它們依賴于類級別的變…

android json 解析圖片,JSON解析并獲取android中的圖像

我想解析包含字符串和圖像的JSON對象。我的代碼正在工作&#xff0c;但它加載圖像太慢。我想加載另一個asynctask或服務的圖像&#xff0c;以減少加載時間。我怎樣才能做到這一點&#xff1f;哪一個是最好的方法使用asynctask或服務&#xff1f;這里是我的代碼JSON解析并獲取an…