画像の幾何学的変換 (MATLAB)

1 はじめに:

画像の幾何学的変換は、ある画像の座標を別の画像の新しい座標位置にマッピングすることです。画像のピクセル値は変更せず、ピクセルの幾何学的位置のみを変更します。そのため、元の画像は次のようになります。位置、形状、サイズの変換を生成します。

2. 画像翻訳:

画像上のすべての点は、指定されたオフセットに従って水平方向の X 軸に沿って、垂直方向の Y 軸に沿って移動され、変換後のサイズは同じになります。

imtranslate 関数は画像を翻訳します

>> I = imread('E:\persional\matlab\images\Fig0809(a).bmp');
se = imtranslate(I, [50 140]);%将一个平面结构化元素分别向下和向右移动
subplot(121);imshow(I), title('原图')
subplot(122), imshow(se), title('移动后的图像');

imdilate dilation 関数は画像を変換します

I = imread('E:\persional\matlab\images\Fig0809(a).bmp');
se = translate(strel(1), [50 140]);%将一个平面结构化元素分别向下和向右移动
J = imdilate(I,se);%利用膨胀函数平移图像
subplot(121);imshow(I), title('原图')
subplot(122), imshow(J), title('移动后的图像');

ここに画像の説明を挿入

画像フィルター:

画像ミラーリングは垂直ミラーリングと水平ミラーリングの 2 種類に分けられます
水平ミラーリング: (x0, y0) ------ x1 = M - x0 y1 = y0;
垂直および水平: (x0, y0) ----- - x1 = x0 y1 = M - y0;

Z = フリップディム():

close all;clear all;clc; 
I=imread('E:\persional\matlab\images\Fig0809(a).bmp'); 
J1=flipdim(I,1);
J2=flipdim(I,2);
J3=flipdim(I,3);
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
//set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置
figure,
subplot(1,2,1),imshow(I) ;
subplot(1,2,2),imshow(J1);
figure,
subplot(1,2,1),imshow(J2);
subplot(1,2,2),imshow(J3);

ここに画像の説明を挿入
ここに画像の説明を挿入

画像のスケーリング

画像のスケーリングとは、指定された画像を X 軸方向に fx、Y 軸方向に fy で拡大縮小することを意味し、元の画像のピクセル間の相対位置が変化し、幾何学的な歪みが生じます。
1.B = imresize(A,m): m>1、ズームイン; 0<m<1、ズームアウト;
2.B = imresize(A,[mrows,ncols]): [mrows,ncols] はスケーリングされた値を示します行と列の場合、ビットが NaN の場合、関数は入力イメージ A のアスペクト比に従って ncol または mrow の数を生成します; 3.
[B,newmap] = (A,map,m): m はスケーリングされます。比例; [mrows, ncols] にすることもできます;
4.[…] = imresize(…,method): メソッド オプション:
内挿法の種類: 'nearest' 最近傍内挿; 'bilinear' 双線形内挿、'bicubic' バイキュービック補間
カーネル関数: 'box' ボックス カーネル関数、'triangle' トライアングル カーネル関数 ('bicubic' 同一)、'Cubic' キューブ カーネル関数 ('bicubic 同一')、'lanczos2' Lanczos-2 カーネル関数および 'lanczos3' Lanczos - 3 つのカーネル関数。
5.[…] = imreadsize(…,method): 次の図に示すように、パラメーターの値を設定することで、画像のスケーリング特性を制御します。
ここに画像の説明を挿入

close all;clear all;clc;
[X,map] = imread('E:\persional\matlab\images\Fig0809(a).bmp');
J1 = imresize(X,0.25);
J2 = imresize(X,3.5);
J3 = imresize(X,[64,40]);%放缩后的图像行列比例
J4 = imresize(X,[64,NaN]);
J5 = imresize(X,1.6,'bilinear');%设置插值法
J6 = imresize(X,1.6,'triangle');
figure,
subplot(221),imshow(I);
subplot(222),imshow(J1);
subplot(223),imshow(I1)
subplot(224),imshow(J2)

ここに画像の説明を挿入

画像の転置:

