segmenting human point cloud into 6 main parts - matlab

I have a point cloud of a human and want to segemnt it into 6 main parts including:
hands, feet, head, ...
how can I do this using opencv or pcl library or matlab? which segmentation or clustring algurithm can I use?

I think, that graph cut algorithms may be intresting for you, try search by phrase:
"graph cut mesh segmentation".
And also look here: http://people.cs.umass.edu/~kalo/papers/LabelMeshes/

pcl has a pass-through filter, which allows you to apply split-planes on the 3d cloud
(no idea, why anyone'd downvote on this, btw)

Related

Whats wrong with this MATLAB example (User-Added Coordinate Systems)?

Well I am working on a very interesting project concerning a gear system that will rotate a shaft and some gear systems. I am following a tutorial from matlab
User-Added Coordinate Systems
on how to decouple and have two gears rotating.
Well, I need some hold on understanding the following figure, that is the output of the above link.
So what I do next is un-weld the two gears by deleting the conection of F1, and later introducing the common gear constraint by conecting it to the SMLINK port on both gear"_" boxes. I get and unusual message that says:
" * Model not assembled: position violation * Resolve this issue in order to simulate the model."
Can some one explain what is happening?
Also, what is the difference between 1st generation, and multibody Simscape? can I have joint actuators in both cases? and if so how would i be able to implement such in the example given above?
for those who would like to answer, but dont have solid works, the gear block boxes, and figure is the following:
It looks like the right thing to do, but how have you parameterised your gear constraint? Have a look at mech_user_added_css.mdl for the correct way to do it (it's one of the SimMechanics example, but it uses the first generation engine and blocks). Make sure the gear circle radii match what's in the first generation example. It will also help to answer you question about first generation vs. second generation.
SimMechanics was one of the early physical modelling tools produced by MathWorks. A few years later, they produced Simscape and the Simscape engine for modelling multi-domain systems. This was much more powerful than the original SimMechanics, so over the years they migrated SimMechanics functionality over to Simscape, but have kept the original first generation blocks for compatibility issues. Have a look at some of the first generation vs second generation examples and blocks to get an idea.

How to filter speckle noise?

I am trying to remove a speckle noise from an image, all my research is pointing me at using a Knox-Thompson method, developed by astronomers, but I can't find any information about it, much less an algorithm.
What is Knox-Thompson method and what algorithm does it use?
You can have a look at despeckle plug-in od GIMP
https://git.gnome.org/browse/gimp/tree/plug-ins/common/despeckle.c
Also, despeckling implementation in Scantailor
https://github.com/scantailor/scantailor/tree/f1711c941ea0a6d78b07f714d5ff33715ba33491/filters/output

How to Extract part of Image using Matlab

i have not used matlab much, i need to extract the part of Left and Right Coronary Arteries of a heart from a given heart image.
this is my image,
based on morphological operations, this is what i have come up with,
f=imread('heart.jpg');
diam=strel('diamond',19);
line=strel('line',10,90);
linef=imclose(f,line);
line120=strel('line',10,120);
line120f= imclose(f,line120);
bothline=linef+line120f;
diamf=imclose(f,diam);
arterybm=diamf-bothline;
binaryartery= im2bw(arterybm,0);
mask=cast(binaryartery,class(f));
redPlane=f(:,:,1);
greenPlane=f(:,:,2);
bluePlane=f(:,:,3);
maskedRed=redPlane.*mask;
maskedGreen=greenPlane.*mask;
maskedBlue=bluePlane.*mask;
maskedRGBImage=cat(3,maskedRed,maskedGreen,maskedBlue);
subplot(2,3,1);imshow(f);title('Input Image');subplot(2,3,2);imshow(diamf);title('imclose with Diamond Mask');subplot(2,3,3);imshow(bothline);title('imclose with Line 120 and 90 mask');subplot(2,3,4);imshow(arterybm);title('Difference of line and diamond');subplot(2,3,5);imshow(binaryartery);title('Convert to binary image');subplot(2,3,6);imshow(maskedRGBImage);title('Apply mask to input image');
is there any better approach ?
This task is quite a difficult one, worth academic article if you find solution working flawlessly in most cases. My suggestion: search for articles on the topic, and also try "Matlab File Exchange" (http://www.mathworks.com/matlabcentral/fileexchange/). If you are very lucky, someone might have already solved this problem and posted a solution.
Have a look at the Frangi filter (aka ridge-detection filter), it is meant to detect blood vessels.
There is an implementation available on the file exchange:
http://www.mathworks.com/matlabcentral/fileexchange/24409-hessian-based-frangi-vesselness-filter

simple speech recognition methods

Yes, I'm aware that speech recognition is fairly complicated (as an understatement). What I'm looking for is a method for distinguishing between maybe 20-30 phrases. An ability to split words (discrete speech is fine) would be nice, but isn't required. The software will be user-dependent(i.e. for use by me). I'm not looking for existing software, but for a good way of going about doing this myself. I've looked into various existing methods and it seems like splitting the sound into phonemes, while common, is somewhat excessive for my needs.
For some context, I'm just looking for a way to control some aspects of my computer with a few simple voice commands. I'm aware that Windows already has speech recognition software, but I'd like to go about this one myself as a learning exercise. Commands would be simple like "Open Google", or "Mute". What I had in mind (not sure if this is a good idea) is that some commands would be compound. So "Mute" would just be "Mute". Whereas the "Open" command could be recognized individually, and then have its suffixes (Google, Photoshop, etc). recognized with another network/model/whatever. But I'm not sure if looking for prefixes/word breaks in this way would produce better results than having to deal with an increased number of individual commands.
I've been looking into perceptrons, hopfield networks (though they're somewhat obsolete from what I understand) and HMMs, and while I understand the ideas behind these (I've implemented the ANNs before) I don't really know which is best suited to this task. I'm assuming that linear vector quantization models would also be appropriate, but I can't really find much literature to this end. Any guidance/resources would be greatly appreciated.
There are some open source project in speech recognition:
HTK (Hidden Markov Models Toolkit)
Sphinx
Both have decoder, training, language model toolkits. Eveything to build a complete and robust speech recognizer.
Voxforge has acoustic and language models for both open source speech recognition toolkits.
Some time ago, I read a whitepaper about a limited vocabulary system, which used a simple recognition process. The system divided each utterance into a small number of bins (6 in time, and 4 in magnitude, if I remember correctly, for 24 total), and all it did was count the number of sample audio measurements in each bin. There was a fuzzy logic rule base which then interpreted each utterances 24 bin counts, and generated an interpretation.
I imagine that (for some applications) a simple matching process might work just as well, in which the 24 bin counts of the current utterance are simple matched against those of each of your stored prototypes, and the one with the least overall difference is the winner.

What is the best way to visualize abstract concepts (algorithm/data structure)?

What's the best way to "see what is happening" in an algorithm/data structure? If it's something like a binary search I just imagine a bunch of boxes in a row, and throwing half of them out each time. Is there something more powerful that will let us grok something as abstract as an algorithm/data structure?
Clarification: I'm looking for something a little more general. Example: in order to visualize time - some people use a clock in there head but thats slow, whereas a more natural feel would be a globe and if you are trying to get a 'feel' for how an algorithm works you can imagine two objects moving in different directions on that globe.
In general, animations are excellent for visualizing processes that occur over time, such as the execution of algorithms.
For example, check out these animations: Animated Sort Algorthms
Here's an animation that shows how the data structures work on MergeSort.
Now, whether you want to spend time hooking up your algorithm to some kind of animated visualization is a different question!
Algorithm animation was a big research area in the 1990s. Marc H. Brown, who was then at the Digital Systems Research Center, did a large amount of interesting work. The source code to his Zeus animation system is still available, and it would not be hard to get it set up. I played with Zeus years ago and if I remember correctly it ships with dozens of animations.
They had a couple of 'festivals' where non-experts got together to animate new algorithms. You can see one of the reports (with still images) on the 1993 festival. YouTube has one of their videos Visualizing Combinatorial Structures.
Describing something in terms of another thing is called analogy. You just did it with the binary search being a bunch of boxes. Just play with the student's prior knowledge.
For instance, trees can be thought of linked-lists, with multiple "next" nodes, or they could be explained to the uninitiated as something similar to a hierarchy.
As for concrete methods of explanation, graphs and state machines can be easily visualized with Graphviz. A very basic, directed graph can be expressed very simply:
digraph G {
A->B;
B->C;
C->D;
D->B;
}