matlab練習程式(meanshift映像聚類)

  關於這個meanshift,一來可以用來作為目標跟蹤,二來可以用來進行映像聚類。我這裡只實現了映像聚類,當然,是按自己的理解編寫的程式。至於目標跟蹤將來一定也是要實現的,因為我最初看這個演算法的原因就是想用他來跟蹤目標的。  meanshift的基本原理我就不介紹了,比起我的介紹,網上有不少牛人們比我解釋的好,最後我會列出我參考的文章。我這裡說一下我是怎麼理解meanshift映像聚類的。這裡的聚類也像過去的濾波一樣,需要一個模板矩陣,不過這個模板不是事先設定好的矩陣,而是在當前處理的像素周

matlab練習程式(表面模糊)

  關於表面模糊的文章我是搜遍互連網只找到下面這兩篇:  1.http://bbs.redocn.com/viewthread.php?tid=274838&extra=&page=1  2.http://blog.csdn.net/maozefa/article/details/7710321  第一篇原理比較清楚,不過沒有代碼;第二篇原理就不太清楚了,不過有代碼,就看各位能不能看懂彙編了。  關於表面模糊,和其他模糊不同的是,其他模糊一般整個映像只用一個模板矩陣,而表面模糊對

多媒體指令(像素處理)

mmx指令:movq:移動8個位元組。paddb:每1個位元組作為一個整體單元相加。emms:mmx指令結束標誌。#include <iostream>#include <windows.h>#include <gdiplus.h>    //為將來使用GDI+處理映像做準備#pragma comment(lib, "gdiplus.lib")using namespace Gdiplus;using namespace std;typedef union{

wav檔案格式分析(代碼)

這個是為上一篇文章做結尾用的。這裡我只把基本的資料提取出來了,沒有進行下一步處理,資料提取出來,後面怎麼應用就看具體情況了。#include <iostream>#include <fstream>using namespace std;struct wav_struct{ unsigned long file_size; //檔案大小 unsigned short channel; //通道數 unsigned

matlab練習程式(映像地區分裂)

