• residentoflaniakea@discuss.tchncs.de
    link
    fedilink
    English
    arrow-up
    144
    ·
    edit-2
    16 hours ago

    I see a flag. I like flags. Especially the Japanese flags. I don’t specifically care for Japan, but the flag is one of my favourites. I prefer flags with low entropy: so I wrote a script once that ranks the nations flags by entropy so I could quantify my preference. Thanks for letting me infodump a bit.

    Edit: Due to people aski g for it: here is the top ten of my ranking:

    Nations' flag entropy ranking (n=208). 
    Image source: Wikimedia.
    
    0	white_field			-1.439759075204976e-10
    1	Indonesia			3.3274441922278752
    2	Germany			3.391689777286108
    3	South_Ossetia			3.8174437373506778
    4	Monaco			3.9718936201427066
    5	Poland			3.9719290780440133
    6	Austria			4.372592975412404
    7	Ukraine			4.405280849871184
    8	Hungary			4.4465472496385985
    9	Albania			4.6134257669087395
    10	Mauritius			4.707109405551959
    11	Luxembourg			4.721346585737304
    

    Here’s how I defined the entropy value for each flag:

    def color_weighted_spectral_entropy(image):
        b_channel, g_channel, r_channel = cv2.split(image)
        
        # Calculate spectral entropy for each channel
        def channel_spectral_entropy(channel):
            f_transform = np.fft.fft2(channel)
            f_shifted = np.fft.fftshift(f_transform)
            magnitude_spectrum = np.abs(f_shifted)
            if np.sum(magnitude_spectrum) > 0:
                normalized = magnitude_spectrum / np.sum(magnitude_spectrum)
            else:
                normalized = magnitude_spectrum
            # Entropy calculation with color channel weighting
            epsilon = 1e-10
            entropy = -np.sum(normalized * np.log2(normalized + epsilon))
            
            return entropy
        
        weighted_entropy = (
            0.333 * channel_spectral_entropy(b_channel) +
            0.333 * channel_spectral_entropy(g_channel) +
            0.333 * channel_spectral_entropy(r_channel)
        )
        
        return float(weighted_entropy)
    

    “White_field” is just an array that holds zeroes. I use this as a sanity check. Code is on github. I can send DM to whomever is interested. I guess it can also be searched for.

    • drosophila@lemmy.blahaj.zone
      link
      fedilink
      English
      arrow-up
      4
      ·
      5 hours ago

      I like Kazakhstan’s flag because I think its a nice combination of colors:

      Its not very low entropy though, at least not compared to ones like Germany’s or Ukraine’s.

    • FishFace@piefed.social
      link
      fedilink
      English
      arrow-up
      6
      ·
      13 hours ago

      Hmm. It seems weird that any tricolour flags would have different entropies, but I don’t know how you would otherwise do a multichannel entropy.

      I was imagining a kolmogorov-esque doodad

      • residentoflaniakea@discuss.tchncs.de
        link
        fedilink
        English
        arrow-up
        3
        ·
        6 hours ago

        Yes! And weirder that bicolour banded flags are not consistently on top. I suspect some float errors. I just know that using the typical Shannon style does even worse. I might add some filter that calculates a differential or something.

    • AnarchistArtificer@slrpnk.net
      link
      fedilink
      English
      arrow-up
      19
      ·
      1 day ago

      I love that you have multiple people replying to you asking for technical details on how you ranked the flag entropy. This is how you know that you are amongst your people here <3

      • residentoflaniakea@discuss.tchncs.de
        link
        fedilink
        English
        arrow-up
        2
        ·
        19 hours ago

        I tried different definitions and settled on spectral entropy. This one uses fourier transform and (I think) this takes the spacial relation of the pixels into account, as opposed to the more common Shannon definition. I’d like to share it but am not sure on how to do that: were I to use GitHub I would doxx myself.

        • Axolotl@feddit.it
          link
          fedilink
          arrow-up
          2
          ·
          edit-2
          15 hours ago

          I see, thank you that’s interessing;

          Btw there is gitlab as github alternative but i think that making another gh account is just better then. Another solution is making here a spoiler with the code in it

      • residentoflaniakea@discuss.tchncs.de
        link
        fedilink
        English
        arrow-up
        2
        ·
        20 hours ago

        Their previous version was indeed without the coat of arms. Much cooler I think. During that time the Liechtenstein flag was identical, but they (Liechtenstein) changed it upon discovery.