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"
|
||||
)
|
||||
|
||||
type Pixel struct {
|
||||
R int
|
||||
G int
|
||||
B int
|
||||
A int
|
||||
}
|
||||
func ImageToPixles(path string) [][]Pixel {
|
||||
image.RegisterFormat("png", "png", png.Decode, png.DecodeConfig)
|
||||
file, err := os.Open(path)
|
||||
check(err)
|
||||
defer file.Close()
|
||||
return getPixles(file)
|
||||
mat := getPixles(file)
|
||||
return squashMatrix(mat)
|
||||
}
|
||||
|
||||
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