1. 程式人生 > >實現SNN(對稱近鄰平滑濾波器)的程式碼

實現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

實現KNNK近鄰平滑濾波器

要求:演算法實現為函式[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 實現 KNNK-近鄰算法

動作 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