added squash
This commit is contained in:
parent
0579adeb80
commit
612e4a29be
|
@ -1,12 +0,0 @@
|
||||||
package image
|
|
||||||
|
|
||||||
//func getBighnessMap(map [][]Pixel) [][]float64{}
|
|
||||||
|
|
||||||
func (pix Pixel) Brightness() float64 {
|
|
||||||
R := float64(pix.R)
|
|
||||||
G := float64(pix.G)
|
|
||||||
B := float64(pix.B)
|
|
||||||
A := float64(pix.A)
|
|
||||||
brightness := (0.2126*R + 0.7152*G + 0.0722*B) /255
|
|
||||||
return brightness * (A / 255)
|
|
||||||
}
|
|
|
@ -7,18 +7,13 @@ import (
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Pixel struct {
|
|
||||||
R int
|
|
||||||
G int
|
|
||||||
B int
|
|
||||||
A int
|
|
||||||
}
|
|
||||||
func ImageToPixles(path string) [][]Pixel {
|
func ImageToPixles(path string) [][]Pixel {
|
||||||
image.RegisterFormat("png", "png", png.Decode, png.DecodeConfig)
|
image.RegisterFormat("png", "png", png.Decode, png.DecodeConfig)
|
||||||
file, err := os.Open(path)
|
file, err := os.Open(path)
|
||||||
check(err)
|
check(err)
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
return getPixles(file)
|
mat := getPixles(file)
|
||||||
|
return squashMatrix(mat)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPixles(f io.Reader) [][]Pixel {
|
func getPixles(f io.Reader) [][]Pixel {
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package image
|
||||||
|
|
||||||
|
//func getBighnessMap(map [][]Pixel) [][]float64{}
|
||||||
|
|
||||||
|
func (pix Pixel) Brightness() float64 {
|
||||||
|
R := float64(pix.R)
|
||||||
|
G := float64(pix.G)
|
||||||
|
B := float64(pix.B)
|
||||||
|
A := float64(pix.A)
|
||||||
|
brightness := (0.2126*R + 0.7152*G + 0.0722*B) /255
|
||||||
|
return brightness * (A / 255)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Pixel struct {
|
||||||
|
R int
|
||||||
|
G int
|
||||||
|
B int
|
||||||
|
A int
|
||||||
|
}
|
||||||
|
|
||||||
|
func averagePixel(arr []Pixel) Pixel {
|
||||||
|
l := len(arr)
|
||||||
|
var sumR, sumG, sumB, sumA int
|
||||||
|
for _, v := range arr {
|
||||||
|
sumR += v.R
|
||||||
|
sumG += v.G
|
||||||
|
sumB += v.B
|
||||||
|
sumA += v.A
|
||||||
|
}
|
||||||
|
|
||||||
|
return Pixel{sumR / l, sumG / l, sumB / l, sumA / l}
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
package image
|
||||||
|
|
||||||
|
var heigthCell int = 2
|
||||||
|
var widthCell int = 1
|
||||||
|
|
||||||
|
func reFormatVertical(matrix [][]Pixel ) [][]Pixel {
|
||||||
|
heightMatrix := len(matrix)
|
||||||
|
widthMatrix := len(matrix[0])
|
||||||
|
newMatrix := makePixleMatrix(widthMatrix, heightMatrix)
|
||||||
|
for y := range matrix {
|
||||||
|
for x := range matrix[y] {
|
||||||
|
newMatrix[x][y] = matrix[y][x]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newMatrix
|
||||||
|
}
|
||||||
|
|
||||||
|
func splitArray(arr []Pixel, size int) [][]Pixel {
|
||||||
|
var out [][]Pixel
|
||||||
|
var j int
|
||||||
|
for i := 0; i < len(arr); i += size {
|
||||||
|
j += size
|
||||||
|
if j > len(arr) {
|
||||||
|
j = len(arr)
|
||||||
|
}
|
||||||
|
out = append(out, arr[i:j])
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func squashMatrix(pix [][]Pixel) [][]Pixel{
|
||||||
|
pix = reFormatVertical(pix)
|
||||||
|
var tensor [][][]Pixel
|
||||||
|
for _, arr := range pix {
|
||||||
|
tensor = append(tensor, splitArray(arr, heigthCell))
|
||||||
|
}
|
||||||
|
|
||||||
|
out := makePixleMatrix(len(tensor[0]), len(tensor))
|
||||||
|
|
||||||
|
for x := range tensor {
|
||||||
|
for y := range tensor[x] {
|
||||||
|
p := averagePixel(tensor[x][y])
|
||||||
|
out[y][x] = p
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type cord struct {
|
||||||
|
x int
|
||||||
|
y int
|
||||||
|
}
|
||||||
|
|
||||||
|
func makePixleMatrix(height int, width int) [][]Pixel {
|
||||||
|
arr := make([][]Pixel, height)
|
||||||
|
for i := range arr {
|
||||||
|
arr[i] = make([]Pixel, width)
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
}
|
Loading…
Reference in New Issue