mieki256's diary



2022/06/28(火) [n年前の日記]

#1 [python][cg_tools] ディザリング処理をするプログラムをPythonに移植中その3

任意のパレットを指定してディザリングをかけるサンプルプログラム群を ―― C++ で書かれてるソレを Python で書き直しているところ。

_Arbitrary-palette positional dithering algorithm

アルゴリズム2の移植を始めたものの、Python版の生成画像が、C++版とかなり違う生成画像になってしまった。おそらく std::sort() のあたりの処理を正しく書けてない気がする…。

/* Luminance for each palette entry, to be initialized as soon as the program begins */
static unsigned luma[16];

bool PaletteCompareLuma(unsigned index1, unsigned index2)
{
    return luma[index1] < luma[index2];
}

// ...

    // Sort the colors according to luminance
    std::sort(result.colors, result.colors + MixingPlan::n_colors, PaletteCompareLuma);
    return result;

あらかじめパレットデータから作っておいた輝度の配列の値を元にして、result.colors という配列の中身をソートするのかなと思ったのだけど…。そもそも Python でそういう処理ってどう書くのだろう。

    lst = []
    for i in range(n_colors):
        lst.append([r_colors[i], luma[i]])
    nlst = sorted(lst, key=lambda x: x[1])
    cols = [row[0] for row in nlst]
    return cols

上のように書いてみたけど、めちゃくちゃな結果になる…。

色々試してみたところ、以下のような記述だと似た結果になった。

    cols = sorted(r_colors, key=lambda x: luma[x])
    return cols

本当にこれで合ってるんだろうか? 自信無し。

以上、1 日分です。

過去ログ表示

Prev - 2022/06 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project