ズッキーニのプログラミング実験場

プログラミング + アカデミック + 何か面白いこと。 記載されているものは基本的に私が所属する団体とは関係がありません。

   Jul 13

[Haskell]画像処理 水平方向のエッジ

by zuqqhi2 at 2013年7月13日
Pocket

やりたいこと

水平方向の微分で水平方向のエッジ画像を出力する。

プログラム

プログラムはこんな感じ。

import System.IO
import System.Environment (getArgs)

-- Calculation with difference between previous value
calcEdge :: [Int] -> [Int]
calcEdge [] = []
calcEdge (x:y:zs) = if (x-y) < 0 then (0 : (calcEdge (y:zs))) else ((x-y) : (calcEdge (y:zs)))
calcEdge (x:xs) = x : xs

main = do
    args <- getArgs
    if length args <= 1 then do
        print "usage : ./pgm-input input.pgm output.pgm"
    else do
        infile <- openFile (head args) ReadMode

        -- Read PGM Header
        pgm_type <- hGetLine infile
        pgm_comment <- hGetLine infile
        pgm_max_brightness <- hGetLine infile
        pgm_size <- hGetLine infile
        -- Read PGM Pixels-
        pixels_handle <- hGetContents infile
        let src_contents = take (length pixels_handle) $ pixels_handle
        let src_contents_lines = lines src_contents
        let src_pixels = concat (map (\x -> words x) src_contents_lines)
        let int_pixels = map (\x -> read x::Int) src_pixels
        let dist_pixels = calcEdge int_pixels

        -- Output PGM File
        fh <- openFile (args !! 1) WriteMode
        hPutStrLn fh pgm_type
        hPutStrLn fh pgm_comment
        hPutStrLn fh pgm_max_brightness
        hPutStrLn fh pgm_size
        hPutStr fh ((foldr (\x xs -> show(x) ++ " " ++ xs ) "") dist_pixels)

        hClose infile
        hClose fh

結果

入力画像

car-out

出力画像

car-out

Related Posts

  • 2013年7月11日 [Haskell]反転画像の生成 やりたいこと 前回まででPGM形式の画像の出力、読み込みができるようになったから、 今度は画像処理をやってみる。 今回は一番簡単な、反転画像を作る。 プログラム だいたいこんな感じ。 […]
  • 2013年7月9日 [Haskell]PGMファイルを読み込む part2 やりたいこと 昨日まででヘッダーは読み込めるようになったため、 今度はピクセルの情報を読みだす。 プログラム プログラムは以下の感じ。 入力画像 出力画像 うまくいっているみたいだ。 What I want to […]
  • 2013年7月8日 [Haskell]PGMファイルを読み込む part1 やりたいこと HaskellでPGMファイルを生成することができたから、 今度は入力出来るようにしてみたい。 プログラム とりあえずヘッダーを読み込んで出力するところまで。 実行してみる。 Target I could output […]
  • 2013年7月7日 [Haskell]PGMファイルを生成する part3 やりたいこと 昨日まででランダムな配列を作成することが出来るようになったから、 出力の形式を整えてPGMファイルを生成する。 プログラム foldrを使ってこんな感じで書いてみた。 実行するとこんな感じの内容のファイルができる。 […]
  • 2013年7月5日 [Haskell]PGMファイルを生成する part1 やりたいこと 今後Haskellで画像処理をするためにPGMファイルを生成させてみる。 プログラム まずはヘッダを出力するところまで。 コンパイルして実行してみる。 What I want to do I'll output PGM […]
  • 2013年7月6日 [Haskell]PGMファイルを生成する part2 昨日の続きで HaskellでPGMファイルを生成してみる。 今日は、乱数列を生成してみた。 出力はこんな感じ。 あとは出力形式整えるだけだ!I'll do yesterday's thing. It's making […]
Pocket

You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.