標題: matlab function [打印本頁] 作者: Iamcougar 時間: 2006-8-30 18:11 標題: matlab function clc; clear all;
Image0 = imread('Lena.BMP');
x=size(Image0,1);
y=size(Image0,2);
c=x*2;
d=y*2;
Image1=uint8(zeros(c,d));
a=1;
b=1;
for x=1:128
for y=1:128
Image1(a,b) = Image0(x,y);
b=b+2;
end;
b=1;
a=a+2;
end;
Image1=big(c,d,Image1); %...內插 (function1)
Image1=edge(c,d,Image1); %...邊界 (function2)
figure(1)
Image0 = uint8(Image0);
imshow(Image0);
figure(2)
Image1 = uint8(Image1);
imshow(Image1);
----------------------------------------------------------------------以上為主程式
function Image1=big(c,d,Image1)
%...內插法
% 對m內插...
for n=1:1:d-1 %一次跳一位 到255...
for m=1:2:c-2 %一次跳兩位 到254...
Image1(m+1,n) = 1/2*(double(Image1(m,n))) + 1/2*(double(Image1(m+2,n)));
end
end
% 對n內插...
for m=1:1:c-1 %一次跳一位 到255...
for n=1:2:d-2 %一次跳兩位 到254...
Image1(m,n+1) = 1/2*(double(Image1(m,n))) + 1/2*(double(Image1(m,n+2)));
end
end
----------------------------------------------------------------------以上為function1(另存一個.m檔但是要放在同一資料夾)
function Image1=edge(c,d,Image1)
%...求邊界值
%...n的邊界
for n=1:1:d-1 %一次跳一位 到255...
for m=c %=256
Image1(n,m) = 2*(double(Image1(n,m-1))) - double(Image1(n,m-2)); % 將uint8轉成double...使值可超出255
if Image1(n,m) > 255
Image1(n,m)=255;
end
if Image1(n,m) < 0
Image1(n,m)=0;
end
end
end
%...M的邊界
for m=1:1:c %一次跳一位 到256...
for n=d %=256
Image1(n,m) = 2*(double(Image1(n-1,m))) - double(Image1(n-2,m)); % 將uint8轉成double...使值可超出255
if Image1(n,m) > 255
Image1(n,m)=255;
end
if Image1(n,m) < 0
Image1(n,m)=0;
end
end
end
----------------------------------------------------------------------以上為function2(一樣另存一個.m檔但是要放在同一資料夾)
Image1=big(c,d,Image1)
p.s.Image1為要輸出的東西~~big是function名稱~~括弧裡面是主程式的變數而且這邊也用得到
若要輸出一個以上的變數時...則為[a b c]中間有空格作者: zet0r 時間: 2006-8-30 18:39
好厲害... 晚點來研究看看作者: zet0r 時間: 2006-8-30 23:11
功力不夠。。。
你可以幫我註解看看嗎?作者: Iamcougar 時間: 2006-8-30 23:53
原圖是128*128...
設一個256*256的矩陣...在將原圖放進去!!
(想像一個九宮格...分別放在四個角落)
利用內插法求中間那一格
x = [(x-1) + (x+1)] / 2
使用 for 迴圈求出一整排或一整列的數字...
兩個兩層的 for 迴圈~~
一個是算x軸的 一個是算y軸的...
只有算到第255格而已!!
Error in ==> C:\MATLAB6p5\work\work\function1\edge.m
On line 5 ==> for n=1:1:d-1 %一次跳一位 到255...
這是我單單只跑副程式出來的問題
因為你在主程式有給她宣告過,
d=y*2
不過你主程式也run不了.
Error in ==> C:\MATLAB6p5\work\work\function1\function1.m
On line 19 ==> Image1=edge(c,d,Image1); %...邊界 (function2)
他顯示這個.
所以我想應該是你c,d邊界的部份出問題嘛???作者: Iamcougar 時間: 2006-9-4 11:06
單跑 function 是一定跑不出來的...
至於你說的問題~~
我有重新跑過之前貼的...是 ok 的!!
不知道你檔案名稱有沒有改變!!?? 我看你的路徑...你好像改成 fuction1 了!!
ex. Image1=edge2(c,d,Image1);
如果你存檔的名稱不是 edge2 的話...也是跑不出來的!! :victory:
[ 本帖最後由 Iamcougar 於 2006-9-4 11:07 AM 編輯 ]作者: 丫勝 時間: 2006-12-13 01:40
[quote]原帖由 Iamcougar 於 2006-9-4 11:06 AM 發表
??? Index exceeds matrix dimensions.
Error in ==> C:\My Documents\MATLAB\123\edge.m
On line 7 ==> Image1(n,m) = 2*(double(Image1(n,m-1))) - double(Image1(n,m-2)); % 將uint8轉成double...使值可超出255
Error in ==> C:\My Documents\MATLAB\123\Untitled.m
On line 28 ==> Image1=edge(c,d,Image1); %...邊界 (function2)