18

Generally edge detection boils down to detect areas of the image with high gradient value. In our case we can crudely see the gradient as the derivative of the image function, therefore the magnitude of the gradient gives you an information on how much your image changes locally (in regards of neighbouring pixels/texels). Now, an edge is as you say an ...


9

The best results strongly depend on your use case. They also depend on what effect you want to achieve. Sobel is just an edge detection filter: the edges will depend on the input signal, choosing that input signal is up to you. Here you are using the color image as an input, and the filter rightfully detects faint edges in the blue gradient, while the edges ...


4

It's quite difficult. There is so little contrast, even the JPEG compression artifacts have more contrast than the object on the background. You would require a highly specialized deblock filter to eliminate the compression artifacts first. With knowledge about the block size of the used compression algorithm and the number of coefficients used per block ...


4

The shape you’re trying to draw is called a catenary: it’s the shape that a cable/cord of constant density takes when supported at each end. You’ll have to do some research to find a parametric equation for its shape—this page has a start, though it doesn’t let you substitute in the endpoints so you’ll need some additional work there. Once you have an ...


4

I've done this 2 different ways in the past: Apply a pre-blur to the image before running the Sobel operator on it. This will have the side effect of getting rid of any noise that's smaller than the blur kernel, but it will also thicken the lines you end up drawing, too. Apply a post-process where you thicken the lines by either stamping a shape at every ...


3

Just in case anyone elso also needs to detect edges: Here is a nice article how to display a wireframe and this article explains how to show only the edges.


3

I think you can convert from the RGB space to the HSV one, or whatever color space has the HUE in a single channel. Take the HUE channel, and make the edge detection on that one. Here a simple Matlab script to achieve the result. I = imread('image.png'); hsv = rgb2hsv(I); hue = hsv(:,:,1); edges = edge(uint8(hue),'sobel'); imshow(edges);


2

Color difference is a difference in brightness, in some color channel. So while the sum of individual channels stay the same, there is a intensity difference if there is a color difference. Now the basic algorithms do not really specify how you should hadle the multi channel data. So there is nothing wrong with using a different color space. On the other ...


2

I suppose you want an arc of C0 and C1 continuity between the line and an arc. As illustrated above, you already have a vertex A which is the intersection of an edge and an arc of which the center positioned at O and radius equal to R. The question is thus pure mathematical: given A,O,R, edge direction BA, and a corner radius r, find C,B, and T. For ...


2

Standard blur removes high frequency content from the signal, whereas edge detection usually look into high frequency to detect edges. Be careful on how much blurring to apply to ensure that you don't lose desirable edges. The goal of blurring is to perform noise reduction, so the best would be to come up with a model of the noise present in your images and ...


2

The simplest solution would be just a multiplication, which would give black edges: combinedColor = sceneColor * edgeRGB.r; For more control I would suggest something very similar to what @PaulHK proposed in the comments: float opacity = maxEdgeOpacity * (1. - edgeRGB.r); combinedColor = mix(sceneColor, edgeColor, opacity); edgeColor is the desired edge ...


1

Observe that you can construct another graph by connecting the centroids of faces with centroids of adjacent faces. This is known as the dual. The edges of the graph between the centroids can be represented as the twin relation between halfedges. Then you can use something like Depth First Search to visit all the faces: function visit(f) mark f as visited ...


1

The edge between the sphere and the background is actually the one that is incorrect; you need to initialize your normal texture with a unit normal to get correct results. The two pixels thickness is a limitation of the Sobel based edge detection and other 3x3 convolution filters: you can only detect edges twice as big as your pixels. The Robert operator ...


1

Try -trim instead of -shave: convert original.png -trim trimmed.png See the docs for this and other options.


Only top voted, non community-wiki answers of a minimum length are eligible