SayCoo~論壇

matlab function

I
Iamcougar樓主·2006-8-30 18:11
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]中間有空格

全部回覆 (7)

Z
zet0r· 2006-8-30 18:39
#2
好厲害... 晚點來研究看看
|
Z
zet0r· 2006-8-30 23:11
#3
功力不夠。。。
你可以幫我註解看看嗎?
|
I
Iamcougar· 2006-8-30 23:53
#4
原圖是128*128...

設一個256*256的矩陣...在將原圖放進去!!
(想像一個九宮格...分別放在四個角落)

利用內插法求中間那一格
x = [(x-1) + (x+1)] / 2
使用 for 迴圈求出一整排或一整列的數字...
兩個兩層的 for 迴圈~~
一個是算x軸的 一個是算y軸的...
只有算到第255格而已!!

正常的話 256 會等於 (255+257)/2 但是矩陣只有 256*256 而已!!
所以邊界部份要另外處理...
x+1 = 2 [ (x) - (x-1) ]


大概就是這樣吧...:P
利用 workspace 邊 run 邊看...更容易看得懂!!

[ 本帖最後由 Iamcougar 於 2006-8-30 11:55 PM 編輯 ]
|
Z
zet0r· 2006-8-31 01:21
#5
恩... 果然超出我功力.. 哈哈哈

慢慢研究.. @_@

這樣跑太快了
|
Z
zet0r· 2006-9-3 21:50
#6
哈囉...

我run過你的程式,
可是你的程式的副程式2跑不了耶...
他一直說

??? Input argument 'd' is undefined.

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邊界的部份出問題嘛???
|
I
Iamcougar· 2006-9-4 11:06
#7
單跑 function 是一定跑不出來的...

至於你說的問題~~

我有重新跑過之前貼的...是 ok 的!!

不知道你檔案名稱有沒有改變!!?? 我看你的路徑...你好像改成 fuction1 了!!

ex. Image1=edge2(c,d,Image1);

如果你存檔的名稱不是 edge2 的話...也是跑不出來的!! :victory:

[ 本帖最後由 Iamcougar 於 2006-9-4 11:07 AM 編輯 ]
|
丫勝· 2006-12-13 01:40
#8
[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)

請問 一下 我run過你的程式 他出現上面幾行 我照你的方法用了 是哪裡出錯了嗎?
|
已載入全部回覆
留言......
SayCoo

SayCoo 論壇 — 一個溫馨的網路社群。在這裡分享生活點滴、結交志同道合的朋友。

關於

SayCoo 創立於 2000 年,是台灣歷史悠久的綜合論壇社群之一。

© 2026 SayCoo. All rights reserved.