matlab影象平移,matlab 影象平移

時間 2021-10-14 20:16:12

1樓:阪本禮奈

%影象平移(1)

f=imread('p2.bmp');

se = translate(strel(1), [0 20]);

%引數[0 20]可以修改,修改後平移距離對應改變

j = imdilate(f,se);

figure;

imshow(j,);title('右移後圖形');

%影象平移(2)

function outimage=immove(inimage,tx,ty)

[m, n] = size(inimage);

tx=fix(tx);

ty=fix(ty);

%move x

if (tx<0)

inimage=imcrop(inimage,[abs(tx),1,m-abs(tx),n]);

[m, n] = size(inimage);

tx=0;

end%move y

if (ty<0)

inimage=imcrop(inimage,[1,abs(ty),m,n-abs(ty)]);

[m, n] = size(inimage);

ty=0;

endoutimage = zeros(m+ty, n+tx);

outimage(1+ty:m+ty,1+tx:n+tx) = inimage;

%影象旋轉

%x,y為其行列數

%角度任意的乙個數 表示30度

pai=3.14;

angle=pai*angle/180;

%轉換一下角度的表示方法。

[x,y]=size(image);

%原圖顯示

subplot(2,1,1);

imshow(image);

title('原影象');

%計算四個角點的新座標,確定旋轉後的顯示區域

lefttop(1,1)=-(y-1)*sin(angle);

lefttop(1,2)=(y-1)*cos(angle);

leftbottom(1,1)=0;

leftbottom(1,2)=0;

righttop(1,1)=(x-1)*cos(angle)-(y-1)*sin(angle);

righttop(1,2)=(x-1)*sin(angle)+(y-1)*cos(angle);

rightbottom(1,1)=(x-1)*cos(angle);

rightbottom(1,2)=(x-1)*sin(angle);

%計算顯示區域的行列數

xnew=max([lefttop(1,1),leftbottom(1,1),righttop(1,1),rightbottom(1,1)])-min([lefttop(1,1),leftbottom(1,1),righttop(1,1),rightbottom(1,1)]);

ynew=max([lefttop(1,2),leftbottom(1,2),righttop(1,2),rightbottom(1,2)])-min([lefttop(1,2),leftbottom(1,2),righttop(1,2),rightbottom(1,2)]);

% 分配新顯示區域矩陣

imagenew=zeros(round(xnew),round(ynew))+255;

%計算原影象各畫素的新座標

for indexx=0:(x-1)

for indexy=0:(y-1)

imagenew(round(indexx*cos(angle)-indexy*sin(angle))+round(abs(min([lefttop(1,1),leftbottom(1,1),righttop(1,1),rightbottom(1,1)])))+1,1+round(indexx*sin(angle)+indexy*cos(angle))+round(abs(min([lefttop(1,2),leftbottom(1,2),righttop(1,2),rightbottom(1,2)]))))=image(indexx+1,indexy+1);

endend%顯示subplot(2,1,2);

imshow((imagenew)/255)

promp=['旋轉角度為:' int2str(angle) '的影象']

title(promp);

%影象縮放

function y=resize(a,mul,type)

%a:輸入影象灰度值

%mul:縮放倍數

%type:1表示最鄰近法,2表示雙極性插值法

%畫出縮放後影象並返回其灰度值

[m,n]=size(a);

m1=m*mul;n1=n*mul;

if type==1

for i=1:m1

for j=1:n1;

b(i,j)=a(round(i/mul),round(j/mul));

endendelseif type==2

for i=1:m1-1

for j=1:n1-1;

u0=i/mul;v0=j/mul;

u=round(u0);v=round(v0);

s=u0-u;t=v0-v;

b(i,j)=(a(u+1,v)-a(u,v))*s+(a(u,v+1)-a(u,v))*t+(a(u+1,v+1)+a(u,v)-a(u,v+1)-a(u+1,v))*s*t+a(u,v);

endendendb=uint8(b);

imshow(b);

title('處理後影象');

y=b;

打字不易,如滿意,望採納。

2樓:匿名使用者

'basevalue' 可以設定基本線的水平,預設是 0,你的情況可以設定成 -9:

bar(1:9,-a, 'basevalue', -9)

3樓:

考慮二維影象由plot(x,y)繪製,x,y為同樣大小的陣列那麼這個影象平移可以由plot(x+a,y+b)生成,其中,a為x方向的平移量,b為y方向的平移量

4樓:我行我素

這是可以的,如:

a=[9 8 7 6 5 4 3 2 1];

subplot(1,2,1),bar(-a)subplot(1,2,2),bar(-a,'basevalue',-9)

matlab中如何實現波形的左右平移?

5樓:匿名使用者

t=0:0.0001:0.1;

y=sin(2*pi*30*t);

figure;

plot(t,y);

hold on;

plot(t-0.05,y,'r');

legend('平移前','平移後');

%subs是用於符號函式平移的,例如

syms t;

y=sin(2*pi*30*t);

y1=subs(y,t,t+0.05);

figure;

subplot(211);

ezplot(y,[0,0.1]);

grid;

