M33 Triangulum Galaxy

During the astronomy camp, I turned my telescope multiple times towards M33 with little success. Although it seems like an easy target, the weather was working against me, or perhaps the planets were simply misaligned :P Finally I settled with 18×5 min, ISO 1600, with the modified Canon 1100D,  N 150/750, Baader MPCC Mark III, HEQ5 with the resurrected guiding system. And I say settle, because the collimation was visibly off. So I had to invent a way to correct it, and I came up with a very crude php script that basically says: if you are a bright star, show me your center of gravity, then let me go around you and put some of your misaligned light to the other side. The outcome was far from a success but spared me from doing it manually on each and every star.

M 33, NGC 598 [galaxy in Tri] Triangulum galaxy, Triangulum-galaxis, Galaxia Triunghiului 5.8m ø70.8′ [wiki] [simbad] 750mm, 400mm

 

raw sample

raw sample

stack, curved for lights

stack, curved for lights

stack, curved for colors

stack, curved for colors

before star healing

before star healing

after star healing – the overall picture is better

after star healing – the overall picture is better

crop

crop

the crop shows there is more work to do

the crop shows there is more work to do

the healed light layer

the healed light layer

applying the colors to the light layer

applying the colors to the light layer

stage, cropped

stage, cropped

The final picture, M33 Triangulum Galaxy (18x300sec)

The final picture, M33 Triangulum Galaxy (18x300sec)

<?php

set_time_limit(1480);
ini_set('memory_limit', '2048M');

function findcenter($i, &$x, &$y, $rad, $kuszob){
  $delta = array(0,0,0,0);
  $angle = array(0, M_PI / 2, M_PI, M_PI*3/2);
  for ($ind =0; $ind<4; $ind++){
    for ($r=1; $r<$rad; $r++){
      $x1 = round($x + $r * cos($angle[$ind]));
      $y1 = round($y + $r * sin($angle[$ind]));
      $pix = imagecolorat($i, $x1, $y1) % 256;
      if ($pix < $kuszob){
        $delta[$ind] = $r;
        $r = $rad*2;
      }
    }
  }
  $y = $y + round(($delta[1] - $delta[3]) / 2);
  $x = $x + round(($delta[0] - $delta[2]) / 2);
}

function imagecolorat_($i, $x, $y, $prev){
  if ($x < 0){
    return $prev;
  }
  if ($y < 0){
    return $prev;
  }
  if ($x >= imagesx($i)){
    return $prev;
  }
  if ($y >= imagesy($i)){
    return $prev;
  }
  return imagecolorat($i, $x, $y);
}

function imagesetpixel_($i, $x,$y,$col,$prev=false){
  if ($x < 0){
    return $prev;
  }
  if ($y < 0){
    return $prev;
  }
  if ($x >= imagesx($i)){
    return $prev;
  }
  if ($y >= imagesy($i)){
    return $prev;
  }
  return imagesetpixel($i, $x, $y, $col);
}

function benne($cx, $cy, &$processed){
  $r = 3;
  for ($x=-$r; $x<=$r; $x++){
    for ($y=-$r; $y<=$r; $y++){
      $key = ($cx+$x).'_'.($cy+$y);
      if (in_array($key, $processed)){
        return false;
      }
    };
  }
  $processed[] = $cx.'_'.$cy;
  return true;
}

$i = imagecreatefromstring(file_get_contents("input.jpg"));
$o = imagecreatetruecolor(imagesx($i), imagesy($i));
imagecopy ($o, $i, 0,0,0,0,  imagesx($i), imagesy($i));

$radius = 65;
$kuszob = 235;
$fenyeskuszob = 250;
$processed = array();
$alsokuszob = 0;
$tol=3;

for ($x = 0; $x<imagesx($i); $x++){
  for ($y = 0; $y<imagesy($i); $y++){
    $pix = imagecolorat($i, $x, $y);
    if ($pix % 256 >= $fenyeskuszob){
      //find the white center
      $cx = $x;
      $cy = $y;
      findcenter($i, $cx, $cy, $radius, $kuszob);
      $key = $cx."_".$cy;
      //imagesetpixel($o, $cx, $cy, 0xFF0000);
      if (!benne($cx, $cy, $processed)){
        for ($angle = 0; $angle < M_PI; $angle+=0.005){
          $prev1 = 255;
          $prev2 = 255;
          for ($r =1; $r<$radius; $r++){
            $x1 = round($cx + $r * cos($angle));
            $y1 = round($cy + $r * sin($angle));
            $x2 = round($cx + $r * cos($angle+M_PI));
            $y2 = round($cy + $r * sin($angle+M_PI));

            $p1 = imagecolorat_($i, $x1, $y1, $p1) % 256;
            $p2 = imagecolorat_($i, $x2, $y2, $p2) % 256;

            if (($p1-$tol > $prev1) OR ($p2-$tol > $prev2)){
              $r = $radius+1;//break
            }
            if (
                ($p1 <= $kuszob) AND ($p2 <= $kuszob)
                AND
                ($p1 <= $prev1) AND ($p2 <= $prev2)
                AND
                ($p1 >= $alsokuszob) AND ($p2 >= $alsokuszob)
               ){
              $prev1 = $p1;
              $prev2 = $p2;
              $p3 = floor(($p2+$p1)/2);
              imagesetpixel_($o, $x1, $y1, $p3*256*256 + $p3*256 + $p3);
              imagesetpixel_($o, $x2, $y2, $p3*256*256 + $p3*256 + $p3);
            }
          }
        }
      }
    }
  }
}

imagejpeg($o, "output.jpg", 100);


?>
<div style="display:relative" >
<img style="left:0; top:0; position:absolute; width:100%" id="i" src="input.jpg">
<img style="left:0; top:0; position: absolute;width:100%" id="o" src="output.jpg">
</div>

<script>
var o = document.getElementById("o");
setInterval(function (){
  if (o.style.display != "none"){
    o.style.display = "none";
  }else{
    o.style.display = "";
  }
}, 1000);
</script>

 

 

Facebooktwitterredditpinterestlinkedinmail