質問: 画像を二値化し、画像内の曲線のプロットデータを読み込むことは可能でしょうか。 画像を二値化し、画像内の曲線(黒い線)をプロットとして抽出する方法を模索しています。 何か良い方法はありますでしょうか? (先行研究と同じ作業を行いたいのですが、方法が分からず、困っております。 先行研究:https://www.semanticscholar.org/paper/influence-of-interface-roughness-on-the-fatigue-of-eriksson-sj%c3%b6str%c3%b6m/7503cd1099b7e3dc872d792867dc4c79c82dcfee)
回答: こんにちは、論文のほうも教えていただきありがとうございます。 今回の図の場合だと、1)白い部分、2)灰色の部分、3)黒い部分(線になっている今回の関心領域)になっていて、 単に大津法で2値化をするとなると、1と2&3というグループに分かれるので、1と2&3を分けて、さらに2と3で分けるというような2段階の解析が望ましい気がします。 例えば上が単に大津の2値化をしたもので、下が今回作った例です。ただ、先行研究とやり方が異なると、今回の質問の趣旨にはそぐわず、あまり役立たないかもしれません。何か役に立てば幸いです。 clear;clc i=imread('image.jpeg'); figure;imshow(i) gray=rgb2gray(i); % 近傍ピクセルの強度をもとに2値化 bw1=imbinarize(gray,'adaptive','foregroundpolarity',"dark"); figure;imagesc(bw1) idx=find(bw1==0); fore=gray(idx); % 大津の2値のためにヒストグラム計算 [counts,x] = imhist(fore,16); % 各頻度の表示 stem(x,counts) % 大津の2値化の閾値決定 t = otsuthresh(counts); % 大津の2値化の実行 bw2 = ~imbinarize(gray,t); % 面積によるノイズ除去 bw_final = bwpropfilt(bw2, 'area', [30, inf]); % 表示 figure;imshowpair(i,uint8(bw_final*255))