画像の転置は、行と列の座標の交換です。例: 点 (x0, y0) の変換後の新しい座標点 (x1, y1) 数式: x1 = x0; y1 = y0; 画像転置後、サイズが変わります 変更:

function J = transp(I)
[M,N,G] = size(I);
I = im2double(I);
J = ones(N,M,G);
for i = 1:M
    for j = 1:N
        J(j,i,:) = I(i,j,:);
    end
end
%调用函数
close all;clear all;clc;
I=imread('E:\persional\matlab\images\Fig0809(a).bmp'); 					
J1=transp(I);										
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置
figure,
subplot(221),imshow(I);
subplot(222),imshow(J1);

ここに画像の説明を挿入

画像の回転:

画像の回転変換は画像の位置変換に属し、通常は画像の中心を原点として、画像上のすべてのピクセルを同じ角度で回転します。回転後は、通常、画像のサイズが変わります。

B = imrotate(A,angle,method,bbox) — 角度: 角度; メソッド: 'nearest' 最近傍補間; 'bilinear' 双線形補間、'bicubic' 双三次補間; bbox: イメージ サイズを返す ('crop ','loose ')

>> I=imread('E:\persional\matlab\images\Fig0809(a).bmp');
>> J1 = imrotate(I,30);
>> J2 = imrotate(I,-30);
>> J3 = imrotate(I,30,'bicubic','crop');
>> J4 = imrotate(I,-30,'bicubic','loose');
>> figure,
>> subplot(221),imshow(J1);
>> subplot(222),imshow(J2);
>> subplot(223),imshow(J3);
>> subplot(224),imshow(J4);

ここに画像の説明を挿入

画像のトリミング:

対象となる画像部分をトリミングします。X1
= imcrop(I,[xmin,ymin,width,height])
[X1,map] = (…)
X1 = imcrop(I,map)
[X1,Y1,[ xmin,ymin,幅,高さ]] = imcrop(...)

>>[A,map]=imread('E:\persional\matlab\images\Fig0809(a).bmp');
>> rect = [75 68 130 112];
>> X1 = imcrop(A,rect);
>> figure,
>> subplot,imshow(121),imshow(X1);

>>[A,rect] = imcrop(A);%选择性剪切
>>subplot,imshow(121),imshow(A);

ここに画像の説明を挿入

画像の変換:

さまざまなタイプの空間変換 (移動、拡大縮小、回転、せん断) および投影変換をカスタマイズできます。

B = imtransform(A,TFORM,INTERP)

TFORM: maketform() によって返されます;
INTERP: 'nearest' 最近傍補間; 'bilinear' 双線形補間、'bicubic' 双三次補間。

元の画像 f(x,y) と変換後の画像 g(x',y')
(x',y') = T(x,y)
x' = a0x+a1x+a2;
y' = b0y+ とします。 b1y +b2;
構造設計用に 3x3 行列として記述します。

ここに画像の説明を挿入

>> [A,map]=imread('E:\persional\matlab\images\Fig0809(a).bmp');
>> Ta = maketform('affine',[cosd(30),-sind(30),0;sind(30),cosd(30) 0;0 0 1])%旋转结构体
>> Ia = imtransform(I,Ta);
>> Tb = maketform('affine',[5 0 0;0 10.5 0;0 0 1]);%平移结构体
>> Ib = imtransform(I,Tb);
>> xform = [0.5 0 0;0 0.5 0;0 0 1];
>> Tc = maketform('affine',xform);%缩放结构体
>>> Ic = imtransform(I,Tc,'XData',[1 (size(I,2)+xform(3,1))],'YData',[1 size(I,1)+xform(3,2)],'FillValues',255);
>> Td = maketform('affine',[1 4 0;2 1 0;0 0 1]);%剪切结构体
>> Id = imtransform(I,Td,'FillValues',255);
>>> figure,
>> subplot(221),imshow(Ia),axis on;
>> subplot(222),imshow(Ib),axis on;
>> subplot(223),imshow(Ic),axis on;
>> subplot(224),imshow(Id),axis on;

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_56260304/article/details/127196785