写一段matlab代码画出一个图像的灰度直方图(不能用MATLAB自带的imhist函数),并作直方图均衡化处理。
时间: 2023-03-27 19:03:05 浏览: 129
好的,以下是我的回答:
```
% 假设图像矩阵为img
% 计算灰度直方图
histogram = zeros(256, 1);
for i = 1:size(img, 1)
for j = 1:size(img, 2)
pixel_value = img(i, j);
histogram(pixel_value + 1) = histogram(pixel_value + 1) + 1;
end
end
% 作直方图均衡化处理
num_pixels = size(img, 1) * size(img, 2);
cumulative_histogram = cumsum(histogram) / num_pixels;
equalized_img = uint8(255 * cumulative_histogram(double(img) + 1));
% 绘制灰度直方图
bar(histogram);
title('灰度直方图');
% 绘制均衡化后的直方图
figure;
bar(hist(equalized_img(:), 256));
title('均衡化后的直方图');
```
希望我的回答能够帮到您!
相关问题
写一段matlab代码画出一个图像的灰度直方图并且不能使用MATLAB自带的imhist函数,并作直方图均衡化处理。
好的,我可以回答这个问题。以下是代码:
img = imread('image.jpg'); % 读取图像
gray_img = rgb2gray(img); % 转换为灰度图像
[m, n] = size(gray_img); % 获取图像大小
% 计算灰度直方图
histogram = zeros(256, 1);
for i = 1:m
for j = 1:n
pixel_value = gray_img(i, j);
histogram(pixel_value + 1) = histogram(pixel_value + 1) + 1;
end
end
% 画出灰度直方图
bar(histogram);
% 直方图均衡化处理
cdf = cumsum(histogram) / (m * n);
equalized_img = uint8(255 * cdf(gray_img + 1));
% 显示均衡化后的图像
imshow(equalized_img);
希望这个代码能够帮到您。
写一段代码画出一个图像的灰度直方图(不能用MATLAB自带的imhist函数),并作直方图均衡化处理。
以下是一段画出图像灰度直方图并进行直方图均衡化处理的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 256
#define HEIGHT 256
int main()
{
FILE *fp;
unsigned char image[WIDTH][HEIGHT];
int hist[WIDTH] = {};
int cdf[WIDTH] = {};
int min_cdf = WIDTH * HEIGHT;
int i, j;
// 读取图像
fp = fopen("lena.raw", "rb");
fread(image, sizeof(unsigned char), WIDTH * HEIGHT, fp);
fclose(fp);
// 计算灰度直方图
for (i = ; i < WIDTH; i++) {
for (j = ; j < HEIGHT; j++) {
hist[image[i][j]]++;
}
}
// 计算累积分布函数
for (i = ; i < WIDTH; i++) {
if (i == ) {
cdf[i] = hist[i];
} else {
cdf[i] = cdf[i - 1] + hist[i];
}
if (cdf[i] < min_cdf && hist[i] > ) {
min_cdf = cdf[i];
}
}
// 直方图均衡化
for (i = ; i < WIDTH; i++) {
for (j = ; j < HEIGHT; j++) {
image[i][j] = (unsigned char)((cdf[image[i][j]] - min_cdf) * 255. / (WIDTH * HEIGHT - min_cdf));
}
}
// 输出均衡化后的图像和直方图
fp = fopen("lena_eq.raw", "wb");
fwrite(image, sizeof(unsigned char), WIDTH * HEIGHT, fp);
fclose(fp);
fp = fopen("hist.txt", "w");
for (i = ; i < WIDTH; i++) {
fprintf(fp, "%d\n", hist[i]);
}
fclose(fp);
return ;
}
```
这段代码读取名为"lena.raw"的灰度图像,计算出其灰度直方图,并进行直方图均衡化处理,最终输出均衡化后的图像和直方图。
阅读全文