發表文章

目前顯示的是 2019的文章

[Matlab / Octave] 數據化圖片資料

圖片
假設你手邊只有資料的圖片檔, 要如何單從圖檔取出圖檔內的數據呢? 這邊使用上方的圖,來做說明。現在有一張LED 的電流對流明的關係圖, 假設想從裡面取出250安培的電流會對應多少流明的資料, 要怎麼做? 接下來使用的方法, 只限制在當x和y軸都是線性坐標的情況才能使用, 若是對數或指數座標就不適用了。 主要的指令會是 [x,y] = ginput(n) ginput會回傳n次你在圖形物件上用滑鼠點的n個座標x跟座 標y,想在點選n次前就結束的話,可以按return鍵結束。 display('press max x and min y'); [pixel_maxx, pixel_miny]=ginput(1); max_x=input('max_x='); min_y=input('min_y='); display('press min x and max y'); [pixel_minx, pixel_maxy]=ginput(1); min_x=input('min_x='); max_y=input('max_y=‘); 剛開始必須先定義圖形物件的座標範圍。 第一步,先點選圖片中x最大y最小的座標點(下圖紅圈圈處): 然後輸入x軸最大值:3000,和y軸最小值:0。 第二步則是要點選圖片中x最小y最大的座標點(下圖紅圈圈處): 然後輸入x軸最小值:0,和y軸最大值:800。 輸入完,接下來會由下方程式碼計算, 剛剛在圖片裡點到的pixe l位置轉換成圖片座標的比例。 pixel_originx=pixel_minx; pixel_originy=pixel_miny; x_ratio=(max_x-min_x)/(pixel_ maxx-pixel_minx); y_ratio=(max_y-min_y)/(pixel_ maxy-pixel_miny); 接著要開始點選圖片上的資料了(這邊以5個資料點舉例), 可以選擇自己需要多少點來完成資料的截取,輸入完多少資料

Matlab 監測程式執行的狀態條(progress Bar)

圖片
處理大量資料時,當程式需要一定的時間去讀取資料跟計算資料時,有一個狀態bar能夠顯示目前的程式進展的進度,其實還蠻方便的。 這邊會使用到的function是"waitbar" f = waitbar(x,msg) waitbar這個指令會回傳一個圖形物件並傳給參數"f";"x"是小於1的整數,會用來顯示bar的進度百分比;"msg" 則是要顯示在圖形物件上的資訊,其格式可以是字串或character。 waitbar( x, f ,msg ) 這個指令多了一個輸入參數"f",表示要更新的圖形物件是哪個,其他"x"跟"msg"的功能就跟上面講的一樣! 下面的範例,假設程式總共分成四個部分: 讀檔 計算資料 畫圖 存檔 function MyWaitbar FileNumber=10; f = waitbar(0,'Load data!'); for i=1:FileNumber     waitbar( 0+(i/FileNumber)*0.25, f, [ 'Load files ' num2str(i) '/'  num2str(FileNumber) ]);     pause(.5); end waitbar(.5,f,'Calculating data'); pause(1) waitbar(.75,f,'Plotting'); pause(1) waitbar(1,f,'Saving files'); pause(1) close(f) end 下面就是程是跑出來的圖囉!