某メガネ屋さんの店頭に下のようなポスターが貼ってあり「89に見えますか?52に見えますか?」と書かれてありました。色覚異常検査のことですね。色覚に異常の無い多くの読者の皆さんは「89」に見えることでしょう。少し興味があったのでImagemagickで画像処理してみました。
まずRGB値に分解して、赤だけをとりだしてみたところ、下のようになりました。明度の低い部分がより鮮やかに「89」と読めることでしょう。
一方で青のみをとりだしてみたところ、下のようになりました。明度の低い点描のなかに明度の高い「52」の文字が浮き出ていることと思います。
#!/bin/bash
# 元画像はA-0.jpg
thema="色覚"
temp=`mktemp ./XXXX.tmp`
# JPG形式を平テキストに変換し、データベース登録
convert A-0.jpg txt: |\
awk -F"[,:)]" 'NR>1{print $1,$2,$3,$4,$5}' |\
sed -e "s/(//g" |\
awk '{print $1,$2,$3,$4,$5}' > rgb.txt
mysql image << _SQL_
drop table if exists ${thema};
create table ${thema}(
x int,
y int,
r int,
g int,
b int
);
load data local infile "rgb.txt"
into table ${thema}
fields terminated by " "(x,y,r,g,b);
_SQL_
# XY方向それぞれの画素数を取得
nx=`mysql image -N <<_SQL_
select max(x)-min(x)+1 from ${thema};
_SQL_`
ny=`mysql image -N <<_SQL_
select max(y)-min(y)+1 from ${thema};
_SQL_`
# CONVERTコマンドで使用可能なテキストファイルに変換
for color in red green blue
do
printf "# ImageMagick pixel enumeration: %d,%d,255,srgb\n" $nx $ny > ${color}.txt
case ${color} in
red)
mysql image -N <<_SQL_ > $temp
select x,y,r,0,0 from ${thema} order by x,y;
_SQL_
;;
green)
mysql image -N <<_SQL_ > $temp
select x,y,0,g,0 from ${thema} order by x,y;
_SQL_
;;
blue)
mysql image -N <<_SQL_ > $temp
select x,y,0,0,floor(b*0.5) from ${thema} order by x,y;
_SQL_
;;
esac
cat $temp |\
awk '{printf "%3d,%3d: (%3d,%3d,%3d)\n",$1,$2,$3,$4,$5}' \
>> ${color}.txt
convert -crop x280 ${color}.txt ${color}.jpg
done
rm $temp