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)
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 編輯 ]
設一個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-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邊界的部份出問題嘛???
我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邊界的部份出問題嘛???
|
丫
丫勝· 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過你的程式 他出現上面幾行 我照你的方法用了 是哪裡出錯了嗎?
??? 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過你的程式 他出現上面幾行 我照你的方法用了 是哪裡出錯了嗎?
|
已載入全部回覆