映像地區分裂可以將映像中相似的地區歸為一個子領域,否則這個地區分裂。分裂的步驟還是很好理解的。對一個映像而言,首先確定一個分裂準則,如果當前映像地區中有像素沒有滿足這個準則,那麼本地區繼續分裂,否則分裂停止。我這裡用的準則就是當前像素灰階是否和本地區平均灰階差距過大,如果相差很大則繼續分裂,否則分裂停止並將本地區賦值為本地區平均值。分裂具體步驟:1.輸入映像作為初始地區。2.判斷本地區是否有像素灰階與本地區平均灰階差距過大。若有,則本地區分解為四部分,對每部分繼續執行步驟2;若無,結束。(顯然的

matlab練習程式(二值映像內外邊界跟蹤)

目標內邊界的像素全都在目標裡面,目標外邊界的像素全都不在目標上,是包圍著目標的。二值映像內外邊界的計算都是有兩種方法的,所以一共是4種演算法,不過實際用到跟蹤的只有一個而已。 首先是內邊界跟蹤:第一種方法不是跟蹤方法。步驟是先對原映像腐蝕,然後用原映像減去腐蝕後的映像就得到邊界了。第二種方法是跟蹤方法。步驟如下:1.遍曆映像。2.標記第一個遇見像素塊的前景像素(i,j)。3.對這個像素周圍八鄰域逆時針搜尋,如果搜尋到周圍有前景像素,那麼更新座標(i,j)為(i',j'),並標記。4.不斷執行第3

matlab練習程式(方框模糊)

  這裡所謂的方框模糊呢,其實就是以前自己很熟悉的均值濾波。原理就是將當前像素為中心,以半徑r四周的(2*r+1)^2個像素求平均再賦值給當前像素就可以啦。這個實在是沒什麼可解釋的了,都是很簡單的東西。下面是代碼:clear all;close all;clc;r=5;img=imread('lena.jpg');img=double(img);[m

多媒體指令(映像二值化)

主要用來學習多媒體指令的,要不我也不會這麼麻煩的用win32 sdk編程。果然要只學習映像演算法,還是推薦matlab。這裡主要用了pcmpgtb指令格式 pcmpgtb mm0,mm1; 解釋:當 mm0 中對應位元組大於 mm1對應位元組時,mm0相應位置置0xff,否則置0x00。當然,相關還有pcmpgtw等。詳見這裡//本程式算是一個簡單的架構了,可以用來處理映像//主要是用來學習多媒體指令mmx/sse相關的。#include <windows.h>#include

matlab練習程式(映像局部熵)

又被國內論文坑了,話說寫論文要有良心。今天在看局部熵方面的內容,看論文中介紹的內容感覺局部熵挺容易了,於是就有了實現的想法,結果效果非常糟糕。得到的幾乎是一張空白的圖片,就像下面一樣:究其原因是各種論文上都寫了這樣一個公式:這裡f(i,j)就是在m*n這個局部的像素,這個沒問題,不過這裡的p是什麼東西,按這裡的定義p是當前像素灰階佔局部總灰階的機率,而p原本應該是局部長條圖,也就是當前像素灰階個數佔局部像素總個數的機率,所以這裡的意義我也不明白了,結果按公式計算就得到了,和各種論文中的圖都不一樣

[學習opencv]彩色映像通道分離、合成

將彩色映像RGB三色分離出來是一個很有意義的操作。用到void split(const Mat& mtx,vector<Mat>&  mv),void merge(const vector<Mat>& mv,Mat& dst)這兩個函數。#include "cv.h"#include "highgui.h"#include <iostream>#include <vector>using namespace std;

多媒體指令(記憶體拷貝加速)

本來自己寫了一個,不過效能竟然和memcpy一樣,一點提升都沒有,所以有就去網上找了一個效能好的。下面的程式是對100MB資料進行記憶體拷貝.我測試了一下。直接調用memcpy時間為100ms左右,而asm中的程式能把時間能縮短到80ms左右。效能提高的還是很明顯的。#include <iostream>#include <ctime>#define N 100*1024*256using namespace std;int main(int argc, char*

matlab練習程式(Kruskal最小產生樹)

老物了,網上的例子多的數不過來。不過我還是有必要練習一下的。之所以看這個演算法是因為最近在看顏色彙總向量時,有的論文用到了最小產生樹,因此我就拿來熟悉一下。Kruskal演算法類似於連通分支演算法,感覺和過去實現過的連通地區標記演算法非常像。步驟:1.對於一個圖,將圖的每條邊提取出來從小到大進行排序。2.將已排序的邊依次加入到新圖中,如果新圖中出現了環,那麼就捨棄這條邊。3.不斷重複第二步。下面兩個圖就是kruskal演算法前後的樣子。代碼如下:main.mclear all;close

matlab練習程式(最大類間方差二值化映像)

  這個過去也實現過,不過現在回頭看,當時寫的還真是糟糕,所以現在決定用matlab重寫了。而且當時的方法現在來看還真是不怎麼樣呢。  這裡用的方法是《特徵提取與影像處理》3.3.4裡的。  下面是代碼:function main img=imread('lena.jpg'); imshow(img); img=double(img); [m n]=size(img); Hist=zeros(1,256); for i=1:m for

[學習opencv]高斯、中值、均值、雙邊濾波

四種經典濾波演算法,在opencv文檔中都能找到的,熟悉一下調用規範。#include "cv.h"#include "highgui.h"#include <iostream>using namespace std;using namespace cv;int main(int argc, char* argv[]){ Mat src = imread("misaka.jpg"); Mat dst; //參數是按順序寫的 //

多媒體指令(映像灰階化)

權當練手了,效果不好,cpu沒有提供pmulluw這樣一個無符號字相乘指令。處理的效果和matlab明顯不同,尤其是背景,我實在找不出問題在哪裡,最可能就在寄存器符號上。灰階公式是:Gray = (R*76 + G*150 + B*30) >>

matlab練習程式(映像濾波時的邊界處理2)

  我真是弱爆了,我原來以為邊界處理用我上一篇的方法就能很好的處理了,結果效果並不好。我只是和標準的imfilter函數進行了比較,其實imfilter函數還有一些參數我沒用上,比如‘replicate’,'symmetric'等,如果加上這些參數,我的效果就比不上matlab的效果了,所以這次不用上一篇的方法了,就用邊界擴充好了。  邊界擴充是把原圖的四周都加上r個像素,並且把這r個像素的值用原圖最外圍的r個像素來替代,然後再對新映像濾波,取原圖的大小就行了。這種方法雖然在時間與空間複雜度上比

[學習opencv]映像腐蝕、膨脹、開閉操作

映像的基本形態學操作。#include "cv.h"#include "highgui.h"using namespace cv;int main(int argc, char* argv[]){ Mat src = imread("misaka.jpg"); Mat dst; //輸入映像 //輸出映像 //單元大小,這裡是5*5的8位單元 //腐蝕位置,為負值取核中心

[學習opencv]映像sobel、laplacian、canny邊緣檢測

三種常見的邊緣檢測運算元。#include "cv.h"#include "highgui.h"using namespace cv;int main(int argc, char* argv[]){ Mat src = imread("misaka.jpg"); Mat dst; //輸入映像 //輸出映像 //輸入映像色彩通道數 //x方向階數 //y方向階數 Sobel(

matlab練習程式(k-means聚類)

聚類演算法,不是分類演算法。分類演算法是給一個資料,然後判斷這個資料屬於已分好的類中的具體哪一類。聚類演算法是給一大堆未經處理資料,然後通過演算法將其中具有相似特徵的資料聚為一類。這裡的k-means聚類,是事先給出未經處理資料所含的類數,然後將含有相似特徵的資料聚為一個類中。所有資料中還是Andrew

多媒體指令(灰階像素最大值)

如果不是處理的灰階映像,那麼最大值也就沒什麼意思了。彩色圖也可以轉成灰階圖嘛。雖然用了彙編,不過沒有使用多媒體指令。灰階映像的RGB都一樣,沒必要使用mmx寄存器了,直接對單個位元組處理就行了。獲得最小值和獲得最大值原理一樣,只需改一個指令,把ja改為jna就行了。Pix asmGetMaxGrayPix(BitmapData *data){ //處理的是灰階映像,所以RGB值都一樣 //這裡不需要用mmx指令也可以 UINT Height=data->Height;

總頁數: 61357 1 .... 9034 9035 9036 9037 9038 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.