現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
What is the best way to store groups of 3 nearest non-zero pixels?
6 ビュー (過去 30 日間)
古いコメントを表示
Steve
2019 年 9 月 6 日

I would like to identify and store each set of 3 closest points (as seen in the attached image) in a separate variable. So in this case, there would be three variables created--one for each set of three points. What would be the most efficient way to do this? Thanks in advance for your help!
1 件のコメント
採用された回答
Matt J
2019 年 9 月 6 日
編集済み: Matt J
2019 年 9 月 6 日
I would like to identify and store each set of 3 closest points (as seen in the attached image) in a separate variable.
No, you should not organize the result that way. What you should do is create a cell array called Triplets, such that Triplets{i} contains the points in the i-th triplet as a 2x3 matrix.
[I,J]=find(~yourImage);
X=[I,J];
[D,K]=pdist2(X,X,'euclidean','Smallest',3); X=X.';
K=unique( sort(K).', 'rows').'; K=K(:);
assert(numel(unique(K))==numel(K) ,'Points not well-separated enough for threshold' );
Triplets=num2cell( reshape( X(:,K), 2,3,[] ) ,[1,2]);
Triplets=Triplets(:).';
25 件のコメント
Steve
2019 年 9 月 6 日
Thanks so much for your input. Looks great. I see you have the groups (sets of 3) all stored in one variable called "Groups". How do I get each set of 3 (x,y) coordinate pairs stored into their own variable (3 points per variable), so that I can call on them individually? Thanks again for your help!
Matt J
2019 年 9 月 6 日
How do I get each set of 3 (x,y) coordinate pairs stored into their own variable (3 points per variable), so that I can call on them individually?
If you know there will always be 3 triplets, you can do
[T1,T2,T3]=deal(Triplets{:});
Steve
2019 年 9 月 6 日
If they are stored in one variable, how do I call on each of the triplet sets individually?
Steve
2019 年 9 月 6 日
Ok, cool. Last question (I hope)...How do I plot the triplets with index labels over the original image?
Matt J
2019 年 9 月 6 日
I found some errors in the original code and edited it. The Triplets{i} are now returned as 2x3 matrices, but that is easy to change if it is not prefered.
Steve
2019 年 9 月 6 日
MATLAB stopped and said "out of memory". Can I do this in a more efficient way? Thanks again for all your help.
Matt J
2019 年 9 月 6 日
編集済み: Matt J
2019 年 9 月 6 日
How do I plot the triplets with index labels over the original image?
In the meantime, I demonstrate below how to add labels to the triplets on your originally posted image with the attached plotpts2D.m file
C=cell2mat(cellfun(@(z)mean(z,2),Triplets,'uni',0) );
imshow(yourImage); hold on; plotpts2D(flipud(C)); hold off;
This will show,

Steve
2019 年 9 月 6 日
The only thing is when you zoom in to the plot, the index numbers pull away from the blue dots.
Matt J
2019 年 9 月 6 日
Steven's comment moved here:
It's not that they re far from the points, it's more that they appear random (some are close, and some are far).

Matt J
2019 年 9 月 6 日
編集済み: Matt J
2019 年 9 月 6 日
it's more that they appear random (some are close, and some are far).
No, that's an illustion. The labels that appear to you to be close to a point really belong to a different point farther away. The distance between a point and its label is set uniformly in the code to the dd parameter in that line I showed you. It cannot vary from point to point.
Steve
2019 年 9 月 6 日
I set the parameter to: dd=diff(ylim)/2000; and it worked perfectly. You are amazing. What is the best way to officially rate your help and effort so you get the most credit?
For anyone reading this, Matt J is the best! A+
Matt J
2019 年 9 月 6 日
Glad it worked. Just Accept-click the answer and that will be thanks enough :-)
Steve
2019 年 9 月 30 日
Hi Matt,
I could really use your expertise again. I need to figure out how to modify your code in order to find the 10 nearest points to every other point within a group of points (i.e., 10 nearest neighrbors). The points I speak of are the Fermat center points to the Triplets we found in the previous task. I have found all these "Fermat points" and have their coordinates in the attached file (F_points.mat). As always, any help you could offer would be greatly appreciated.
Best
Steve
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Get Started with MATLAB についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
アジア太平洋地域
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)




