用c语言实现图像二值化原理,图像二值化实验报告c.doc

图像二值化实验报告c

图像二值化实验报告c

篇一:图像处理实验报告

1常用MATLAB图像处理命令

一、实验目的

1、熟悉并掌握MATLAB工具的使用;

2、实现图像的读取、显示、代数运算和简单变换。

二、实验环境

MATLAB2012a版本、WIN7计算机

三、常用函数

? 读写图像文件

1 imread

imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif') 2 imwrite

imwrite函数用于写入图像文件,如:imwrite(a,'e:\w02.tif',’tif’) 3 imfinfo

imfinfo函数用于读取图像文件的有关信息,如:imfinfo('e:\w01.tif') ? 图像的显示

1 image

image函数是MATLAB提供的最原始的图像显示函数,如: a=[1,2,3,4;4,5,6,7;8,9,10,11,12];

image(a);

2 imshow

imshow函数用于图像文件的显示,如:

i=imread('e:\w01.tif');

imshow(i);

title(‘原图像’)%加上图像标题

3 colorbar

colorbar函数用显示图像的颜色条,如:

i=imread('e:\w01.tif');

imshow(i);

colorbar;

4 figure

figure函数用于设定图像显示窗口,如:figure(1); /figure(2); 5 subplot

把图形窗口分成多个矩形部分,每个部分可以分别用来进行显示。

Subplot(m,n,p)分成m*n个小窗口,在第p个窗口中创建坐标轴为当前坐标轴,用于显示图形。

6 plot

绘制二维图形

plot(y)

Plot(x,y)xy可以是向量、矩阵。

? 图像类型转换

1 rgb2gray

把真彩图像转换为灰度图像

i=rgb2gray(j)

2 im2bw

通过阈值化方法把图像转换为二值图像

I=im2bw(j,level)

Level表示灰度阈值,取值范围0~1(即0.n),表示阈值取自原图像灰度范围的n%

3 imresize

改变图像的大小

I=imresize(j,[m n])将图像j大小调整为m行n列

? 图像运算

1 imadd

两幅图像相加,要求同样大小,同种数据类型

Z=imadd(x,y)表示图像x+y

2 imsubstract

两幅图像相减,要求同样大小,同种数据类型

Z=imsubtract(x,y) 表示图像x-y

3 immultiply

Z=immultiply(x,y) 表示图像x*y

4 imdivide

Z=imdivide(x,y) 表示图像x/y

四、心得体会

学习了matlab中基本的图像处理命令,为以后图像处理打下了较好的基础。

2、对图像灰度分布的分析和直方图均衡

1、实验目的

(1)理解灰度分布直方图、累积灰度分布函数的概念,图像二值化的概念。

(2)学习用matlab编程计算图像直方图,累积分布函数并进行初步分析。

(3)深入理解灰度分布直方图的意义,并根据灰度直方图进行简单图像增强——直方图均衡。

(4)改进直方图均衡算法,进行直方图分段均衡并进行分析。

2、编程实现

close all;clear;clc;

%% 读入图像并转换为灰度图,显示

I=imread('E:\photos\109NIKON\e1.JPG');

figure(1);

imshow(I);

J=rgb2gray(I);

figu(转载自:www.hnBoX 博 旭范文 网:图像二值化实验报告c)re(2);

imshow(J);

one_or_zero=(J>128);

figure(3)

imshow(one_or_zero)

%% 对原始灰度图的分析

[m,n]=size(J); %图片的维数

note=zeros(1,256);%统计对应某灰度值图像点数 for i=1:m

for j=1:n

note(J(i,j)+1)=note(J(i,j)+1)+1;%256色是不是0—255? end

end

figure(4)

stem(note); %灰度分布直方图 (imhist函数可实现)sum_note=zeros(1,256);

sume_note(1)=note(1);

for i=2:256

sum_note(i)=sum_note(i-1)+note(i);

end

figure(5)

plot(sum_note) %累积分布图

axis([0 256 0 m*n])

grid on

% %% 图像灰度映射关系的确

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像二值化是一种常用的图像处理技术,通过将图像中的像素按照灰度值进行分类,将灰度值相近的像素合并,使得图像变得更加清晰。腐蚀是一种常用的图像处理技术,通过将图像中的像素按照某种规则进行去除,使得图像变得更加简单。 下面是一个使用C语言实现图像二值化和腐蚀的代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> #define WIDTH 640 #define HEIGHT 480 // 定义图像数据类型 typedef unsigned char pixel; // 定义一个图像结构体 typedef struct { pixel *data; int width; int height; } image; // 计算一个像素到左上角的距离 int distance(int x, int y, int width, int height) { return sqrt((x - (width - 1)) * (x - (width - 1)) + (y - (height - 1)) * (y - (height - 1))); } // 二值化函数 void binary(image *img) { int i, j; for (i = 1; i < img->height - 1; i++) { for (j = 1; j < img->width - 1; j++) { if (img->data[i * img->width + j] < img->data[(i - 1) * img->width + j] || img->data[i * img->width + j] < img->data[i * img->width + (j - 1)] || img->data[i * img->width + j] < img->data[(i + 1) * img->width + j] || img->data[i * img->width + j] < img->data[(i + 1) * img->width + (j + 1)]) { img->data[i * img->width + j] = 255; // 将该像素设为白色 } else { img->data[i * img->width + j] = 0; // 将该像素设为黑色 } } } } // 腐蚀函数 void erosion(image *img) { int i, j; for (i = 0; i < img->height; i++) { for (j = 0; j < img->width; j++) { if (img->data[i * img->width + j] == 255) { // 如果当前像素为白色(非背景) int x = i - 1; // 向左移动一个像素的位置(不包括当前位置) int y = j - 1; // 向下移动一个像素的位置(不包括当前位置) while (x >= 0 && y >= 0 && img->data[x * img->width + y] == 255) { // 如果向左和向下移动的像素也为白色(非背景)则去掉这个区域中的像素 img->data[(i + x) * img->width + (j + y)]; // 将黑色值填充进来,这里是临时保存区,会根据需求覆盖原始图像数据或覆盖在新的二进制图像上。替换像素的值可能会覆盖到一些不该覆盖的位置,请注意谨慎处理。在这里只简单使用了0替代白色。可能的结果是去除了一些原本不应该去除的区域。这个代码仅供参考,可能需要根据实际需求进行修改。注意:在处理图像数据时,一定要小心不要覆盖到不应该覆盖的位置。如果需要覆盖原始图像数据,请使用malloc分配新的内存空间。在释放内存时,需要使用free释放。此外,请注意C语言中的指针和内存管理。在实际编程中,应该更加小心地处理这些问题。对于需要更复杂的图像处理任务,可能需要使用专门的库或工具。如果可能的话,可以考虑使用Python等高级语言进行图像处理。但是,C语言在某些情况下仍然是非常有用的工具,特别是在需要与硬件交互或需要优化性能的情况下。希望这个示例代码能够帮助你开始使用C语言进行图像处理。如果你有任何问题或需要进一步的帮助,请随时提问。祝你编程愉快!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值