色覚異常

某メガネ屋さんの店頭に下のようなポスターが貼ってあり「89に見えますか?52に見えますか?」と書かれてありました。色覚異常検査のことですね。色覚に異常の無い多くの読者の皆さんは「89」に見えることでしょう。少し興味があったのでImagemagickで画像処理してみました。

f:id:S_E_Hyphen:20190430145744j:plain

 

まずRGB値に分解して、赤だけをとりだしてみたところ、下のようになりました。明度の低い部分がより鮮やかに「89」と読めることでしょう。

 f:id:S_E_Hyphen:20190430150147j:plain

 

一方で青のみをとりだしてみたところ、下のようになりました。明度の低い点描のなかに明度の高い「52」の文字が浮き出ていることと思います。

f:id:S_E_Hyphen:20190430150103j:plain

 

 

#!/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