subplot(212);

ezplot(y1,[0,0.1]);

grid;

matlab關於影象平移的一小段**,求大神每句幫忙解釋下,謝謝啦!

6樓:我行我素

f=imread('hehua1.bmp');%讀**[m,n,x]=size(f);%求圖的維數f=double(f);%轉化為雙精度資料for i=1:20 %平移10次

mx=10*i;%x軸平移量,畫素數

my=10*i;%y軸平移量,畫素數

g=zeros(m,n,x)+255;%背境設為白色g(mx+1:m,my+1:n,1:

x)=f(1:m-mx,1:n-my ,1:

x);%平移,取原圖左上角賦給新圖,原圖座標減少,畫素減少,看起來新圖向右下平移

%g(1:m-mx,1:n-my ,1:x)=f(mx+1:m,my+1:n,1:x);%平移,取原圖右下角賦給新圖,原圖座標增加,畫素增加,看起來新圖向左上平移

figure;%生成乙個圖窗

%imshow(g);%顯示雙精資料圖形

imshow(uint8(g));%雙精轉為uint8,再顯示圖形end

利用matlab通過矩陣變化實現影象的平移縮放和旋轉,要乙個程式兩者同時進行

7樓:匿名使用者

根據矩陣計算:

平移旋轉以後,還需要插值,才能顯示完整的影象

clear all; close all; clc;

img=imread('lena.bmp');

[h w]=size(img);

%平移旋轉引數

a = 10; b = 20;

theta = 30 /180*pi;

% 旋轉矩陣

rot=[cos(theta) -sin(theta) 0;

sin(theta) cos(theta)  0;

0          0           1];

% 平移矩陣

move = [ 1 0 a;

0 1 b;

0 0 1];

%平移加旋轉

rot = rot * move;

pix1=[a b 1]*rot; % 左上點的座標

pix2=[a w+b 1]*rot;      % 右上點的座標

pix3=[h+a b 1]*rot; % 左下點的座標

pix4=[h+a w+b 1]*rot; % 右下點的座標

height = round(max([abs(pix1(1)-pix4(1)) abs(pix2(1)-pix3(1))]));     %變換後影象的高度

width = round( max([abs(pix1(2)-pix4(2)) abs(pix2(2)-pix3(2))]));      %變換後影象的寬度

imgn=zeros(height,width);

delta_y = abs(min([pix1(1) pix2(1) pix3(1) pix4(1)]));

delta_x = abs(min([pix1(2) pix2(2) pix3(2) pix4(2)]));

for i=1-delta_y:height

for j=1-delta_x:width

pix=[i j 1]/rot; %用變換後影象的點的座標去尋找原影象點的座標,

float_y=pix(1)-floor(pix(1));

float_x=pix(2)-floor(pix(2));

if pix(1)>=1 && pix(2)>=1 && pix(1) <= h && pix(2) <= w

pix_up_left=[floor(pix(1)) floor(pix(2))];     %四個相鄰的點

pix_up_right=[floor(pix(1)) ceil(pix(2))];

pix_down_left=[ceil(pix(1)) floor(pix(2))];

pix_down_right=[ceil(pix(1)) ceil(pix(2))];

value_up_left=(1-float_x)*(1-float_y);

value_up_right=float_x*(1-float_y);

value_down_left=(1-float_x)*float_y;

value_down_right=float_x*float_y;

imgn(i+delta_y,j+delta_x) = value_up_left*img(pix_up_left(1),pix_up_left(2))+...

value_up_right*img(pix_up_right(1),pix_up_right(2))+...

value_down_left*img(pix_down_left(1),pix_down_left(2))+...

value_down_right*img(pix_down_right(1),pix_down_right(2));

endendendimshow(uint8(imgn));title('平移旋轉並插值');

為什麼這個matlab沒有影象,MATLAB中怎麼沒有顯示影象啊?

你這個x.y1.y2.y3都是乙個值,畫出圖來就是乙個點。clear clcc1 2 c2 3 sig1 2 sig2 4 x 10 c1 y1 exp x c1 2 2 sig1 2 subplot 311 plot x,y1 axis 10,50,0,1 title gaussian mf wh...

用matlab擷取影象的一部分,matlab二值影象擷取

yty隨意 1 首先開啟matlab,在命令列視窗中輸入a 1 5 6 7 8 12 14 16 6 3 5 7 建立一個3行4列的a矩陣,如下圖所示。2 輸入x find a 10 找到a陣列中大於10的元素的下標,如下圖所示。3 按回車鍵之後,可以看到找到大於10的元素下標,下標位置是按一列開始...

MATLAB區域性影象處理,matlab影象區域性處理

很簡單的,因為你的圖中的圓不是標準的規範的圓,用圓的方程之類的方法話邊框反而不好,直接遍歷影象中所有畫素,如果相鄰畫素的畫素值相差超過了一定的閾值 自己試一下,我感覺至少有50以上 就把這個點標記成紅色.以後處理的時候判斷一下當前經過的紅色點的個數,偶數個肯定是圓框外的部分,奇數個就在圓框內的部分....