На данный момент я использую:
transparent // ClearAll
transparent[i_] :=
Module[{r, g, b, a},
{r, g, b} = ImageData /@ ColorSeparate[i, "RGB"];
a = Unitize[3. - (r + g + b)];
(Image /@ {r, g, b, a})~ColorCombine~"RGB"
]
- Есть ли способ поиграть с формой, которую возвращает ImageData для устранения ColorSeparate / ColorCombine в приведенном выше?
- Существуют ли улучшения или другие методы, которые вы могли бы предложить, которые бывают быстрее или быстрее, чем описанные выше?
Примечание: функция делает прозрачными только идеально белые пиксели RGB, и это предназначено.
Обновление по первому вопросу:
ColorSeparate, ColorCombine можно устранить с помощью Interleaving-> False
transparent0 // ClearAll
transparent0[i_] :=
Module[{r, g, b, a},
{r, g, b} = ImageData[i, Interleaving -> False];
a = Unitize[3. - (r + g + b)];
Image[{r, g, b, a}, Interleaving -> False, ColorSpace -> "RGB"]
]
но производительность хуже:
transparent0[img]; //Timing
(* ==> {0.6490372, Null} *)