實現SNN(對稱近鄰平滑濾波器)的程式碼
要求:演算法實現為函式[im]=SNN_denoise (I,N),其中I為讀入的影象矩陣; N為模板大小引數(正方形模板,邊長為:2*N+1)。
參考測試程式碼:I = imread('peppers.png');im = SNN_denoise(I,2);figure,imshow(im)
function [im]=SNN_denoise(I,N) % I = [1 3 2 3 2 1 2; 1 2 1 4 3 3 2; 1 10 2 3 4 4 2; % 5 2 6 18 8 7 3; 5 5 7 0 8 8 5; 5 6 7 8 9 9 8; % 4 5 6 8 8 6 7]; % N=2; [m, n]=size(I); I = imnoise(I,'salt & pepper'); figure,imshow(I); for i=N+1:m-N for j=N+1:n-N B = I(i-N:i+N,j-N:j+N); %B為取N*N的模板 A = reshape(B, 1, []); %把B變成一維放到A中,一層for迴圈,主要是為了節約遍歷時間 for k=1:2*N*(N+1) %取2*N*(N+1)個 對角線值接近I(i,j)的 a = A(1,k); %因為reshape,是把一列一列的放入A的第一行中 i1 = mod(k, 2*N+1); %a在模板中行的位置,模板始終由(1,1)開始 j1 = fix(k/(2*N+1))+1; %a在模板中列的位置,模板始終由(1,1)開始 i2 = 2*(N+1)-i1; %a的對角線,在模板中的位置 j2 = 2*(N+1)-j1; %a的對角線,在模板中的位置 b = A(1,(2*N+1)*(j2-1)+i2); %a的對角線在A的位置 if(abs(a-I(i,j))>abs(b-I(i,j))) C(k,1) = b; else C(k,1) = a; end end I(i, j) = round(mean(C)); end end im = I;
相關推薦
實現SNN(對稱近鄰平滑濾波器)的程式碼
要求:演算法實現為函式[im]=SNN_denoise (I,N),其中I為讀入的影象矩陣; N為模板大小引數(正方形模板,邊長為:2*N+1)。 參考測試程式碼:I = imread('peppe
實現KNN(K近鄰平滑濾波器)
要求:演算法實現為函式[im]=KNN_denoise (I,K,N),其中I為讀入的影象矩陣;K為最近鄰個數,N為模板大小引數(N*N)。 參考測試程式碼: I = imread('peppers
CVPR論文《100+ Times FasterWeighted Median Filter (WMF)》的實現和解析(附原始碼)。 任意半徑中值濾波(擴充套件至百分比濾波器)O(1)時間複雜度演算法的原理、實現及效果 任意半徑中值濾波(擴充套件至百分比濾波器)O(1)時間複雜度演算法的原理、實現及
四年前第一次看到《100+ Times FasterWeighted Median Filter (WMF)》一文時,因為他附帶了原始碼,而且還是CVPR論文,因此,當時也對程式碼進行了一定的整理和解讀,但是當時覺得這個演算法雖然對原始速度有不少的提高,但是還是比較慢。因此,沒有怎麼在意,這幾天有幾位朋友
Python 實現 KNN(K-近鄰)算法
動作 bsp operator sort 關於 png 如果 std labels 一、概述 KNN(K-最近鄰)算法是相對比較簡單的機器學習算法之一,它主要用於對事物進行分類。用比較官方的話來說就是:給定一個訓練數據集,對新的輸入實例,在訓練數據集中找到與該實
JavaScript實現AOP(面向切面編程)
body 原本 實現 bsp pro 出發點 log doc 帶來 什麽是AOP? AOP(面向切面編程)的主要作用是把一些跟核心業務邏輯模塊無關的功能抽離出來,這些跟業務邏輯無關的功能通常包括日誌統計、安全控制、異常處理等。把這些功能抽離出來之後, 再通過“動態織入”
Android 音視頻深入 十六 FFmpeg 推流手機攝像頭,實現直播 (附源碼下載)
音視頻 FFmpeg RTMP 直播 Android 源碼地址https://github.com/979451341/RtmpCamera/tree/master 配置RMTP服務器,雖然之前說了,這裏就直接粘貼過來吧 1.配置RTMP服務器 這個我不多說貼兩個博客分別是在mac和win
數據結構-堆 接口定義與實現分析(詳細註釋與圖解)
info 獲取 init ret targe 動態 函數 target 用戶自定義函數 如果想了解堆的概念,可以點擊此處查看前面關於堆的定義的隨筆。 堆的操作接口包括初始化堆、銷毀堆、向堆中插入元素、從堆頂移除元素、堆的結點個數。 我們用heap來命名一個堆。下面是對以上接
用Go 實現 Minecraft(一定要看到最後)
golang主題:用 Go 實現 Minecraft 內容: 下載編譯運行 圖形庫 為什麽用 go 實現 一些例子 顯示優化 持久化 主講師:餅幹 架構師,曾就職騰訊。主要技術方向是高並發以及分布式系統的設計與實現。 效果圖 項目地址 下載編譯運行 安裝 go get github.com/icexi
ASP.NET MVC計劃任務實現方法(定時執行某個功能)
AR tar 註意 eve 文件 ebr send npr 如何實現 系統中定時執行某個任務是比較常用的功能,如一個部門定期向上級部門上報數據是一個典型的例子,下面就簡單說說在.net mvc中如何實現定時執行某個功能的方法。 1、首先修改Glocal.asax文件,在A
如何得到一個接口所有的實現類(及子接口)?例如:Eclipse IDE
name 解析 例如 圖片 沒有 選中 java 叠代 interface (一)Eclipse IDE的做法 它會解析所有的Java文件、Class文件。技巧:在Eclipse中,選中Interface,按下F4,就可以查看到所有的實現類及子接口。 例如: (二)自己怎麽
FPGA-11-狀態機的實現例項(按鍵的消抖)
大致思路有了,如何設計實現呢?貌似這是一個很複雜的設計,實則不然,FSM的本質就是對具有邏輯規律和時序邏輯的事物的描述,採用FSM設計,問題迎刃而解! 1、從狀態變數入手,分析狀態變數: IDLE:按鍵空閒狀態(由於上拉電阻的作用,按鍵未被按下時保持高電平); FIL
大資料下的實時熱點功能實現討論(實時流的TopN)
我司內部有個基於jstorm的實時流程式設計框架,文件裡有提到實時Topn,但是還沒有實現。。。。這是一個挺常見挺重要的功能,但仔細想想實現起來確實有難度。實時流的TopN其實離大家很近,比如下圖百度和微博的實時熱搜榜,還有各種資訊類的實時熱點,他們具體實現方式不清楚,甚至有可能是半
【LeetCode題解】232_用棧實現佇列(Implement-Queue-using-Stacks)
目錄 描述 解法一:在一個棧中維持所有元素的出隊順序 思路 入隊(push) 出隊(pop) 檢視隊首(peek) 是否為空(empty) Java 實現 Python 實現 解法二:一
【LeetCode題解】225_用佇列實現棧(Implement-Stack-using-Queues)
目錄 描述 解法一:雙佇列,入快出慢 思路 入棧(push) 出棧(pop) 檢視棧頂元素(peek) 是否為空(empty) Java 實現 Python 實現 解法二:雙佇列,入慢出
【密碼學】RSA加密 kotlin實現方法(支援任意位元組長度)
這個編輯器不支援kotlin,尷尬了···· 算了,就用Java來弄吧 val 定義常量 var 定義變數 具體kotlin的開發手冊詳見:http://www.runoob.com/kotlin/kotlin-tutorial.html 真的不想用Miracl這個庫···而且只支援c 但是用ko
Java的跨平臺實現原理(Write Once,Run Anywhere)
Java的跨平臺實現原理 為什麼要跨平臺 在不同點作業系統之間,使用不同的指令集對計算機進行控制。如果沒有跨平臺,我們需要對window,Linux,unix等作業系統的指令集分別進行特定的語言開發 Java如何實現 在不同的作業系統之間,提供不同的虛擬機器,讓虛擬機器實
HashMap實現原理(jdk1.7/jdk1.8)
HashMap的底層實現: 1、簡單回答 JDK1.7:HashMap的底層實現是:陣列+連結串列 JDK1.8:HashMap的底層實現是:陣列+連結串列/紅黑樹 為什麼要紅黑樹? 紅黑樹:一個自平衡的二
C#LeetCode刷題之#225-用佇列實現棧(Implement Stack using Queues)
問題 使用佇列實現棧的下列操作: push(x) -- 元素 x 入棧 pop() -- 移除棧頂元素 top() -- 獲取棧頂元素 empty() -- 返回棧是否為空 注意: 你只能使用佇列的基本操作-- 也就是 push to back, peek/pop f
C++實現LRU(最久未使用)快取演算法
LRU快取演算法也叫LRU頁面置換演算法,是一種經典常用的頁面置換演算法,本文將用C++實現一個LRU演算法。 LRU演算法實現並不難,但是要高效地實現卻是有難度的,要想高效實現其中的插入、刪除、查詢
淺談C++多型實現原理(虛繼承的奧祕)
大夥都知道,如果要實現C++的多型,那麼,基類中相應的函式必須被宣告為虛擬函式(或純虛擬函式)。舉個例子: class Point { public: Point(float x = 0.0, float y = 0.0) : _x(x), _y(y) { } virtual fl