Skip to content

Commit

Permalink
Merge pull request #31 from observerly/fix/monochrome/ApplyGaussianNoise
Browse files Browse the repository at this point in the history
fix: Added improved test coverage for (m *MonochromeExposure) ApplyNoiseReduction().
  • Loading branch information
michealroberts authored Oct 29, 2022
2 parents d13b468 + 6ab0a74 commit 4be7d0a
Show file tree
Hide file tree
Showing 5 changed files with 188 additions and 51 deletions.
98 changes: 49 additions & 49 deletions coverage.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
mode: atomic
github.com/observerly/iris/pkg/fits/fits.go:17.33,28.2 1 2
github.com/observerly/iris/pkg/fits/fits.go:47.32,52.2 1 1
github.com/observerly/iris/pkg/fits/fits.go:56.72,59.31 2 1
github.com/observerly/iris/pkg/fits/fits.go:63.2,63.17 1 1
github.com/observerly/iris/pkg/fits/fits.go:67.2,78.3 1 1
github.com/observerly/iris/pkg/fits/fits.go:59.31,61.3 1 2
github.com/observerly/iris/pkg/fits/fits.go:63.17,65.3 1 1
github.com/observerly/iris/pkg/fits/fits.go:83.55,98.2 2 1
github.com/observerly/iris/pkg/photometry/noise.go:12.77,17.29 2 2
github.com/observerly/iris/pkg/photometry/noise.go:21.2,26.3 1 2
github.com/observerly/iris/pkg/photometry/noise.go:17.29,19.3 1 32
Expand All @@ -20,37 +28,9 @@ github.com/observerly/iris/pkg/photometry/stars.go:48.35,52.22 2 24
github.com/observerly/iris/pkg/photometry/stars.go:62.4,62.29 1 24
github.com/observerly/iris/pkg/photometry/stars.go:52.22,56.85 2 23
github.com/observerly/iris/pkg/photometry/stars.go:56.85,58.6 1 5
github.com/observerly/iris/pkg/fits/fits.go:17.33,28.2 1 2
github.com/observerly/iris/pkg/fits/fits.go:47.32,52.2 1 1
github.com/observerly/iris/pkg/fits/fits.go:56.72,59.31 2 1
github.com/observerly/iris/pkg/fits/fits.go:63.2,63.17 1 1
github.com/observerly/iris/pkg/fits/fits.go:67.2,78.3 1 1
github.com/observerly/iris/pkg/fits/fits.go:59.31,61.3 1 2
github.com/observerly/iris/pkg/fits/fits.go:63.17,65.3 1 1
github.com/observerly/iris/pkg/fits/fits.go:83.55,98.2 2 1
github.com/observerly/iris/pkg/iris/rggb.go:22.85,34.2 2 10
github.com/observerly/iris/pkg/iris/rggb.go:39.85,40.46 1 7
github.com/observerly/iris/pkg/iris/rggb.go:41.14,42.19 1 3
github.com/observerly/iris/pkg/iris/rggb.go:43.14,44.19 1 1
github.com/observerly/iris/pkg/iris/rggb.go:45.14,46.19 1 1
github.com/observerly/iris/pkg/iris/rggb.go:47.14,48.19 1 1
github.com/observerly/iris/pkg/iris/rggb.go:49.10,50.88 1 1
github.com/observerly/iris/pkg/iris/rggb.go:57.85,61.26 2 2
github.com/observerly/iris/pkg/iris/rggb.go:65.2,86.36 10 2
github.com/observerly/iris/pkg/iris/rggb.go:98.2,98.32 1 2
github.com/observerly/iris/pkg/iris/rggb.go:109.2,109.12 1 2
github.com/observerly/iris/pkg/iris/rggb.go:61.26,63.3 1 32
github.com/observerly/iris/pkg/iris/rggb.go:86.36,87.37 1 16
github.com/observerly/iris/pkg/iris/rggb.go:87.37,94.4 3 128
github.com/observerly/iris/pkg/iris/rggb.go:98.32,99.32 1 32
github.com/observerly/iris/pkg/iris/rggb.go:99.32,106.4 1 512
github.com/observerly/iris/pkg/iris/rggb.go:112.59,115.16 2 1
github.com/observerly/iris/pkg/iris/rggb.go:119.2,121.16 2 1
github.com/observerly/iris/pkg/iris/rggb.go:126.2,128.16 2 1
github.com/observerly/iris/pkg/iris/rggb.go:132.2,132.22 1 1
github.com/observerly/iris/pkg/iris/rggb.go:115.16,117.3 1 0
github.com/observerly/iris/pkg/iris/rggb.go:121.16,123.3 1 0
github.com/observerly/iris/pkg/iris/rggb.go:128.16,130.3 1 0
github.com/observerly/iris/pkg/histogram/histogram.go:18.51,25.47 4 0
github.com/observerly/iris/pkg/histogram/histogram.go:30.2,30.12 1 0
github.com/observerly/iris/pkg/histogram/histogram.go:25.47,28.3 2 0
github.com/observerly/iris/pkg/iris/convolution.go:5.122,16.40 5 128
github.com/observerly/iris/pkg/iris/convolution.go:21.2,21.21 1 128
github.com/observerly/iris/pkg/iris/convolution.go:25.2,25.21 1 128
Expand All @@ -74,9 +54,9 @@ github.com/observerly/iris/pkg/iris/convolution.go:106.2,111.13 5 128
github.com/observerly/iris/pkg/iris/convolution.go:93.19,95.3 1 112
github.com/observerly/iris/pkg/iris/convolution.go:97.19,99.3 1 112
github.com/observerly/iris/pkg/iris/convolution.go:101.36,104.3 2 98
github.com/observerly/iris/pkg/iris/monochrome.go:26.84,39.2 3 8
github.com/observerly/iris/pkg/iris/monochrome.go:41.79,46.16 3 7
github.com/observerly/iris/pkg/iris/monochrome.go:50.2,50.18 1 7
github.com/observerly/iris/pkg/iris/monochrome.go:26.84,39.2 3 10
github.com/observerly/iris/pkg/iris/monochrome.go:41.79,46.16 3 11
github.com/observerly/iris/pkg/iris/monochrome.go:50.2,50.18 1 11
github.com/observerly/iris/pkg/iris/monochrome.go:46.16,48.3 1 0
github.com/observerly/iris/pkg/iris/monochrome.go:53.116,65.32 8 1
github.com/observerly/iris/pkg/iris/monochrome.go:91.2,91.18 1 1
Expand All @@ -86,25 +66,45 @@ github.com/observerly/iris/pkg/iris/monochrome.go:78.3,85.29 5 208
github.com/observerly/iris/pkg/iris/monochrome.go:68.28,69.12 1 6
github.com/observerly/iris/pkg/iris/monochrome.go:74.28,75.9 1 1
github.com/observerly/iris/pkg/iris/monochrome.go:85.29,88.4 2 16
github.com/observerly/iris/pkg/iris/monochrome.go:94.65,101.51 4 5
github.com/observerly/iris/pkg/iris/monochrome.go:105.2,105.47 1 5
github.com/observerly/iris/pkg/iris/monochrome.go:109.2,111.29 2 5
github.com/observerly/iris/pkg/iris/monochrome.go:101.51,103.3 1 1040
github.com/observerly/iris/pkg/iris/monochrome.go:105.47,107.3 1 1040
github.com/observerly/iris/pkg/iris/monochrome.go:114.74,125.51 6 1
github.com/observerly/iris/pkg/iris/monochrome.go:135.2,135.47 1 1
github.com/observerly/iris/pkg/iris/monochrome.go:139.2,141.29 2 1
github.com/observerly/iris/pkg/iris/monochrome.go:125.51,128.30 2 256
github.com/observerly/iris/pkg/iris/monochrome.go:128.30,130.4 1 0
github.com/observerly/iris/pkg/iris/monochrome.go:130.9,132.4 1 256
github.com/observerly/iris/pkg/iris/monochrome.go:135.47,137.3 1 256
github.com/observerly/iris/pkg/iris/monochrome.go:94.65,101.51 4 7
github.com/observerly/iris/pkg/iris/monochrome.go:105.2,105.47 1 7
github.com/observerly/iris/pkg/iris/monochrome.go:109.2,111.29 2 7
github.com/observerly/iris/pkg/iris/monochrome.go:101.51,103.3 1 3418608
github.com/observerly/iris/pkg/iris/monochrome.go:105.47,107.3 1 3418608
github.com/observerly/iris/pkg/iris/monochrome.go:114.74,125.51 6 3
github.com/observerly/iris/pkg/iris/monochrome.go:135.2,135.47 1 3
github.com/observerly/iris/pkg/iris/monochrome.go:139.2,141.29 2 3
github.com/observerly/iris/pkg/iris/monochrome.go:125.51,128.30 2 3417824
github.com/observerly/iris/pkg/iris/monochrome.go:128.30,130.4 1 437549
github.com/observerly/iris/pkg/iris/monochrome.go:130.9,132.4 1 2980275
github.com/observerly/iris/pkg/iris/monochrome.go:135.47,137.3 1 3417824
github.com/observerly/iris/pkg/iris/monochrome.go:144.73,154.51 5 1
github.com/observerly/iris/pkg/iris/monochrome.go:164.2,164.47 1 1
github.com/observerly/iris/pkg/iris/monochrome.go:168.2,170.28 2 1
github.com/observerly/iris/pkg/iris/monochrome.go:154.51,157.26 2 256
github.com/observerly/iris/pkg/iris/monochrome.go:157.26,159.4 1 251
github.com/observerly/iris/pkg/iris/monochrome.go:159.9,161.4 1 5
github.com/observerly/iris/pkg/iris/monochrome.go:164.47,166.3 1 256
github.com/observerly/iris/pkg/histogram/histogram.go:18.51,25.47 4 0
github.com/observerly/iris/pkg/histogram/histogram.go:30.2,30.12 1 0
github.com/observerly/iris/pkg/histogram/histogram.go:25.47,28.3 2 0
github.com/observerly/iris/pkg/iris/rggb.go:22.85,34.2 2 10
github.com/observerly/iris/pkg/iris/rggb.go:39.85,40.46 1 7
github.com/observerly/iris/pkg/iris/rggb.go:41.14,42.19 1 3
github.com/observerly/iris/pkg/iris/rggb.go:43.14,44.19 1 1
github.com/observerly/iris/pkg/iris/rggb.go:45.14,46.19 1 1
github.com/observerly/iris/pkg/iris/rggb.go:47.14,48.19 1 1
github.com/observerly/iris/pkg/iris/rggb.go:49.10,50.88 1 1
github.com/observerly/iris/pkg/iris/rggb.go:57.85,61.26 2 2
github.com/observerly/iris/pkg/iris/rggb.go:65.2,86.36 10 2
github.com/observerly/iris/pkg/iris/rggb.go:98.2,98.32 1 2
github.com/observerly/iris/pkg/iris/rggb.go:109.2,109.12 1 2
github.com/observerly/iris/pkg/iris/rggb.go:61.26,63.3 1 32
github.com/observerly/iris/pkg/iris/rggb.go:86.36,87.37 1 16
github.com/observerly/iris/pkg/iris/rggb.go:87.37,94.4 3 128
github.com/observerly/iris/pkg/iris/rggb.go:98.32,99.32 1 32
github.com/observerly/iris/pkg/iris/rggb.go:99.32,106.4 1 512
github.com/observerly/iris/pkg/iris/rggb.go:112.59,115.16 2 1
github.com/observerly/iris/pkg/iris/rggb.go:119.2,121.16 2 1
github.com/observerly/iris/pkg/iris/rggb.go:126.2,128.16 2 1
github.com/observerly/iris/pkg/iris/rggb.go:132.2,132.22 1 1
github.com/observerly/iris/pkg/iris/rggb.go:115.16,117.3 1 0
github.com/observerly/iris/pkg/iris/rggb.go:121.16,123.3 1 0
github.com/observerly/iris/pkg/iris/rggb.go:128.16,130.3 1 0
Binary file added images/noise.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/noise16.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions pkg/iris/monochrome.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ func (m *MonochromeExposure) Preprocess() (bytes.Buffer, error) {
gray := image.NewGray(bounds)

setPixel := func(gray *image.Gray, x int, y int) {
gray.SetGray(x, y, color.Gray{uint8(m.Raw[x][y])})
gray.SetGray(x, y, color.Gray{uint8(m.Raw[y][x])})
}

utils.DeferForEachPixel(size, func(x, y int) {
Expand All @@ -123,7 +123,7 @@ func (m *MonochromeExposure) ApplyNoiseReduction() (bytes.Buffer, error) {
m.Noise = noise.GetGaussianNoise()

setPixel := func(gray *image.Gray, x int, y int) {
pixel := m.Raw[x][y]
pixel := m.Raw[y][x]

if pixel < uint32(m.Noise) {
gray.SetGray(x, y, color.Gray{Y: 0})
Expand Down
137 changes: 137 additions & 0 deletions pkg/iris/monochrome_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package iris

import (
"fmt"
"image/jpeg"
"os"
"testing"

Expand Down Expand Up @@ -358,3 +359,139 @@ func TestNewMonochromeExposureHistogramGray(t *testing.T) {
t.Errorf("got %q, wanted %q", res[9], 16)
}
}

func TestNewNoiseExtractorGaussianNoisePngImage(t *testing.T) {
f, err := os.Open("../../images/noise.jpeg")

if err != nil {
t.Errorf("Error opening image: %s", err)
}

defer f.Close()

img, err := jpeg.Decode(f)

if err != nil {
t.Errorf("Error decoding image: %s", err)
}

bounds := img.Bounds()

ex := make([][]uint32, bounds.Dy())

for y := 0; y < bounds.Dy(); y++ {
row := make([]uint32, bounds.Dx())
ex[y] = row
}

mono := NewMonochromeExposure(ex, bounds.Dx(), bounds.Dy())

for j := 0; j < bounds.Dy(); j++ {
for i := 0; i < bounds.Dx(); i++ {
r, g, b, _ := img.At(i, j).RGBA()
lum := 0.299*float64(r) + 0.587*float64(g) + 0.114*float64(b)
mono.Raw[j][i] = uint32(lum / 256)
}
}

mono.Preprocess()

// Extract the noise from the image:
bytes, err := mono.ApplyNoiseReduction()

if err != nil {
t.Errorf("Error extracting noise from image: %s", err)
}

// Save the image to the root folder:
f, err = os.Create("noise.jpg")

if err != nil {
t.Errorf("Error creating image: %s", err)
}

defer f.Close()

defer func() {
if err := f.Close(); err != nil {
t.Errorf("Expected the image buffer to be saved successfully, but got %q", err)
}

// Clean up the file after we have finished with the test:
os.Remove("noise.jpg")
}()

_, err = f.Write(bytes.Bytes())

if err != nil {
t.Errorf("Error writing image: %s", err)
}
}

func TestNewNoiseExtractorGaussianNoise16PngImage(t *testing.T) {
f, err := os.Open("../../images/noise16.jpeg")

if err != nil {
t.Errorf("Error opening image: %s", err)
}

defer f.Close()

img, err := jpeg.Decode(f)

if err != nil {
t.Errorf("Error decoding image: %s", err)
}

bounds := img.Bounds()

ex := make([][]uint32, bounds.Dy())

for y := 0; y < bounds.Dy(); y++ {
row := make([]uint32, bounds.Dx())
ex[y] = row
}

mono := NewMonochromeExposure(ex, bounds.Dx(), bounds.Dy())

for j := 0; j < bounds.Dy(); j++ {
for i := 0; i < bounds.Dx(); i++ {
r, g, b, _ := img.At(i, j).RGBA()
lum := 0.299*float64(r) + 0.587*float64(g) + 0.114*float64(b)
mono.Raw[j][i] = uint32(lum / 256)
}
}

mono.Preprocess()

// Extract the noise from the image:
bytes, err := mono.ApplyNoiseReduction()

if err != nil {
t.Errorf("Error extracting noise from image: %s", err)
}

// Save the image to the root folder:
f, err = os.Create("noise16.jpg")

if err != nil {
t.Errorf("Error creating image: %s", err)
}

defer f.Close()

defer func() {
if err := f.Close(); err != nil {
t.Errorf("Expected the image buffer to be saved successfully, but got %q", err)
}

// Clean up the file after we have finished with the test:
os.Remove("noise16.jpg")
}()

_, err = f.Write(bytes.Bytes())

if err != nil {
t.Errorf("Error writing image: %s", err)
}
}

0 comments on commit 4be7d0a

Please sign in to comment.