• residentoflaniakea@discuss.tchncs.de
    link
    fedilink
    English
    arrow-up
    0
    ·
    edit-2
    18 days 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.

    • FishFace@piefed.social
      link
      fedilink
      English
      arrow-up
      0
      ·
      17 days 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
        1
        ·
        17 days 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.