Skip to content

Commit d16f8c1

Browse files
committedDec 8, 2018
Update PartialColorJudge.cpp
1 parent d6a6ddc commit d16f8c1

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed
 

‎PartialcolorJudge.cpp

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
void RGB2LAB(Mat &rgb, Mat &Lab) {
2+
//RGB 转XYZ
3+
Mat XYZ(rgb.size(), rgb.type());
4+
Mat_ <Vec3b>::iterator beginRGB = rgb.begin<Vec3b>();
5+
Mat_ <Vec3b>::iterator endRGB = rgb.end<Vec3b>();
6+
Mat_ <Vec3b>::iterator beginXYZ = XYZ.begin<Vec3b>();
7+
int shift = 22;
8+
for (; beginRGB != endRGB; beginRGB++, beginXYZ++)
9+
{
10+
(*beginXYZ)[0] = ((*beginRGB)[0] * 199049 + (*beginRGB)[1] * 394494 + (*beginRGB)[2] * 455033 + 524288) >> (shift - 2);
11+
(*beginXYZ)[1] = ((*beginRGB)[0] * 75675 + (*beginRGB)[1] * 749900 + (*beginRGB)[2] * 223002 + 524288) >> (shift - 2);
12+
(*beginXYZ)[2] = ((*beginRGB)[0] * 915161 + (*beginRGB)[1] * 114795 + (*beginRGB)[2] * 18621 + 524288) >> (shift - 2);
13+
}
14+
//XYZ转LAB
15+
int LabTab[1024];
16+
for (int i = 0; i < 1024; i++)
17+
{
18+
if (i>9)
19+
LabTab[i] = (int)(pow((float)i / 1020, 1.0F / 3) * (1 << shift) + 0.5);
20+
else
21+
LabTab[i] = (int)((29 * 29.0 * i / (6 * 6 * 3 * 1020) + 4.0 / 29) * (1 << shift) + 0.5);
22+
}
23+
const int ScaleLC = (int)(16 * 2.55 * (1 << shift) + 0.5);
24+
const int ScaleLT = (int)(116 * 2.55 + 0.5);
25+
const int HalfShiftValue = 524288;
26+
beginXYZ = XYZ.begin<Vec3b>();
27+
Mat_<Vec3b>::iterator endXYZ = XYZ.end<Vec3b>();
28+
Lab.create(rgb.size(), rgb.type());
29+
Mat_<Vec3b>::iterator beginLab = Lab.begin<Vec3b>();
30+
for (; beginXYZ != endXYZ; beginXYZ++, beginLab++)
31+
{
32+
int X = LabTab[(*beginXYZ)[0]];
33+
int Y = LabTab[(*beginXYZ)[1]];
34+
int Z = LabTab[(*beginXYZ)[2]];
35+
int L = ((ScaleLT * Y - ScaleLC + HalfShiftValue) >> shift);
36+
int A = ((500 * (X - Y) + HalfShiftValue) >> shift) + 128;
37+
int B = ((200 * (Y - Z) + HalfShiftValue) >> shift) + 128;
38+
(*beginLab)[0] = L;
39+
(*beginLab)[1] = A;
40+
(*beginLab)[2] = B;
41+
}
42+
}
43+
44+
//true代表存在偏色,false代表不存在偏色
45+
bool PartialcolorJudge(Mat &imgLab) {
46+
Mat_<Vec3b>::iterator begin = imgLab.begin<Vec3b>();
47+
Mat_<Vec3b>::iterator end = imgLab.end<Vec3b>();
48+
float suma = 0, sumb = 0;
49+
for (; begin != end; begin++) {
50+
suma += (*begin)[1];//a
51+
sumb += (*begin)[2];//b
52+
}
53+
int MN = imgLab.rows * imgLab.cols;
54+
double Da = suma / MN - 128; //归一化到[-128,127]
55+
double Db = sumb / MN - 128; //同上
56+
//求平均色度
57+
double D = sqrt(Da * Da + Db * Db);
58+
begin = imgLab.begin<Vec3b>();
59+
double Ma = 0, Mb = 0;
60+
//求色度中心距
61+
for (; begin != end; begin++) {
62+
Ma += abs((*begin)[1] - 128 - Da);
63+
Mb += abs((*begin)[2] - 128 - Db);
64+
}
65+
Ma = Ma / MN;
66+
Mb = Mb / MN;
67+
double M = sqrt(Ma * Ma + Mb * Mb);
68+
float K = float(D / M);
69+
if (K >= 1.5) {
70+
return true;
71+
}
72+
else {
73+
return false;
74+
}
75+
}

‎README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
- ImageDataIncrease.cpp 常见的图片数据扩充,包括一些PS算法 具体为旋转,添加高斯,椒盐噪声,增加老照片效果,增加和降低图像饱和度,对原图缩放,亮度增强,对比度增强,磨皮美白,偏色矫正,同态滤波,过曝,灰度化,轮换通道,图像错切,运动模糊,钝化蒙版,PS滤镜算法之球面化 (凸出和凹陷效果)
55
- HDR.cpp 对《Adaptive Local Tone Mapping Based on Retinex for High Dynamic Range Images》C++朴素实现,无优化,详情请查看https://blog.csdn.net/just_sort/article/details/84030723
66
- Adaptive Logarithmic Mapping For Displaying High Contrast Scenes.cpp 《Adaptive Logarithmic Mapping For Displaying High Contrast Scenes》c++朴素实现 ,详情请看:https://blog.csdn.net/just_sort/article/details/84066390
7-
87
- Single Image Haze Removal Using Dark Channel Prior.cpp 《Single Image Haze Removal Using Dark Channel Prior》论文阅读及复现,详情请看:https://blog.csdn.net/just_sort/article/details/84110518
98
- Local Color Correction.cpp C++复现了《Local Color Correction》论文,详情请参考:https://blog.csdn.net/just_sort/article/details/84539295
9+
- PartialcolorJudge.cpp C++复现了《基于图像分析的偏色检测及颜色校正方法》论文,实现快速判断图片是否存在偏色,详情请看:https://blog.csdn.net/just_sort/article/details/84897976
1010

1111

0 commit comments

Comments
 (0)