Skip to content

Commit

Permalink
improve image coloring
Browse files Browse the repository at this point in the history
  • Loading branch information
lifeart committed May 10, 2023
1 parent b9874d8 commit e86722d
Show file tree
Hide file tree
Showing 7 changed files with 57 additions and 9 deletions.
6 changes: 3 additions & 3 deletions demo/index.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions dist/index.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions dist/types/plugins/utils/image-contrast.d.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export declare function contrastImage(imgData: ImageData, refContrast: number): ImageData;
export declare function normalizeContrast(image: ImageData): ImageData;
2 changes: 2 additions & 0 deletions dist/types/plugins/utils/image-grayscale.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export declare function vFromRGB(r: number, g: number, b: number): number;
export declare function grayscale(image: ImageData): ImageData;
25 changes: 25 additions & 0 deletions src/plugins/utils/image-contrast.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { vFromRGB } from "./image-grayscale";

export function contrastImage(imgData: ImageData, refContrast: number) {
//input range [-100..100]
const d = imgData.data;
Expand All @@ -11,3 +13,26 @@ export function contrastImage(imgData: ImageData, refContrast: number) {
}
return imgData;
}


export function normalizeContrast(image: ImageData) {
const data = image.data;
let max = 0;
let min = 255;

// Find the max and min luminance values
for (let i = 0; i < data.length; i += 4) {
let luminance = vFromRGB(data[i], data[i + 1], data[i + 2]);
max = Math.max(max, luminance);
min = Math.min(min, luminance);
}

// Normalize the contrast
for (let i = 0; i < data.length; i += 4) {
data[i] = 255 * (data[i] - min) / (max - min); // Red
data[i + 1] = 255 * (data[i + 1] - min) / (max - min); // Green
data[i + 2] = 255 * (data[i + 2] - min) / (max - min); // Blue
}

return image;
}
16 changes: 16 additions & 0 deletions src/plugins/utils/image-grayscale.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
export function vFromRGB(r: number, g: number, b: number) {
return 0.299 * r + 0.587 * g + 0.114 * b;
}

export function grayscale(image: ImageData) {
let d = image.data;
for (let i = 0; i < d.length; i += 4) {
let r = d[i];
let g = d[i + 1];
let b = d[i + 2];
let v = vFromRGB(r, g, b)
d[i] = d[i + 1] = d[i + 2] = v;
}

return image;
}
10 changes: 7 additions & 3 deletions src/plugins/utils/sobel-operator.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { vFromRGB } from "./image-grayscale";

let fId = 0;
export class HistogramFrame extends Array<number> {
id: number;
Expand All @@ -16,9 +18,11 @@ export function sobelOperator(imgData: ImageData) {
// convert to grayscale
let ii = 0;
for (let i = 0; i < imgData.data.length; i += 4) {
let gray =
(imgData.data[i] + imgData.data[i + 1] + imgData.data[i + 2]) / 3;
grayscale[ii] = gray;
grayscale[ii] = vFromRGB(
imgData.data[i],
imgData.data[i + 1],
imgData.data[i + 2]
);
ii++;
}

Expand Down

0 comments on commit e86722d

Please sign in to comment.