1. 程式人生 > >matlab中的影象座標系統

matlab中的影象座標系統

有時我們的圖顯示了沒有軸標記的影象。這是函式imshow的預設行為。但是幾何影象變換的分析和解釋是通過顯示這些形象的排列來輔助的。開啟標記的一種方法是在呼叫imshow之後呼叫axis。例如:

f=imread('circuit-board.tif');
imshow(f)
axis on
xlabel x
ylabel y

這裡寫圖片描述

如圖,原點在左上角,x軸是水平的,並且向右延伸;y是垂直的,並且向下延伸。這個約定即影象空間座標系統。在這個系統中,x軸和y軸與規定的影象座標系統相反。用於設定一定的使用者引數選擇的工具箱函式iptsetpref可用於始終產生imshow以顯示記號標誌。為轉向帶有記號和標記的顯示,可呼叫

iptsetpref imshowAxesVisible on

對於包含M行、N列的影象來說,預設的XData向量是[1,N],預設的YData向量是[1,M
]。可以設定XData和YData特性為其他的值,當工作在幾何變換時,這可能非常有用。imshow函式通過可選擇的引數值對的使用來支援這一功能。例如,用下面的語法來顯示影象,左邊和右邊畫素的中心在x軸的-20和20處,頂部和底部的畫素在y軸的-10和10處:

imshow(f,'XData',[-20,20],'YData',[-10,10])
axis on
xlabel x
ylabel y

這裡寫圖片描述
用以下命令放大影象左上角之後的結果:發現其中的畫素已經不再是正方形。

axis([8 8.5 0.8 1.1])

這裡寫圖片描述

關於輸出影象位置前面我們談論了一副用仿射變換旋轉過的影象。然而注意,那幅影象並沒有顯示輸出影象的位置。函式imtransform可以通過使用附加引數來提供這個資訊。呼叫語法是:

[g,xdata,ydata]=imtransform(f,tform)

當使用imshow顯示影象時,第2個和第3個引數可以像XData和YData引數那樣來使用。下面的例子說明了如何使用這些輸出參量在相同的座標系統中一起顯示輸入和輸出影象。

在這個例子中,我們使用旋轉和平移來研究如何在相同的座標系中與輸入影象一起顯示和定位輸出影象。我們以使用標以記號的軸和標記顯示原始影象開始。

imshow(f)
axis on

下面我們用imtransform使影象旋轉3*pi/4弧度

theta=3*pi/4;
T=[cos(theta) sin(theta) 0
   -sin(theta) cos(theta) 0
   0           0          1];
tform=maketform('affine',T);
[g,xdata,ydata]=imtransform(f,tform,'FillValue',255);

我們在前邊一行程式碼呼叫imtransform來說明兩個新的概念。第一個是可選擇的輸出參量xdata和ydata的使用,這些用於在xy座標系統中定位輸出影象。另一個概念是選擇輸入參量:’FillValue’,255。FillValue引數指定用於任何輸出影象畫素的值,對應輸入影象邊界外的輸入空間位置。
在預設的情況下,FillValue引數的值是0,即黑色。在這個例子中,我們希望它們是白色的。下邊,我們希望遵循matlab的常用模式:
(1)建立第一個繪圖或者影象顯示。
(2)呼叫hold on,以便後續的繪圖或顯示命令不清除該圖。
(3)建立第二個繪圖或者是繪圖顯示。
當顯示輸出影象時,從imtransform可選擇的輸出一起使用imshow的XData/YData語法:

imshow(f)
hold on
imshow(g,'XData',xdata,'YData',ydata)

接下來使用axis函式自動擴充套件軸的限制,以便兩幅影象同時可見:

axis auto

最後,開啟標有記號的軸和標記:

axis on

在結果中可以看到,仿射變換關於系統座標原點(0,0)旋轉影象。
這裡寫圖片描述
接下來,我們檢驗平移,這是比旋轉簡單的仿射變換。但是,在目測時有可能被搞混。我們以構成仿射變換tform結構開始,向右移動500,向下移動200:

T=[1 0 0;0 1 0;500 200 1];
tform=maketform('affine',T);

接下來,我們使用基本的imtransform語法顯示結果:

g=imtransform(f,tform);
imshow(g)
axis on

顯示的結果很像原始影象,原因是imtransform正好自動地在輸出空間上獲取足夠的畫素以顯示變換後的影象。這個自動行為消除了平移。為了看清平移效果,我們使用與上邊旋轉相同的技術:

[g,xdata,ydata]=imtransform(f,tform,'FillValue',255);
imshow(f);
hold on;
imshow(g,'XData',xdata,'YData',ydata)
axis on
axis auto

這裡寫圖片描述

