matlab将二值图像与原图重叠_图像处理matlab及图像融合图像镶嵌图像拼接
要把double的圖像(范圍是0到1)再次轉化為256灰度值的,可以這樣
Igrey= uint8(I2*255)
圖像類型轉換函數:
dither() 通過顏色抖動,把真彩圖像轉換成索引圖像或灰度圖象轉換成二值圖像
gray2ind() 將灰度圖像(或二值圖像)轉換成索引圖像
grayslice() 通過設定的閾值將灰度圖象轉換成索引圖像
im2bw() 通過設定亮度閾值將灰度、真彩、索引圖象轉換成二值圖像
ind2gray() 將索引圖象轉換成灰度圖象
ind2rgb() 將索引圖象轉換成真彩色圖像
mat2gray() 將一個數據矩陣轉換成一幅灰度圖象
rgb2gray() 將真彩轉換成灰度圖象
rgb2ind() 將真彩轉換成索引圖象
圖像類型與類型間的轉換
1。索引圖像:包括一個數據矩陣X和一個色圖陣MAP。矩陣元素值指向MAP中的特定顏色向量。
2。灰度圖像:數據矩陣I,I中的數據代表了顏色灰度值。矩陣中的元素可以是double類型、8位或16位無符號的整數類型。
3。RGB圖像:即真彩圖像。矩陣中每個元素為一個數組,數組的元素定義了像素的紅、綠、藍顏色值。RGB數組可以是double類型、8位或16位無符號的整數類型。
4。二值圖像:一個數據陣列,每個象素只能取0或1。
矩陣的基本運算
行列式求值:det(A)
矩陣加減:+、-
矩陣相乘:*
矩陣左除:A/B?%相當于inv(A)*B
矩陣右除:A\B?%相當于A*inv(B)
矩陣的冪:^
矩陣轉置:'
矩陣求共軛(實部相同,虛部相反):conj(X)
矩陣求逆:inv(X)
級數的求和與收斂
symsum(fun,var,a,b):其中fun是通項表達式,var為求和變量,a為求和起點,b為求和終點
例如:I為1/[n*(2n+1)]從1到正無窮的和,求I
syms n;
f1=1/(n*(2*n+1));
I=symsum(f1,n,1,inf)
計算結果為:
I =2-2*log(2)
空間曲面
mesh()函數語法:
mesh(Z):
mesh(X,Y,Z,C):其中C是用來定義相應點顏色等屬性的數組
例:求x^2+y^2=z的空間曲面
x=-4:4;
y=x;
[X,Y]=meshgrid(x,y);%生成x,y坐標
Z=X.^2+Y.^2;
mesh(X,Y,Z)
曲面圖
[x,y]=meshgrid(xa,ya)
當xa,ya分別為m維和n維行向量,得到x和y均為n行m列矩陣。meshgrid常用于生成x-y平面上的網格數據;
mesh(x,y,z)繪制網面圖,是最基本的曲面圖形命令,其中x、y、z是同階矩陣,表示曲面三維數據;
mesh(xa,ya,z)
xa,ya分別為m維和n維向量,z為n行m列矩陣。等價于先[x,y]=meshgrid(xa,ya)再mesh(x,y,z);
surf(x,y,z)繪制曲面圖,與mesh用法類似;
contour(x,y,z)繪制等高線圖,與mesh用法類似,可指定z的范圍;
contour3(x,y,z)繪制三維等高線圖,與mesh用法類似,可指定z的范圍。
空間曲線
例:求方程組的空間曲線
1。化為參數方程組
x=t
y=sqrt[t(1-t)]
z=sqrt[1-x^2-y^2]
2。 程序
t=0:0.001:1;
x=t;
y=sqrt(t.*(1-t));
z=sqrt(1-x.^2-y.^2);
plot3(x,y,z,z,-y,z)
其中.*為數組相乘,.^為數組乘方
matlab實現離散余弦變換壓縮(JPEG壓縮原理)
JPEG圖像壓縮算法:
輸入圖像被分成8*8或16*16的小塊,然后對每一小塊進行二維DCT(離散余弦變換)變換,變換后的系數量化、編碼并傳輸;
JPEG文件解碼量化了的DCT系數,對每一塊計算二維逆DCT變換,最后把結果塊拼接成一個完整的圖像。在DCT變換后舍棄那些不嚴重影響圖像重構的接近0的系數。
DCT變換的特點是變換后圖像大部分能量集中在左上角,因為左上放映原圖像低頻部分數據,右下反映原圖像高頻部分數據。而圖像的能量通常集中在低頻部分。
實例程序:
Jpeg
I=imread('D:\MATLAB7\toolbox\images\imdemos\cameraman.tif');
%該圖片在安裝matlab的目錄中找,原圖為灰度圖象
I=im2double(I);%圖像存儲類型轉換
T=dctmtx(8);%離散余弦變換矩陣
B=blkproc(I,[8 8],'P1*x*P2',T,T');
%對原圖像進行DCT變換
mask=[1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
B2=blkproc(B,[8 8],'P1.*x',mask);
%數據壓縮,丟棄右下角高頻數據
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
%進行DCT反變換,得到壓縮后的圖像
imshow(I)
title('原始圖像')
figure;
imshow(I2)
title('壓縮后的圖像')
應用到的函數:
I=imread('圖像文件名') :讀取圖像數據,保存在矩陣I中;
imshow(I) :顯示灰度圖像I,其他用法見matlab幫助;
I2=im2double(I1) :把圖像數組I1轉換成double精度類型;
D=dctmtx(n) :二維離散余弦變換函數,返回n*n離散余弦變換矩陣。
一個n*n的變換矩陣T被定義成:
Tpq=1/sqrt(n)?,當p=0,0<=q<=M-1;
Tpq=sqrt(2/n)*cos[pi*(2q+1)*p/2n]?,當1<=p<=M-1,0<=q<=M-1。
B=blkproc(A,[m n],fun,P1,P2...)
:塊操作函數。對圖像A的每個不同的m*n塊應用fun函數,P1,P2等為fun函數參數。在圖像邊緣用0來擴展;只有當fun的返回矩陣是m*n矩陣時,B和A的大小才相同。
figure:強制生成一個新的個繪圖窗口;
非線性方程求解
fsolve(fun,x0,options)
其中fun為待解方程或方程組的文件名;
x0位求解方程的初始向量或矩陣;
option為設置命令參數
建立文件fun.m:
y=fun(x)
y=[x(1)-0.5*sin(x(1))-0.3*cos(x(2)), ...
x(2) - 0.5*cos(x(1))+0.3*sin(x(2))];
>>clear;x0=[0.1,0.1];fsolve(@fun,x0,optimset('fsolve'))
注:
...為續行符
m文件必須以為文件頭,調用符為@;文件名必須與定義的函數名相同;fsolve()主要求解復雜非線性方程和方程組,求解過程是一個逼近過程。
不定積分與定積分
不定積分:int(fun,var)
例:求∫sinaxsinbxsincxdx
syms a b c x
y=sin(a*x)*sin(b*x)*sin(c*x);
int(y,x);
pretty(ans)
定積分:int(fun,var,a,b)
其中a,b分別為上下限
求解線形方程
solve,linsolve
例:A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1];
%矩陣的行之間用分號隔開,元素之間用逗號或空格
B=[3;1;1;0]
X=zeros(4,1);%建立一個4元列向量
X=linsolve(A,B)
diff(fun,var,n):對表達式fun中的變量var求n階導數。
例如:F=sym('u(x,y)*v(x,y)');?%sym()用來定義一個符號表達式
diff(F);?%matlab區分大小寫
pretty(ans) %pretty():用習慣書寫方式顯示變量;ans是答案表達式
求極限
limit:
例:limit(F,x,a,left);對表達式F求極限,變量為x,從左邊趨近a。
inf:正無窮;-inf:負無窮。
matlab之基本繪圖函數
figure:強制生成一個新的個繪圖窗口;
syms x y t :聲明變量;
fplot(函數表達式,繪圖區間);
plot(橫坐標向量,縱坐標向量,顏色/線形等參數)
ezplot(函數表達式):簡單的fplot,easy fplot
axis([xmin xmax ymin ymax ...]):設置坐標軸顯示范圍
傅里葉基本知識:在圖象處理的廣泛應用領域中,傅立葉變換起著非常重要的作用,具體表現在包括圖象分析、圖象增強及圖象壓縮等方面。
假設f(x,y)是一個離散空間中的二維函數,則該函數的二維傅立葉變換的定義如下:
u=0,1…M-1 v=0,1…N-1 (1)
離散傅立葉反變換的定義如下:
x=0,1…M-1 y=0,1…N-1(3)
F(p,q)稱為f(m,n)的離散傅立葉變換系數。這個式子表明,函數f(m,n)可以用無數個不同頻率
的復指數信號和表示,而在頻率(w1,w2)處的復指數信號的幅度和相位是F(w1,w2)。
例如,函數f(m,n)在一個矩形區域內函數值為1,而在其他區域為0.
假設f(m,n)為一個連續函數,則f(m,n)的傅立葉變換的幅度值(即)顯示為網格圖。
將傅立葉變換的結果進行可視化的另一種方法是用圖象的方式顯示變換結果的對數幅值。
MATLAB提供的快速傅立葉變換函數
(1)fft2
fft2函數用于計算二維快速傅立葉變換,其語法格式為:
B = fft2(I)
B = fft2(I)返回圖象I的二維fft變換矩陣,輸入圖象I和輸出圖象B大小相同。
例如,計算圖象的二維傅立葉變換,并顯示其幅值的結果,其命令格式如下
load imdemos saturn2
imshow(saturn2)
B = fftshift(fft2(saturn2));
imshow(log(abs(B)),[],'notruesize')
(2)fftshift
MATLAB提供的fftshift函數用于將變換后的圖象頻譜中心從矩陣的原點移到矩陣的中心,其語法格式為:
B = fftshift(I)
對于矩陣I,B = fftshift(I)將I的一、三象限和二、四象限進行互換。
(2)ifft2
ifft2函數用于計算圖象的二維傅立葉反變換,其語法格式為:
B = ifft2(I)
B = ifft2(A)返回圖象I的二維傅立葉反變換矩陣,輸入圖象I和輸出圖象B大小相同。其語法格式含義與
fft2函數的語法格式相同,可以參考fft2函數的說明。
簡單低通濾波器的設計?一個圖象經過傅立葉變換后,就從空域變到了頻域,因此我們可以用信號處理中對于頻域信號的處理
方法對一幅圖象進行處理。比如對圖象進行低通濾波等。
雖然在計算機中必定能夠模擬一個銳截止頻率的理想低通濾波器,但它們不能用電子元件來實現。實
際中比較常用的低通濾波器有:巴特沃思(Butterworth)濾波器、指數濾波器(ELPF)、梯形低通濾波
器等。
在實驗中我們設計一個理想的低通濾波器。
設計理想的低通濾波器由其定義可知只要設計一個與頻域圖象大小完全相同的矩陣。在某一個域值內
該矩陣的值為1,其余為0即可。
例:若圖象的大小為128*128,則可以這樣設計一個低通濾波器:
H=zeros(128);
H(32:96,32:96)=1; %此處的范圍是人為取定的,可以根據需要更改。
若圖象矩陣I的傅立葉變換是B(已經用fftshift將頻譜中心移至矩陣的中心),則對這幅圖象做低通濾
波,再做傅立葉逆變換命令為
LOWPASS=B.*H; %此處設變換后的矩陣為LOWPASS,另注意這兒是矩陣的點乘。
C=ifft2(LOWPASS);
Imshow(abs(C))
引言?圖像鑲嵌技術(mosai
)是圖像融合技術的一種,一般指的是同種類型圖像的融合。他把多幅具有重疊信息部分的圖像銜接在一起,得到一幅完整的、范圍更大的圖像,并且去除其中的冗余信息。圖像鑲嵌技術的應用非常廣泛。例如,虛擬現實中的全景圖顯示及遙感圖像的處理等領域,都有廣泛的應用。圖像鑲嵌的評價標準是鑲嵌后得到的圖像,不但具有良好的視覺效果,而且還要盡可能地保持圖像光譜特征。通俗地說,就是鑲嵌的圖像越“無縫”,效果就越好。當然,這里的“無縫”,不是絕對意義上的,而是人眼分辨力以內的“無縫”。
一般情況下,進行圖像拼接時,在拼接的邊界上,不可避免地會產生拼接縫。這是因為兩幅待拼接圖像在灰度上的細微差別都會導致明顯的拼接縫。而在實際的成像過程中,這種細微差別很難避免。因此圖像鑲嵌技術的難點就在于準確尋找圖像之間的位置關系,并把兩幅以上的圖像平滑地銜接在一起,獲取一幅全局的圖像。本文的基本思想就是突破以往在尋找拼接線時,只要找到一個最佳拼接點,以此點做一條直線作為拼接線的不合理性,而是取一個閉值,在閉值范圍內尋找出每個拼接點,把這些點連成的折線作為拼接線,進行拼接。
2 拼接縫消除的方法
傳統的拼接縫消除的方法有很多,其中用得較多的方法有;中值濾波法、利用小波變換的方法、加權平均法等
2 . 1 中值濾波法消除拼接縫
中值濾波法是對接縫附近的區域進行中值濾波。對與周圍灰度值差比較大的象素取與周圍象素接近的值,從而消除光強的不連續性。中值濾波器處理接縫附近的狹長地帶。該方法速度快,但質量一般。平滑的結果會使圖像的分辨率下降,使圖像細節分辨不出,產生圖像模糊。
2 . 2 利用小波變換的方法消除拼接縫
小波變換方法也是目前比較常用的一種方法,他充分利用小波變換的多分辨率特性,很好地解決了拼接圖像的接縫問題。其原理為:由于小波變換具有帶通濾波器的性質,在不同尺度下的小波變換分量,實際上占有一定的頻寬,尺度j
越大,該分量的頻率越高,因此每一個小波分量所具有的頻寬不大,把要拼接的兩幅圖像先按小波分解的方法將他們分解成不同頻率的小波分量,只要分解得足夠細,小波分量的頻寬就能足夠小。然后在不同尺度下,選取不同的拼接寬度,把2
個圖像按不同尺度下的小波分量先拼接下來,然后再用恢復程序,恢復到整個圖像。這樣得到的圖像可以很好地兼顧清晰度和光滑度2
個方面的要求。但是,小波變換也存在缺點,如小波變換的算法比較復雜,需要在小波變換域內先進行拼接處理,在計算過程中涉及到大量的浮點運算和邊界處理問題,對實際生產中的大容量圖像進行處理時計算機內存開銷很大,且處理時間較長,拼接速度慢。
2 . 3 利用加權平滑的方法消除拼接縫
在實際中,使用較多的方法還有對重疊區域進行加權平滑的方法。這種方法的思路是:圖像重疊區域中象素點的灰度值Pixel
由兩幅圖像中對應點的灰度值LPixel 和RPixel 加權平均得到,即:
P ixel 一k X LPixel + ( l 一k ) X RPixel 其中:k 是漸變因子,滿足條件:o
< k < 1 ,在重疊區域中,按照從左圖像到右圖像的方向,k 由1
漸變至0 ,由此實現了在重疊區域中由左邊重疊區慢慢過渡到右邊重疊區的平滑拼接。
尋找最佳拼接線時,采用一個滑動窗口在圖像重疊區上逐行選擇灰度值差異最小的象元作為最佳拼接點。但是,如果按照這種拼接點選擇法,會出現一個新問題,就是往往會出現上下行拼接點位置相差較遠的現象,這樣拼接后有時因上下行之間灰度差異較大而造成新的接縫。為避免這類現象發生,不僅要考慮相鄰拼接點的灰度值差異,而且還要考慮相鄰拼接點的位置不能太遠。這樣就引進了一個闌值T
,把選擇最佳拼接點的范圍限制在這個闌值內。除第一行按灰度值差異最小的原則處理外,其他各行的拼接點從一個選定區域中選取:即與上一行所選拼接點同列的點及以該點為中心左右寬度為T
的區域中的點。在這個區域中選取一個最佳拼接點。選出每行的拼接點后連接成一條拼接線,可想而知,這條拼接線可能是條折線。這樣,由于各行都是選擇規定鄰域內灰度差異最小的點作為拼接點,接縫現象就會得到很大的改觀。同時,T
的值又不能選取得太大,應在1 一5
之間選取為佳。找出最佳拼接縫后,按前面所述的加權平滑對重疊區域再進行過渡,得到的圖像質量有很大改觀。
總結
以上是生活随笔為你收集整理的matlab将二值图像与原图重叠_图像处理matlab及图像融合图像镶嵌图像拼接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: chrome webdriver_(最新
- 下一篇: 马斯克遭遇“史上最晦气一周”:特斯拉、S