Finding the Edges (Sobel Operator) - Computerphile

Поділитися
Вставка
  • Опубліковано 21 січ 2025

КОМЕНТАРІ • 402

  • @towaly3
    @towaly3 5 років тому +37

    This is brilliant. This stuff seems so abstract and hand wavy when you see it in action but then when you get to the low level of it its really quite simple. Amazing

  • @Jonas-mg5wx
    @Jonas-mg5wx 8 років тому +157

    The sobel filter actually already includes a Gaussian filter. The "2"s in the filter kernel are not meant to preserve pixels in the centre but to smooth the image and reduce the noise in the output. The sobel filter in x-direction includes a Gaussian filter in the y-direction and the other way round. The sobel filter is basically a combination of the prewitt and Gaussian filter.

    • @shiphorns
      @shiphorns 8 років тому +6

      Yep. Even the Prewitt operator reduces noise a little bit, since it is a 3-row (or 3-column) mean.

    • @kukuster
      @kukuster 5 років тому +7

      In my humble personal experience recently, weighting central pixels more improves the quality of diagonal edges extraction (those that are not straight x-direction or y-direction)

    • @yashgupta3127
      @yashgupta3127 4 роки тому +3

      I actually opened this video to get this answer only my proff said that shobel also gives averaging effect and I was all confused that how,Can you explain briefly cuz it's quite hard to visualise what you have written that guassian filter is there.

    • @mich2k1
      @mich2k1 Рік тому

      I came here for this, and after 6 years still no answer on how these 2 are gaussian filters

    • @Frumpbeard
      @Frumpbeard Рік тому +1

      ​@@mich2k1 a 3x3 Gaussian filter is:
      [1, 2, 1;
      2, 4, 2;
      1, 2, 1]
      A Prewitt operator is:
      [1, 0, -1;
      1, 0, -1;
      1, 0, -1]
      And:
      [1, 1, 1;
      0, 0, 0;
      -1, -1, -1]
      What do the Sobel operators have in common with the Gaussian filter that the Prewitt operators do not?

  • @TechyBen
    @TechyBen 9 років тому +210

    When I was a kid, I saw edge detection in software as some sort of magic. I just could not figure out how it was possible. Though I never did try to think of the maths involved.
    Thanks for making such a hidden world come to life and make sense and reality. :)

    • @TheGrandexeno
      @TheGrandexeno 9 років тому +1

      +David Last Nerd kids on yt are the worst, I swear...

    • @KabooM1067
      @KabooM1067 9 років тому

      +David Last
      I don't get why you're showing off.... To whom?

    • @official-obama
      @official-obama 3 роки тому

      @@TheGrandexeno huh?

    • @TheGrandexeno
      @TheGrandexeno 3 роки тому

      @@official-obama why are you here and not on UA-cam kids?

  • @msdfsdfe2533
    @msdfsdfe2533 8 років тому +3

    Thank you so much.
    You explain how sobel works better in a 7 min video, than in an entire course over the semester at the college where I study.

  • @joejamesusa
    @joejamesusa 2 роки тому +4

    Excellent explanation of the Sobel edge detection algorithm in easy-to-grasp terms. Love it!

  • @bowi1332
    @bowi1332 3 роки тому +1

    This is the best channel to explain to people why mathematics can be useful and fun.

  • @scriptkiddie7485
    @scriptkiddie7485 7 років тому +2

    This is probably my favorite youtube video I have every seen in my life.

  • @coemgeincraobhach236
    @coemgeincraobhach236 3 роки тому

    from unnecessarily complicated math notation to cut outs of printer paper from the 80's, delighted i found these videos! thanks!

  • @myrixtyzm3524
    @myrixtyzm3524 9 років тому +92

    love this guy.

  • @nikhilrout3287
    @nikhilrout3287 10 місяців тому +2

    this is beautiful. watched it about a week ago and finally implemented a real time sobel filter in verilog for FPGAs today

  • @LovePeace2025
    @LovePeace2025 8 років тому +596

    My computer vision professor should be fired...

    • @khaldrogo9451
      @khaldrogo9451 6 років тому +13

      same here lol

    • @ajinkyarathod5180
      @ajinkyarathod5180 4 роки тому +5

      This made me laugh so hard

    • @CatJell
      @CatJell 4 роки тому +3

      same

    • @MusicToTheWolf
      @MusicToTheWolf 4 роки тому +3

      This is such basic stuff, if you study computer science you should understand it anyway really..

    • @ashley-rh9wj
      @ashley-rh9wj 4 роки тому +7

      i guess i just hate powerpoint lectures

  • @HazardousMoose
    @HazardousMoose 9 років тому +5

    I love how these videos match up with my curriculum:D Had to program an application that takes an image, converts it to grayscale, smooths it with a mean blur, then applies a sobel filter. And based on the results it would find the chain of pixels crossing the least edges, and would remove it from the image. A.k.a. content aware resizing...

  • @AdeonWriter
    @AdeonWriter 9 років тому +42

    As a C++ programmer, I'd love a why C# rocks rant. I like having my eyes opened!

    • @Spongman
      @Spongman 9 років тому +8

      +Adeon Writer looking at his code i'm guessing a C++ programmer wouldn't be blown away at his rant. but i'd take a look at 'Expression', 'yield return', PLINQ and 'async/await' for some killer c# features.

    • @AximVidya
      @AximVidya 9 років тому +1

      +Spongman S I'm guessing that the code is deliberately verbose, in order to be as understandable with as little programming knowledge as possible, and I would say it's pretty good at that.

  • @DeJayHank
    @DeJayHank 9 років тому +6

    Excellent video about this! I never thought about extracting the edge angle before. This might come in handy in combination with a Hough Line transform.

  • @tastelesstouch
    @tastelesstouch 9 років тому +1

    Perfect timing! Keep the image processing videos coming!!!

  • @ainymunnee7780
    @ainymunnee7780 8 років тому

    if I had to name a super hero, it would be you! you saved my day I have an exam tomorrow and I was on the verge of nervous breakdown, you saved me! thanks a million

  • @emneemne
    @emneemne 6 років тому

    Best teacher ever! (just passed my computer vision class - thank you!)

  • @anteconfig5391
    @anteconfig5391 6 років тому +2

    I gotta re-watch some numberphile or PBS Infinity Series videos. It took me a while to understand why the Pythagorean theorem works here. I'm starting to realize things I should've realized before and it's making me wonder how much more I didn't understand the first time through.

  • @RacingRalphEVO
    @RacingRalphEVO 3 роки тому +1

    This guy is so amazing that I even won't be complaining about the code being in c# :D

  • @bdulagadadasev6495
    @bdulagadadasev6495 7 місяців тому

    Thank you, really. Your explanation is easily understandable and comprehensive.

  • @hadirotafoua5381
    @hadirotafoua5381 7 місяців тому

    love such confidence in speaking .. thanks big prof

  • @U014B
    @U014B 9 років тому +110

    C#? You mean Db?

    • @MrAkpla
      @MrAkpla 6 років тому +34

      Three years you waited, and your musical pun has finally been appreciated

    • @grn1
      @grn1 3 роки тому +2

      @@MrAkpla 2 more years and they got a chuckle out of me.

    • @bruhmoment5227
      @bruhmoment5227 3 роки тому

      @@grn1 and 2 months

  • @usama5015
    @usama5015 5 років тому

    excellent teaching . Answer to the counter question are clearly demonstrated.

  • @b.b.4969
    @b.b.4969 5 років тому +1

    I:m SO glad i found this channel THANKYOU!

  • @Roxor128
    @Roxor128 9 років тому +5

    To all those complaining about the example being in C#, man/woman up and just convert it to your language of choice! I haven't used it, but I imagine it's going to be very similar to C++, Java, or HLSL, none of which are difficult to convert to each other.

  • @isaacaskey1410
    @isaacaskey1410 4 роки тому

    Great video, straightforward and easy to understand!

  • @mailoisback
    @mailoisback 4 роки тому +2

    Where can I find the code he is talking about? The link seems to be broken.

  • @rosssharma542
    @rosssharma542 9 років тому

    Nice video, as always. But here's a little tip. If you're shooting a person writing with their right hand, shoot them from the left. And vice versa if they're left-handed.

  • @sprites
    @sprites 9 років тому +4

    Fascinating. After watching all of computerphile's edge detection videos I'm really interested to learn more about computer vision and how it uses these edges.
    How would you avoid processing a larger image for edge analysis? Keypoints? Is there an algorithm that can skim an image for just the main edges?

  • @boratsagdiyev3936
    @boratsagdiyev3936 5 років тому

    this really helped with my digital signal processing lab today. thanks

  • @squidcaps4308
    @squidcaps4308 9 років тому +1

    Good timing, just modifying Sobel edge detection shader code, trying to figure out something neat out of it, maybe playing around with z buffer.

  • @Whateleyben
    @Whateleyben 3 роки тому +1

    Hello I would really like to view Mikes code, but the link seems to be broken.

  • @uniquehandle767
    @uniquehandle767 7 років тому

    These are the coolest videos.

  • @mfaraday4044
    @mfaraday4044 4 роки тому

    Thank you wonderfull explaination .
    Finally I found this channel.

  • @peschebichsu
    @peschebichsu 3 роки тому +1

    Love all your videos! Would be nice if you made something about image warping. Seems like a hard to understand but interesting topic for me. So perfect for you to make an easy to understand video :D

  • @firstnamelastname4752
    @firstnamelastname4752 9 років тому +1

    I don't code, so as an off-topic aside you can create a cheap edge-map in Photoshop by duplicating an image into another layer, gaussian-blurring the top one slightly, then setting its blending mode to negative. You might need to fiddle with the blur size and also dump a curves layer on top to brighten/darken it.

    • @Roxor128
      @Roxor128 9 років тому +1

      +Firstname Lastname Congratulations. You've independently recreated the Unsharp Mask algorithm. No, seriously. That's how it works. It's the difference between the original image and a blurred copy, though I can't remember which order you're supposed to put the two in the subtraction stage.

    • @firstnamelastname4752
      @firstnamelastname4752 9 років тому

      Oh. Well that's cool. Yeah I can't remember the order either, I just assumed blurred on top.

    • @MAP233224
      @MAP233224 Рік тому

      you can look into "the difference of gaussians"

  • @dougsmith3372
    @dougsmith3372 6 років тому +1

    At 1:28 he points to the paper and says "this location here." What location? I cannot see it. His hand is in the way. Use a pointer and make sure the viewer can see what is being pointed at.

  • @rayanemesbah7815
    @rayanemesbah7815 Рік тому

    The sound of marker (pen) is painful but the video is so appealing I couldn't stop watching

  • @p4radox0
    @p4radox0 9 років тому

    Please, more of this guy!!

  • @airjuri
    @airjuri 8 років тому +1

    thank you, we made bounce angle calculations using sobel operator :D

  • @tomas.koranda
    @tomas.koranda 4 роки тому +1

    is the code still accessible? The link doesnt seem to work.

  • @bekay7663
    @bekay7663 Рік тому

    OMG TYTYTY. Im doing this right now for cs50x and I got kicked out of highschool during covid, so this helps me a lot.

  • @Caboom11
    @Caboom11 2 роки тому

    These videos helped me SO much! Thanks heaps

  • @bilbopraktikums509
    @bilbopraktikums509 8 років тому +1

    Dude, I love you. Seriously, I do.

  • @manon-gfx
    @manon-gfx 9 років тому

    Really helpful video for getting edge detection in my toon shader to work! thanks!

  • @saivenkat5125
    @saivenkat5125 6 років тому

    good explanation....can you also explain about the gabor filters too??

  • @MrTridac
    @MrTridac 9 років тому +124

    I like Mike. I dislike C# but I'd still like to have the "Why C# rocks" rant.

    • @ihrbekommtmeinenrichtigennamen
      @ihrbekommtmeinenrichtigennamen 9 років тому +14

      +MrTridac
      I'd like to know why you dislike C#. Not to start a flamewar or anything but just to hear different opinions on it.

    • @PapoochCZ
      @PapoochCZ 9 років тому +12

      +Ihrbekommtmeinen Richtigennamennicht : Bad portability

    • @ihrbekommtmeinenrichtigennamen
      @ihrbekommtmeinenrichtigennamen 9 років тому +7

      +Papooch
      What kinds of programs are you writing? For what kinds of clients? I'd like to know why portability is important for you.
      Aside from that: Mono can do quite a lot and it supports WinForms. Unfortunately though it does not support WPF, but that would also be really hard to do.
      Edit: Also this is not a problem with C#, it's a problem with .NET in general.

    • @derstreber2
      @derstreber2 9 років тому +5

      +MrTridac
      I agree the rant would be insightful.

    • @MrTridac
      @MrTridac 9 років тому +4

      Ihrbekommtmeinen Richtigennamennicht
      It's meant to be used with/for .net programs and I'm just not a big fan of VM's in general (includes java). I know, I'm old school but I like me some neat C++ without sharps and CLIs :)

  • @rikvandenreijen
    @rikvandenreijen 6 років тому

    Awesome video, you have a very nice way of teaching!

  • @markurban9113
    @markurban9113 9 років тому

    You can run Sobel on color, you will get three X,Y gradients one for each channel, sometimes objects are visible better in just R or B... or you can do a weighted average of all three which might sometimes give a better result than just running it on grayscale.

  • @quicksilver5413
    @quicksilver5413 2 роки тому

    Thank you for explaining it so clearly!

  • @juanrada1040
    @juanrada1040 9 років тому

    What a great explanation, thanks for this material.

  • @SO-dl2pv
    @SO-dl2pv 5 років тому

    in 5:37 you mean atan2 instead of atan because atan function will have a problem when Cx = 0 or when both Cx and Cy are equal to 0.

  • @jicherry6750
    @jicherry6750 3 роки тому

    Great explaination sir. Thank you very much!

  • @MrBoobcube
    @MrBoobcube 8 років тому +3

    I like your choice of shirt given the content.

  • @eddiej5974
    @eddiej5974 5 років тому +2

    Amazing work, keep them coming! I was able to implement this from 'scratch' in Python.
    Can you do a video on the Harris Corner detection algorithm? The math is seems a lot more involved and I'm having trouble converting the math to actual code :(

  • @SwagDawg
    @SwagDawg 7 років тому

    I understand everything in the video besides the orientation of the pixel. How do you add color to the image? If it is grayscale, and the inverse tangent gets you a single number, how do you know what color that number should be??

  • @weakamna
    @weakamna 5 років тому +1

    It seems like the link to the code is down =/. Maybe make a git repository somewhere with all the code from the videos?

  • @JacobFreeze
    @JacobFreeze 6 років тому

    Thanks for this very clear explanation!

  • @kilésengati
    @kilésengati 9 років тому +3

    Is it possible to generate normal maps with the sobel generator? Seems like it could work.

  • @himanshu2891
    @himanshu2891 4 роки тому

    such amazing explanation. i paid lakhs to my univ hoping i'd get this.

  • @francoisantoinejacques8843
    @francoisantoinejacques8843 4 роки тому

    pretty clear, thanks a lot for your work !

  • @ehza
    @ehza 4 роки тому

    beautifully explained

  • @LeifPeterson3D
    @LeifPeterson3D 9 років тому

    I've used Sobel Edge detection to make a video game render post-process, well, I multiply a crunched (black and white) and clamped (0-1 scalar), then inverted to get nice black edges.

    • @Roxor128
      @Roxor128 9 років тому

      +Leif Peterson I've done something similar in HLSL to make a sort-of toon shader for video playback. I only used a single kernel with different weights, though. 5*5 kernel with -24 in the centre and 1 everywhere else.

    • @LeifPeterson3D
      @LeifPeterson3D 9 років тому

      +Roxor128 doing the game post-process involved jittering the depth buffer, or, the World Normal, which can allow you to get interior edges

    • @eideticex
      @eideticex 9 років тому +1

      +Leif Peterson Sounds like the technique I've used for edge detection in a deferred renderer. I started with a sobel filter but found it too noisy and didn't like the idea of blurring to solve the noise since that would kill some of the desired edges. Then incorporated view space normals by analyzing the trend of the normals. Flat out multiplied the trend by the sobel result and it produces very nice edges that mimic the style you see in old Japanese ink drawing. It really didn't matter if the normals were view or world space since all I analyzed them for was trends along the surface.

    • @Roxor128
      @Roxor128 9 років тому

      +Leif Peterson I've done that, too. Just not in a shader. Pure CPU implementation with a raytracer. Build depth and normal buffers while doing the main rendering, then process them to get edges. Even got the edges in reflections.

  • @nikhilsingh-hm6uz
    @nikhilsingh-hm6uz 4 роки тому

    can filtering be applied after doing sobel edge detection for removing noise . Is is compulsory to apply in the beginning?

  • @theodoretourneux5662
    @theodoretourneux5662 2 роки тому

    thanks for this great video! very helpful and clear!

  • @SuperDayv
    @SuperDayv 7 років тому

    Can you explain what you said at around 5:18? If there is a strong horizontal edge but no vertical edge this would correspond to a medium value when they're combined. But isn't this a genuine edge? Shouldn't this have a large value? Also, how could there be a strong horizontal and vertical edge in the same location? Would that be a diagonal?

  • @カラスKarasu
    @カラスKarasu 8 років тому +3

    Can you do a video about motion blur?

  • @TacoDude314
    @TacoDude314 9 років тому +1

    if you wanted edges of colors, could you convert it to HSV and do this same process on the hue values?

  • @AlexanderTrefz
    @AlexanderTrefz 9 років тому +71

    DO THE WHY C# ROCKS RANT! C# is just great.

    • @Jet-Pack
      @Jet-Pack 9 років тому

      +Alexander Trefz I love it, too :D

    • @zik2000
      @zik2000 9 років тому +21

      hahahahah! nice try microsoft!

    • @AntiHeadshot
      @AntiHeadshot 9 років тому

      +Alexander Trefz Get this guy to the top :D

    • @Lvl100Boss
      @Lvl100Boss 9 років тому +3

      +Alexander Trefz C# is trash

    • @AlexanderTrefz
      @AlexanderTrefz 9 років тому

      Tard Al Yes, please give him more reasons to stuff you up with all the objective facts why C# is most certainly among the best languages available, if not the best. Please.

  • @AriefWijayaisMRAW
    @AriefWijayaisMRAW 7 років тому

    I found in a journal that use sobel approximation with a threshold value of 0.02 for obtain edge map. How to get that threshold ? because as I know, I only can use threshold with range 0 - 255 (based on maximum gray value) from sobel detection.

  • @sudharshanavenkataraman4438
    @sudharshanavenkataraman4438 8 років тому

    I have a doubt here. Whether the gradient is found at each corresponding pixels or it is found oly at the middle pixels i.e gradient at 1,1 for 3*3 matrix. And after finding the gradient how the gradient is applied to each of the pixels. Please help me out

  • @harviecz
    @harviecz 6 років тому

    So you need to take absolute value of the convolution result right? otherwise there would be negative pixels on edges depending if you go to lighter or darker color from left to right.

    • @harviecz
      @harviecz 6 років тому

      Ah sorry, I've missed the square root operation on 4:30

  • @davewasthere
    @davewasthere 6 років тому

    Fantastic... Really loved it! And keen on the 'Why C# Rocks' rant. ;)

  • @eeasedev7668
    @eeasedev7668 4 роки тому

    The download link is broken. Could you please provide a working one?

  • @ihorprotsenko5431
    @ihorprotsenko5431 7 років тому

    So cool! Thank you for your explanation

  • @aitortilla5128
    @aitortilla5128 7 років тому

    Brilliant and quite useful.

  • @lucaccinnocapuccinno607
    @lucaccinnocapuccinno607 2 роки тому

    Can the kernel matrix have any values as long as their absoulte value it's symmetrical on both sides? For example can we have [[-2, -4, -2], [0,0,0], [2, 4,2]] instead of [[-1,-2, -1], [0,0,0], [1,2,1]] as shown in the video.

  • @vincentlopez464
    @vincentlopez464 7 років тому

    Thanks for this, big help for our thesis. You've earned a like and a sub from me.

  • @pranavgupta255
    @pranavgupta255 Рік тому

    how much time will it take to completely understand sobel filter

  • @muhammadmohsin2038
    @muhammadmohsin2038 6 років тому

    after taking derivative of both x and y than how to add them or get the total in one image
    Like we have two images one derivative in x and other in y than whats the next step?

  • @lenghia7795
    @lenghia7795 7 років тому

    Hey, what if I reverse the positive and negative row (column) in the filter? Because sure in practice we dont know which one is black and which one is white, right?

  • @brendathompson3758
    @brendathompson3758 4 роки тому

    Hi there -- how do we determine the threshold at which the G value is high enough to indicate the presence of an edge? Especially since the range of all pixel values can be quite large, it is possible to have an edge with a relatively low G value. But in general, how do we pick this threshold?

  • @Crobisaur
    @Crobisaur 9 років тому +1

    I'd like to see a video about Laplacian Pyramids.

  • @marioCazares
    @marioCazares 5 років тому

    Love these!

  • @jackfever405
    @jackfever405 8 років тому

    To find the "Ultimate Edge" apply the Tony Robbins filter. When this filter is applied to images of people it detects those who are easily separated from their money. Sometimes this filter is also known as the "Fools" filter.

  • @pushkarmahajan9294
    @pushkarmahajan9294 3 роки тому

    Can Sum of absolute values be used instead of Pythagoras to obtain G?

  • @manuelpena3988
    @manuelpena3988 9 років тому

    I don't know anything about this, but I would like to ask, why in the last part of the video, when saying that you want to get rid of the "high frequency edges" you use first a gaussian blur and then the sobel kernel. My question is... if you want to get rid of the high frequency why don't you use a low-pass filter?
    Thanks for the videos.

    • @Spongman
      @Spongman 9 років тому

      Your reasoning is correct. The gaussian blur is a low-pass filter.

  • @nehalsonawane1042
    @nehalsonawane1042 3 роки тому

    small things but so brilliant!

  • @farahaljaber2356
    @farahaljaber2356 7 років тому

    Does the zero picxles represents the edge in the x and y direction ?

  • @SuperDayv
    @SuperDayv 7 років тому

    Super helpful, thanks!

  • @jayschauer1347
    @jayschauer1347 8 років тому

    If you are using arctangent to determine the orientation of edges, what method is used to color them that gives a range from 0 to 2pi, instead of just -1/2pi to 1/2pi? (I saw that a full circle of colors were used).
    Edit: My best guess right now would be when passing the Gx and Gy data to the arctangent method, rather than just passing Gx/Gy, Gx and Gy are passed separately and then the method can produce full 360 degree orientations based on the signs of Gx and Gy.

  • @OtokoInu
    @OtokoInu 9 років тому +3

    Very good video. Can you explain the operation of edge detection of Canny?
    This is more difficult that the operation of Sobel, because Canny should keep three operation.

    • @Computerphile
      @Computerphile  9 років тому +17

      +OtokoInu see canny video posted the day before your question :) (subscribe for updates!)

  • @anonanon3066
    @anonanon3066 3 роки тому

    Wouldn't it be sensible to say...
    edgeFac = max(sobel_R, sobel_G, sobel_B), to account for edges that are very apparent in color images, but almost invisible in grayscale?
    EDIT: I've tried this, and it looks great!

  • @anhhuyham
    @anhhuyham 5 років тому

    Hi, can you make a video about Harris Corner Detection?

  • @TylerMatthewHarris
    @TylerMatthewHarris 9 років тому +2

    what's the difference between Canny edge detection and Sobel? (or rather, which is better?)

    • @martinsavc3202
      @martinsavc3202 9 років тому +7

      +Tyler Harris Canny edge detection is a particular technique to turn the grayscale responses of edge detectors such as Sobel filter to a binary image that represents detected edges. The results of Canny give you 1 (or >0) values for pixels where the edge was detected with a few constraints: edges are 1 pixel wide and edges are connected (maybe some more, but i think these are the most important). Neither technique can replace the other.

    • @TylerMatthewHarris
      @TylerMatthewHarris 9 років тому

      +Martin Savc awesome, that makes sense. thanks!

    • @assilksiksi
      @assilksiksi 9 років тому

      +Martin Savc I've used Canny before in OpenCV but never knew the difference. Thanks.

    • @SleeveBlade
      @SleeveBlade 9 років тому

      +Tyler Harris canny edge is better if you want to use a line detection algorithm on it afterwards.

    • @NNOTM
      @NNOTM 9 років тому

      +Tyler Harris, you pretty much need to implement Sobel to get Canny though. Essentially, you take the output from Sobel, make every pixel that's brighter than some threshold white (and every other pixel black), and then make sure that every edge is only one pixel wide.

  • @mschris685
    @mschris685 5 років тому

    I just wanted to see the video about neural networks but got told to watch this one first. Now I'm told I might want to go back to even another Video🤪 I wonder when I'll get redirected to a topic that's simple enough to not be based on something else😅

  • @matthiastuytschaever4342
    @matthiastuytschaever4342 7 років тому

    So, the x-direction kernel show the vertical edges more clearily? I'm confused

  • @Cambesa
    @Cambesa 8 років тому

    Can't you just run sobel on every channel(RGB) and combine the results to grayscale for a full color edge detection?

  • @DrRChandra
    @DrRChandra 9 років тому

    So what if you just concatenated the three color channels (probably want to throw out alpha, if there is one)? One value would always be multiplied by the same factor (64K for 8 bit samples) and another by another but still constant factor (256 in the case of 8 bit samples). I would think the results would be about as useful as scaling each. Or maybe not, because maybe the first channel gets weighted the most, and the second channel more than the third?

    • @johnpetersen5341
      @johnpetersen5341 9 років тому +2

      +rchandraonline Sadly, that wouldn't work. Red, green, and blue are orthogonal to one another, like X, Y, and Z in spatial coordinates. Lightness is the radius: it's the length of the vector. We're looking for change in the length of our vector.
      Using R*65536 + G*256 + B for lightness means that a one-bit change in R is equivalent to a 65536-bit change in B. The best you could do is R+G+B, where at least they're equally weighted. This puts you in 'taxicab space' if you want to know more about it. It would report similar brightness values for mostly red, green, and blue pixels as the Pythagorean approach, but it would report yellow, teal, and magenta as extra bright, so artificial edges might appear between primary and secondary colors. In addition, edges detected in Pythagorean brightness might go unnoticed here, because of the same interference.
      If you just want to find hue edges, you can use the same algorithm on the hues in the image. There are just two caveats: one, hue is periodic, so simple subtraction won't always work; and two, hue is undefined at the poles (black and white), and has low resolution near them.

  • @murk1e
    @murk1e Місяць тому

    Unfortunately, the code link no longer functions