關於輸出控制網格:
上面說明了如何用xdata和ydata引數形象化平移的效果,從輸出imtransform到輸入imshow。另一個說法是在輸出空間中用imtransform直接控制畫素網格。通常,imtransform在輸出空間中用下列步驟定位和計算輸出影象。
(1)決定輸入影象的邊界矩陣;
(2)在邊界矩陣上把點變換到輸出空間中;
(3)計算變換後輸出空間中點的邊界矩陣;
(4)計算位於輸出空間中、邊界矩形內的網格上的輸出影象畫素。
如下自定義函式說明了xdata和ydata引數的使用。這是imtransform的另一個變異,總使用像輸出空間矩陣那樣的輸入空間矩陣。這樣一來,輸入和輸出影象的位置便可以更直接進行比較:

function g=imtransform2(f,varargin)
% IMTRANSFORM2 2-D image transformation with fixed output location
% G=IMTRANSFORM2(F,TFORM,...)applies a 2-D geometric
% transformation to an image.IMTRANSFORM2 fixes the output image
% location to cover the same region as the input image.
% IMTRANSFORM2 takes the same set of optional parameter/value
% pairs as IMTRANSFORM.
[M,N]=size(f);
xdata=[1 N];
ydata=[1 M];
g=imtransform(f,varargin{:},'XData',xdata,'YData',ydata);

函式imtransform2是封裝函式的典型示例。封裝函式接受輸入,有可能改進它們或把它們相加,然後把它們傳遞給另一個函式。書寫封裝函式的一種簡單方法建立現有函式的變數,這個函式有不同的預設行為,可以容易地使用varargin是書寫封裝函式的特點。
在下面這個例子中,我們針對幾個幾何變換,比較imtransform和imtransform2的輸出:

f=imread('lena.png');
imshow(f)

這樣就顯示了原始影象,我們的第一個變換是平移:

tform1=maketform('affine',[1 0 0;0 1 0;300 500 1]);
g1=imtransform2(f,tform1,'FillValue',200);
h1=imtransform(f,tform1,'FillValue',200);
imshow(g1),figure,imshow(h1)

我們的第二個變換在兩個方向上用因子4收縮輸入影象:

tform2=maketform('affine',[0.25 0 0;0 0.25 0;0 0 1]);
g2=imtransform2(f,tform2,'FillValues',200);
h2=imtransform(f,tform2,'FillValues',200);
imshow(g2),figure,imshow(h2)

這裡寫圖片描述
此時,兩個輸出顯示了全部輸出影象。從imtransform2的輸出可以看到,雖然比變換後的影象大,但填充的畫素灰度很協調。來自函式imtransform的輸出剛好包含變換後的影象。

相關推薦

matlab影象座標系統

有時我們的圖顯示了沒有軸標記的影象。這是函式imshow的預設行為。但是幾何影象變換的分析和解釋是通過顯示這些形象的排列來輔助的。開啟標記的一種方法是在呼叫imshow之後呼叫axis。例如: f=imread('circuit-board.tif');

【計算機圖形學】計算機圖形學座標系統

一、簡介   馬三最近開始學習計算機圖形學了,買了兩本書,其中一本是國內的,還是什麼大學的教材,不過寫得真不咋樣啊。另外一本是大名鼎鼎的《計算機圖形學》第四版。最近接觸了下計算機圖形學中的座標系統,做個筆記。 二、計算機圖形學中的座標系統 1.建模座標系(MC)   建模座標系是一個區域性座標系,同時

計算matlab影象的PSNR和SSIM

網上找了很多關於PSNR和SSIM的計算,很多結果算出來都不一樣,公式都是普遍的,如下: 現在總結下造成結果差異的原因。 PSNR的差異: 1.灰度影象:灰度影象比較好計算,只有一個灰度值。 2.彩色影象: (a)可以將分別計算R,G,B三個通道總和,最後

CityEngine座標系統

在CityEngine中,一個形狀涉及到多個座標系統 所有的轉換操作都是依據當前形狀的Scope(最小外接長方體)座標系統進行的。此外,還存在世界座標系、物件座標系和Pivot 座標系 世界座標

ArcGIS教程:ArcGIS座標系統定義與投影轉換

        座標系統是GIS資料重要的數學基礎,用於表示地理要素、影象和觀測結果的參照系統,座標系統的定義能夠保證地理資料在軟體中正確的顯示其位置、方向和距離,缺少座標系統的GIS資料是不完善的,因此在ArcGIS軟體中正確的定義座標系統以及進行投影轉換的操作非常重要。

MATLAB影象處理的函式

