楕円形のオブジェクトを円で描くまで伸ばす必要があります。私のプログラムは、現在、楕円形のオブジェクト(例えば、角度を付けてコイン)を画像に入力し、閾値を設定して二値化し、エッジ検出/境界線を使って関心領域を分離し()、regionprops() 。画像内の楕円を伸ばして円を描く
本来、「MajorAxisLength」を直径として使用し、短軸上のオブジェクトを伸ばして円を形成したいとします。どのように私がこれにアプローチすべきかについての提案は非常に高く評価されるだろう。私はあなたの見解のためにいくつかのコードを追加しました(残念ながら、画像をアップロードするのに十分な評判はなく、黒い背景に白い楕円のように見えます)。
EDIT:私もストレッチがどのように見えるかを調べるために、画像のグレースケールバージョンにこの手法を適用したいと思います。
コードスニペット:
rgbImage = imread(fullFileName);
redChannel = rgbImage(:, :, 1);
binaryImage = redChannel < 90;
labeledImage = bwlabel(binaryImage);
area_measurements = regionprops(labeledImage,'Area');
allAreas = [area_measurements.Area];
biggestBlobIndex = find(allAreas == max(allAreas));
keeperBlobsImage = ismember(labeledImage, biggestBlobIndex);
measurements = regionprops(keeperBlobsImage,'Area','MajorAxisLength','MinorAxisLength')
EMS、もう一度お返事ありがとうございます。ちょっと微調整して、2値化された画像でうまくいきました。しかし、イメージのグレースケールバージョンを伸ばすためにコードを修正できる方法があるかどうかは疑問でした。ストレッチが元のイメージにどのような影響を与えているのかを調べ、白いピクセルで塗りつぶすことでそれが妨げられることがあります。 – mg6011
私は参照してください。だからあなたは与えられた既知の楕円を取ってそれを長軸に等しい直径の円に写像するアフィン変換を探しています。私は私の頭の上から見える変換行列がどのように見えるか分かりませんが、標準的なテキストのどこかにリストされたよく知られた結果であるように思えます。次に、その変換行列を使用して、画像の元の座標を新しい座標にマッピングします。それは画像の端の周りのものをカットするかもしれませんが、楕円を円に膨らませるべきです。 – ely
はい、アファイン変換は、私が到着したのとほぼ同じ結論でした。つまり、適切な変換行列を定式化することです。私はしつこい続けるつもりです。 – mg6011