c - 图像直方图均衡化
问题描述
我有这个问题?如何在C中对图像进行直方图均衡?我写了这段代码,但我没有得到正确的结果。
void histogram(unsigned char image_in [64][64],unsigned char image_out [64][64], unsigned long hist[256],unsigned long eHist[256],float cdf[256]) {
#define lines 64
#define columns 64
int i,j;
int pixels = lines*columns;
// original histogram
for (i = 1; i < 256; i++) {
hist[i]=0;
}
for (i = 0; i < lines; i++) {
for (j = 0; j < columns; j++) {
hist[image_in[i][j]]++;
}
}
// Cumulative Distribution Function
float cdfmax=256, cdfmin=1;
for (i = 1; i < 256; i++) {
cdf[i] = 0;
for (i = 1; i < 256; i++) {
cdf[i] += hist[i];
}
}
// Equalized Histogram
for (i = 1; i < 256; i++) {
eHist[i] = ((cdf[i]-cdfmin)/((lines*columns)-cdfmin))*255;
}
// Final Image
for (i = 0; i < lines; i++) {
for (j = 0; j < columns; j++) {
image_out[i][j] = cdf[image_in[i][j]]*255;
}
}
}
这是我的主要功能:
void main(void) {
FILE *fp;
fp = fopen("../lena_eye.raw","rb");
int i,j;
for (i = 0; i < 64; i++) {
for (j = 0; j < 64; j++) {
image_in[i][j] = getc(fp);
}
}
fclose(fp);
histogram(image_in, image_out, hist, eHist,cdf);
}
我收到的结果可以在图像中看到。
[1]: https://i.stack.imgur.com/zjhp9.png -image_in
[2]: https://i.stack.imgur.com/itDNE.png -Hist
[3]: https:// i.stack.imgur.com/74Ulm.png -eHist
[4]:https: //i.stack.imgur.com/qFwUw.png -image_out
解决方案
这段代码是错误的:
for (i = 1; i < 256; i++) {
cdf[i] = 0;
for (i = 1; i < 256; i++) {
cdf[i] += hist[i];
}
}
内循环改变了 的值i
,弄乱了外循环。你想写的是这样的:
for (i = 0; i < 256; i++) {
cdf[i] = 0;
for (j = 0; j <= i; j++) {
cdf[i] += hist[j];
}
}
...但写起来会更简单:
cdf[0] = hist[0];
for (i = i; i < 256; i++) {
cdf[i] = cdf[i-1] + hist[i];
}
此外,当您计算直方图和均衡直方图时,您的循环从 1 开始,它们应该从 0 开始。
推荐阅读
- stripe-payments - 条纹嵌入形式:更改邮政编码占位符文本?
- android - 如何在 ListView 下方显示另一个布局
- mysql - 当我试图执行改变脚本时。在 MySql 中获取连接丢失错误
- salesforce-lightning - 闪电组件的全局动作类型在闪电社区的链接类型[磁贴菜单]下不可见
- laravel - Laravel Cashier 使用 Stripe 的 newSubscription 设置质量
- javascript - NodeJS Html-pdf:fs.readfilesync 如何异步/等待
- javascript - 如何在 AngularJS 中应用数组中的 CSS 代码?
- apache - 无法使用 Apache poi 在 excel 标题上设置图像
- javascript - 用于刻度带的 D3 自定义反转功能
- c - 有没有办法使用 C 代码验证正则表达式模式的语法