MATLAB 影象處理命令  MATLAB中影象處理的一些簡單函式 A、 imread imread函式用於讀入各種影象檔案,其一般的用法為 [X,MAP]=imread(‘filename’,‘fmt’)其中,X,MAP分別為讀出的影象資料和顏色表資料,fmt為影象的格

matlab影象的讀取與儲存

轉自https://blog.csdn.net/cy_543/article/details/41145245影象的讀取和儲存影象處理,主要是對已有的影象進行處理,然後再儲存起來,並不是無中生有,創造出一幅影象。因此,影象的讀取和儲存顯得比較重要。    這裡建立test.m

使用AxisHelper幫助理解View and Data API座標系統

大家使用View and Data API做三維模型開發,必然首先要理解View and Data API的座標系統,即XYZ三個軸向分別是怎麼定義的。Three.js裡面提供了一個AxisHelper,但如果你直接運用的話,你會發現在viewer中並不顯示,並且控制檯中會有這樣的錯誤資訊:"Only THR

【轉】+【舉例】ArcGIS座標系統定義與投影轉換

UTM (Universal Transverse Mercator)座標系是由美國軍方在1947提出的。雖然我們仍然將其看作與“高斯-克呂格”相似的座標系統,但實際上UTM採用了網格的分帶(或分塊)。除在美國本土採用Clarke 1866橢球體以外,UTM在世界其他地方都採用WGS84。UTM是由美國製定

ArcGIS座標系統定義與投影轉換

轉:http://www.higis.cn/Tech/tech/tId/60/ ArcGIS中的座標系統定義與投影轉換 座標系統是GIS資料重要的數學基礎,用於表示地理要素、影象和觀測結果的參照系統,座標系統的定義能夠保證地理資料在軟體中正確的顯示其位置、方向和距離,缺少

MATLAB座標賦值 && 獲取figure影象資料

轉:http://www.ilovematlab.cn/thread-333975-1-1.html I(sub2ind(size(I), pos(:,1),pos(:,2))) = 1; 獲取figure中影象資料(https://blog.csdn.net/zhaoluruoyan89/

matlab如何得到影象座標

程式碼: function crossget ezplot('sin(x)'); set(gcf,'pointer','crosshair'); set(gcf,'WindowButtonMotionFcn',@tempfcn2); function t

unity3d使用不同方法獲得position對應的座標系統

inspector面板 通過inspector面板上獲得的transform屬性均屬於本地座標系。 注意:inspector面板上的rotation是尤拉角。 使用程式碼得到 使用transform.position系列方法得到的座標屬於世界座標系。 注意:transform

MATLABlog運算元處理影象

下面來介紹一下MATLAB中如何用log運算元處理影象: 1、開啟MATLAB軟體,在其主介面中寫入下列程式碼: I=imread('G:\MATLAB\bm.bmp');         %讀取當前路徑下的圖片

MATLAB影象值濾波

下面來介紹一下影象的中值濾波方法: 1、首先開啟MATLAB軟體,在其主介面的編輯器中寫入下列程式碼: I=imread('G:\MATLAB\bm.bmp');      %讀取儲存路徑下的圖片 I=rgb2gray(I); J=imnoise(I,'salt

matlab文字檔案與影象轉化

  一  將圖片轉化為txt文字檔案 a=imread('picture.bmp');   //讀取picture.bmp圖片 b=rgb2gray(a);        &

世界座標、相機座標影象座標、畫素座標的原理、關係,並用matlab模擬

世界座標、相機座標、影象座標、畫素座標的原理、關係,並用matlab模擬 照相機是日常生活中最常見的。它能把三維的空間圖片等比例縮小投影在照片上,稱為一個二維影象。 以下我們就講一講原理,並相應的進行matlab模擬。 在學之前,先要了解幾個概念: 什麼是世界座標?

影象卷積、相關以及在MATLAB的操作

原文:http://www.cnblogs.com/zjutzz/p/5661543.html 影象卷積、相關以及在MATLAB中的操作 區分卷積和相關 影象處理中常常需要用一個濾波器做空間濾波操作。空間濾波操作有時候也被叫做卷積濾波,或者乾脆叫卷積(離散的卷積,不是微

根據影象名字把一個大資料夾影象分類(matlabfor迴圈巢狀if語句)

clear; close all; clc; inpath = 'G:\code\xianzhu\Z_CODE\SalBenchmark-master\Data\DataSet1\Saliency\*.png'; %%需要分類的資料夾路徑 %%分類後圖像儲存路徑%% CA_p

matlab gradient函式計算影象梯度原理(轉載)

原文:http://blog.sina.com.cn/s/blog_53683dc20102v9f4.html Matlab中影象梯度的計算方式 轉載 2015-03-27 16:08:42 在matlab中可以使用gradient來計算一幅影象的梯度,它的計算方式是這樣的: