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以上 就把這個點標記成紅色.以後處理的時候判斷一下當前經過的紅色點的個數,偶數個肯定是圓框外的部分,奇數個就在圓框內的部分....