SayCoo論壇

查看: 8492|回復: 7
打印 上一主題 下一主題

matlab function

[複製鏈接]
跳轉到指定樓層
1
發表於 2006-8-30 18:11:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
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]中間有空格
2
發表於 2006-8-30 18:39:12 | 只看該作者
好厲害... 晚點來研究看看
回復 支持 反對

使用道具 舉報

3
發表於 2006-8-30 23:11:42 | 只看該作者
功力不夠。。。
你可以幫我註解看看嗎?
回復 支持 反對

使用道具 舉報

4
 樓主| 發表於 2006-8-30 23:53:34 | 只看該作者
原圖是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) ]


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

[ 本帖最後由 Iamcougar 於 2006-8-30 11:55 PM 編輯 ]
回復 支持 反對

使用道具 舉報

5
發表於 2006-8-31 01:21:32 | 只看該作者
恩... 果然超出我功力.. 哈哈哈

慢慢研究.. @_@

這樣跑太快了
回復 支持 反對

使用道具 舉報

6
發表於 2006-9-3 21:50:21 | 只看該作者
哈囉...

我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邊界的部份出問題嘛???
回復 支持 反對

使用道具 舉報

7
 樓主| 發表於 2006-9-4 11:06:26 | 只看該作者
單跑 function 是一定跑不出來的...

至於你說的問題~~

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

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

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

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

[ 本帖最後由 Iamcougar 於 2006-9-4 11:07 AM 編輯 ]
回復 支持 反對

使用道具 舉報

8
發表於 2006-12-13 01:40:26 | 只看該作者
[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論壇

GMT+8, 2024-4-30 14:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表