در این مطلب مطالبی کاربردی راجب موضوع پردازش سیگنال و پردازش تصویر در نرم افزار متلب را به شما آموزش می دهیم. اگر سوالی در این زمینه دارید در بخش نظرات مطرح نمایید.
- محاسبه چرخشی سری x و y با استفاده از سری فوریه
% use the Fourier convolution thm
توی این پک فوق العاده، صفر تا صد متلب رو جوری یاد میگیری که تو هیچ کلاس آموزشی یا پک دیگه ای نه دیدی نه شنیدی! بدون هیچ کلاسی، سخت ترین پروژه هات رو در چند دقیقه با متلب انجام بده یا اصلا باهاش پول در بیار!
z = real( ifft( fft(x).*fft(y) ) );
- نمایش نتیجه fft با فرکانس صفر
x = peaks(256);
imagesc( real( fftshift( fft2(x) ) ) );
- تغییر سایز یک تصویر
[p,q] = size(M); % the original image
[X,Y] = meshgrid( (0:p-1)/(p-1), (0:q-1)/(q-1) );
% new sampling location
[XI,YI] = meshgrid( (0:p1-1)/(p1-1) , (0:q1-1)/(q1-1) );
M1 = interp2( X,Y, M, XI,YI ,’cubic’); % the new image
حتما بخوانید: آموزش گام به گام Array در متلب به زبان کاملا ساده
x = -1/2:1/(n-1):1/2;
f = exp( -(x.ˆ۲)/(۲*sˆ۲) );
f = f / sum(sum(f));
- ساخت واریانس دو بعدی
x = -1/2:1/(n-1):1/2;
[Y,X] = meshgrid(x,x);
f = exp( -(X.ˆ۲+Y.ˆ۲)/(۲*sˆ۲) );
f = f / sum(f(:));
- انجام یک سری تک بعدی برای سیگنال f و با فیلتر سیگنال h
n = length(x); p = length(h);
if mod(p,2)==1
d1 = (p-1)/2; d2 = (p-1)/2;
else
d1 = p/2-1; d2 = p/2;
end
xx = [ x(d1:-1:1); x; x(end:-1:end-d2+1) ];
y = conv(xx,h);
y = y( (2*d1+1):(2*d1+n) );
حتما بخوانید: آموزش انواع داده ها در متلب به زبان کاملا ساده
- مشابه عملیات قبلی برای دو بعدی
n = length(x); p = length(h);
if mod(p,2)==1
d1 = (p-1)/2; d2 = (p-1)/2;
else
d1 = p/2-1; d2 = p/2;
end
xx = [ x(d1:-1:1,:); x; x(end:-1:end-d2+1,:) ];
xx = [ xx(:,d1:-1:1), xx, xx(:,end:-1:end-d2+1) ];
y = conv2(xx,h);
y = y( (2*d1+1):(2*d1+n), (2*d1+1):(2*d1+n) );
- استخراج تصویر منحنی های سطح صفر
c = contourc(M,[0,0]);
k = 0; p = 1;
while p < size(c, 2) % parse the result
lc = c(2,p); % length of the curve
cc = c(:,(p+1):(p+lc));
p = p+lc+1;
k = k+1;
c listk = cc;
end
- محاسبه سریع انتگرال منحنی دو بعدی
curve is assumed in [0, 1]2)
cs = c*(n-1) + 1; % scale to [1,n]
I = round(cs);
J = sub2ind(size(M), I(1,:),I(2,:) );
y = sum(M(J));
- ترسیم یک دیسک و یک مربع
n = 100; x = -1:2/(n-1):1;
[Y,X] = meshgrid(x,x);
c = [0,0]; r = 0.4; % center and radius of the disk
D = (X-c(1)).ˆ۲ + (Y-c(2)).ˆ۲ < rˆ۲;
imagesc(D); % a disk
C = max(abs(X-c(1)),abs(Y-c(2)))<r;
imagesc(C); % a square
- ترسیم یک تابع دو بعدی
(x,y).
n = 400;
x = rand(n,1); y = rand(n,1);
% this is an example of surface
z = cos(pi*x) .* cos(pi*y);
tri = delaunay(x,y); % build a Delaunay triangulation
trisurf(tri,x,y,z);
- تولید یک سیگنال بر اساس Sobolev
alpha = 2; n = 100;
y = randn(n,1); % gaussian noise
fy = fft(y);
fy = fftshift(fy);
% filter the noise with |omega|ˆ-alpha
h = (-n/2+1):(n/2);
h = (abs(h)+1).ˆ(-alpha-0.5);
fy = fy.*h’;
fy = fftshift(fy);
y = real( ifft(fy) );
y = (y-min(y))/(max(y)-min(y));
حتما بخوانید: کجا و به چه دلیل باید از نرم افزار متلب استفاده کنیم یا نکنیم؟
- تولید یک سیگنال بر اساس ۱/۲٫
alpha = 3; n = 300;
x = rand(n,1); % uniform noise
for i=1:alpha % integrate the noise alpha times
x = cumsum(x – mean(x));
end
- محاسبه PSNR بین دو سیگنال x , y
d = mean( mean( (x-y).ˆ۲ ) );
m = max( max(x(:)),max(y(:)) );
PSNR = 10*log10( m/d );
- محاسبه اسپیلاین مکعب با مقدار t
x = abs(t) ;
I12 = (x>1)&(x<=2); I01 = (x<=1);
y = I01.*( 2/3-x.ˆ۲٫*(۱-x/2) ) + I12.*( 1/6*(2-x).ˆ۳ );
- بررسی طیفی سیگنال x
n = length(x); n0 = (n-1)/2;
f = fft(x); % forward transform
f = p/n*[f(1:n0+1); zeros(p-n,1); f(n0+2:n)];
x = real( ifft(f) ); % backward transform
- محاسب خطای محاسبات تقریبی fm
% as an example we take the decomposition in the cosine basis
M = 500;
x = peaks(128); y = dct(x); % a sample function
[tmp,I] = sort(abs(y(:)));
y(I(1:end-M)) = 0;
err = norm(y,’fro’)/norm(x,’fro’); % the relative error xx = idct(y); imagesc(xx); % the reconstructed function
- تبدیل نوع فرمت تصاویر
bs = 8; % size of the blocks
n = size(x,1); y = zeros(n,n);
nb = n/bs; % n must be a multiple of bs
for i=1:nb for j=1:nb
xsel = ((i-1)*bs+1):(i*bs); ysel = ((j-1)*bs+1):(j*bs);
y(xsel,ysel) = dct(x(xsel,ysel));
end end
- انجام عملیات روی بخشی از تصویر بصورت تعاملی
[n,p] = size(M);
imagesc(M);
axis image; axis off;
sp = getrect;
sp(1) = max(floor(sp(1)),1); % xmin sp(2) = max(floor(sp(2)),1); % ymin
sp(3) = min(ceil(sp(1)+sp(3)),p); % xmax sp(4) = min(ceil(sp(2)+sp(4)),n); % ymax
MM = M(sp(2):sp(4), sp(1):sp(3));
نظریه گراف
- محاسبه کوتاه ترین مسیر بین هر جفت گره
adjacency matrix).
% non connected vectices must have Inf value
N = length(D);
for k=1:N
D = min(D,repmat(D(:,k),[1 N])+repmat(D(k,:),[N 1]));
end
D1 = D;
- تبدیل مثلث به ماتریس
nvert = max(max(face));
nface = length(face);
A = zeros(nvert);
for i=1:nface
A(face(i,1),face(i,2)) = 1; A(face(i,2),face(i,3)) = 1;
A(face(i,3),face(i,1)) = 1;
% make sure that all edges are symmetric
A(face(i,2),face(i,1)) = 1; A(face(i,3),face(i,2)) = 1;
A(face(i,1),face(i,3)) = 1;
end