bool _stdcall ComputeConvexHull(const mist::array3<short> *originImage, int targetLabel, int seedLabel, mist::array3<short>* output)
{
	if (originImage == nullptr)
		return false;

	int seedIJK[3] = { 0 };
	size_t seedId(0);
	mist::array3<short> image(*originImage);
	for (size_t i = 0; i < image.size(); ++i)
	{
		if (image[i] == seedLabel)
			seedId = i;
		if (image[i] != targetLabel)
			image[i] = 0;
	}

	tmatsu::artery::Tree tree;
	ComputeIJK(seedId, seedIJK, originImage->size1(), originImage->size2(), originImage->size3());
	TreeConstruct(image, tree, tmatsu::Point(seedIJK[0], seedIJK[1], seedIJK[2]));
	for (auto iter = tree.begin(); iter != tree.end(); ++iter)
	{
		if (!iter.node()->eldest_child)
		{
			auto pt = iter->value.end_pt;
			(*output)(pt.x, pt.y, pt.z) = 10;
		}
	}

	return true;

	mist::euclidean::thinning26(image, *output);
	return true;

	mist::array3<short> image_prev(image);

	mist::erosion(image, 1);
	(*output) = image_prev - image;


	return true;
}
Beispiel #2
0
Datei: input.c Projekt: erikg/vp
int
handle_input ()
{
    SDL_Event e;

    SDL_WaitEvent (&e);
    switch (e.type)
    {
	/*
	 * thanks to Ted Mielczarek <*****@*****.**> for this, fixes the X
	 * Async request errors 
	 */
    case SDL_USEREVENT:
	if (e.user.code == SHOW_IMAGE)
	    image_freshen ();
	break;
    case SDL_KEYDOWN:
	switch (tolower (e.key.keysym.sym))
	{
	case 'x':
	case 'q':
	case SDLK_ESCAPE:
	    return 0;
	    break;
	case SDLK_SPACE:
	    timer_toggle ();
	    break;
	case SDLK_RETURN:
	    image_freshen ();
	    timer_stop ();
	    break;
	case SDLK_RIGHT:
	    timer_stop ();
	    image_next (0);
	    break;
	case SDLK_LEFT:
	    timer_stop ();
	    image_prev (0);
	    break;
	case 'z':
	    timer_stop ();
	    toggle_state (ZOOM);
	    image_freshen ();
	    break;
	case 'f':
	    timer_stop ();
	    toggle_state (FULLSCREEN);
	    if (get_state_int (FULLSCREEN))
		screen =
		    SDL_SetVideoMode (vid_width (), vid_height (),
		    vid_depth (), SDL_FULLSCREEN | SDL_DOUBLEBUF);
	    image_freshen ();
	    break;
#if 0
	case '+':
	case '=':
	    scale += .1;
	    image_freshen ();
	    break;
	case '-':
	    scale -= .1;
	    image_freshen ();
	    break;
#endif
	default:
	    /*
	     * do nothing 
	     */
	    break;
	}
	break;
    case SDL_QUIT:
	return 0;
	break;
    }
    return 1;
}