How to transfer graph data into MATLAB using image processing?

6 ビュー (過去 30 日間)
Sam
Sam 2019 年 2 月 25 日
回答済み: Image Analyst 2019 年 2 月 26 日

回答 (2 件)

Asad Mirza
Asad Mirza 2019 年 2 月 25 日
What you need is is either GRABIT or WebPlotDigitizer.
  5 件のコメント
Sam
Sam 2019 年 2 月 26 日
Hi, can suggest a solution to filter the vertical and horizontal line?
Asad Mirza
Asad Mirza 2019 年 2 月 26 日
編集済み: Asad Mirza 2019 年 2 月 26 日
Easiest way is find the gradient of the image and then set a threshold value to what counts as a verticle line. But it's a quick and dirty way and prone to errors.
im=imread('image.jpeg');
im=rgb2gray(im);
[gx gy]=imgradientxy(im);
Verts=gx>800; %% gx for verticle lines or gy for horizontal lines
imshow(Verts);

サインインしてコメントする。


Image Analyst
Image Analyst 2019 年 2 月 26 日
If it were me, and it was just this one picture (not hundreds of pictures), I'd
  1. bring it into Photoshop
  2. Crop the image to the bounding box
  3. Resize the image to 2100 pixels high.
  4. Enlarge the canvass to 2400 pixels by extending out the bottom
  5. Paint white over all the non-signal parts using the paintbrush tool(this is the only time-consuming part)
  6. Save it out as a PNG image
  7. Bring the image into MATLAB and scan the image column by column looking for the last black pixel
I'm attaching a rough estimate of what I get through Step 6. Of course this is a very very low resolution image so it's very difficult to determine what is signal and what is grid or numbers. It's essentially a judgment call so that's why I chose to do pre-processing manually in Photoshop.
For Step 7:
for col = 1 : columns
rowOfSignal(col) = find(grayImage(:, col) < 128, 1, 'last');
end
% Convert to range 300 - 2400
signalValue = 2400 - rowOfSignal;

カテゴリ

Help Center および File ExchangeGeometric Transformation and Image Registration についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by