基于MATLAB的数字图像处理系统GUI界面设计

基于MATLAB的数字图像处理系统GUI界面设计

图像读入

  • 从图形文件中读入图像 imread

Syntax: A = imread(filename, fmt)

filename:指定的灰度或彩色图像文件的完整路径和文件名。

fmt:指定图形文件的格式所对应的标准扩展名。如果imread没有找到filename所制定的文件,会尝试查找一个名为filename.fmt的文件。

A:包含图像矩阵的矩阵。对于灰度图像,它是一个M行N列的矩阵。如果文件包含 RGB真彩图像,则是m*n*3的矩阵。

  • 对于索引图像,格式[X, map] = imread(filename, fmt)

X:图像数据矩阵。

MAP:颜色索引表

图像的显示

  • imshow函数:显示工作区 或图像文件中的图像
  • Syntax:

imshow(I) %I是要现实的灰度图像矩阵

imshow(I,[low high],param1, val1, param2, val2,...) %I是要现实的灰度图像矩阵,指定要显示的灰度范围,后面的参数指定显示图像的特定参数

imshow(RGB)

imshow(BW)

imshow(X,map) %map颜色索引表

imshow(filename)

himage = imshow(...)

  • 操作:读取并显示图像

I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读取图像数据

imshow(I);%显示原图像


图像增强

一.图像的全局描述

直方图(Histogram):是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。

图像直方图(Image Histogram):是表示数字图像中亮度分布的直方图,用来描述图象灰度值,标绘了图像中每个亮度值的像素数。

灰度直方图:是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。描述了一幅图像的灰度级统计信息。是一个二维图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的次数或概率。

归一化直方图:直接反应不同灰度级出现的比率。纵坐标表示具有各个灰度级别的像素在图像中出现的概率。

图像的灰度直方图:是一个离散函数,表示图像每一灰度级与该灰度级出现概率的对应关系。

图像的灰度直方图运算: imhist()函数,其横坐标表示像素的灰度级别,纵坐标为像素点的个数。

  • Imhist函数=Display histogram of image data显示灰度直方图的函数
  • Syntax:
  1. imhist(I) % I为要计算的灰度直方图图像
  2. imhist(I, n) % n指定的灰度级的数目,表示所有灰度级均匀分布在n个小区间内。
  3. imhist(X, map)
  4. [counts,x] = imhist(...) %counts直方图数据向量。counts(i)第i个灰度区间中的像素数目。x是保存了对应的灰度小区间的向量。

注意:若调用时不接受这个函数的返回值,则直接显示直方图;在得这些返回数据之后,也可以使用stem(x,counts)手绘直方图。

  • 例1:显示某一图像的灰度直方图

I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读入图像

imhist(I) %显示图像的灰度直方图

  • 例2:显示原图像和图像的灰度直方图

I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读入图像

figure;

imshow(I); %显示原始图像

title('source');

figure;

imhist(I); %显示图像的灰度直方图

title('graph');

注意:这里显示的是未经归一化的灰度直方图,纵轴表示图像中所有像素取到某一特定灰度值的次数,横轴表示所有灰度值。

  • 例3:归一化直方图

I=imread('C:\Users\fanjinfei\Desktop\baby.bmp'); %读入原图像

figure; %打开新窗口

[M,N]=size(I); %计算图像大小

[counts,x] = imhist(I,32) ; %计算有32个小区间的灰度直方图

counts=counts/M/N; %计算归一化灰度直方图各区间的值

stem(x,counts) %绘制归一化直方图

注意:counts保存了落入每个区间的像素个数.

图像归一化:就是将图像转换成唯一的标准形式,消除同类图像不同变形体之间的外观差异。

二.直方图均衡化

目的:通过某种灰度映射,使输入图像转换为在每个灰度级上都具有近似相同的像素点数的输出图像。(输出的直方图均匀)

结果:使图像具有较高的对比度和较大的动态范围。

  • Histeq函数:Enhance contrast using histogram equalization直方图均衡化
  • Syntax:[J, T] = histeq(I) %I是原始图像;J是直方均衡化的输出图像,T是变换矩阵
  • 例:利用直方图均衡化来实现图像的灰度归一化。Matlab的实现:

I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读入图像

I=im2double(I);

%对比度变大的图像

I1=2*I-55/255;

subplot(4,4,1);

imshow=(I1);

subplot(4,4,2);

imhist=(I1);

subplot(4,4,3);

imshow=(histeq(I1));

subplot(4,4,4);

imhist=(histeq(I1));







一.滤波操作:【相关函数imfilter和fspecial】

1.函数imfilter:完成滤波操作。

  • 函数原型:g=imfilter(f,w,option1,option2,.....)
  • 参数:

f:进行滤波操作的图像;

w:滤波操作使用的模版,为一个二维数组;

option1,option2,...:可选项。

返回值:g为滤波后输出的图像。

【其中可选项:

  1. 边界选项:采用固定值填充虚拟边界,会使边缘附近产生梯度

‘replicate’:填充虚拟边界的内容总是重复与它最近的边缘像素。

  1. 尺寸选项:由于滤波中填充了边界,有必要指定输出图像g的大小。
  2. 模式选项:滤波过程是相关还是卷积。

‘corr’:相关

‘conv’:卷积】

  • 线性滤波过程

f=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读入图像

figure;

imshow(f);

w=[1 1 1 ;1 1 1;1 1 1;1 1 1]/9

g=imfilter(f,w,'corr','replicate');%l滤波

figure;

figure,imshow(g);



2.函数fspecial:为我们创建一些预定义的2维滤波器,直接供函数imfilter使用。

  • 调用格式:h=fspecial(type,parameters)
  • 参数:

type:指定滤波器类型。如’average’:平均模版

parameters:可选项。

返回值:h为特定滤波器。

  • 举例:
  1. h=fspecial(‘average’,hsize) %返回一个大小为hsize的平均模板滤波器。
  2. h=fspecial(‘disk’,radius) %返回一个大小为半径为radius的圆形平均模板。
  3. h=fspecial(‘gaussian’,hsize,sigma) %返回一个大小为hsize,标准差sigma的高斯低通滤波器。
  4. h=fspecial(‘sobel’) %返回一个加强水平边缘竖直梯度算子。







subplot=Create axes in tiled positions建立坐标轴

Syntax:subplot(m,n,p)

im2double=Convert image to double precision将图像转换成双精度

Syntax:

I2 = im2double(I)

RGB2 = im2double(RGB)

I = im2double(BW)

X2 = im2double(X,'indexed')








注意:


I=imread('C:\Users\fanjinfei\Desktop\picture.png');%读取图像数据

n=length(I);

figure;

imshow('I');%显示原图像




%产生噪声图像

theta_noise=15;%噪声方差(可设为其他值)-------------------------------------------

%noise_sig_truth = 20; % sigma_n used in the paper. This parameter is adjusted by the user.

noise_mu = 0;

noise=randn(size(I)) .* theta_noise + noise_mu;

Inoise=double(I) + noise;

figure;

imshow(Inoise,[]);%显示带噪图像

%小波滤波器选择 这个是调用滤波器函数,但是仿真出错

qmf=MakeONFilter('Daubechies',8);%Daubechies8小波(可设为其他小波)-----------------

L=5;%分解层数=log2(n)-L

[InoiseNorm,coef] = NormNoise2(Inoise,qmf);%归一化,这个一直出现问题是怎么回事?

wc=FWT2_PO(InoiseNorm,L,qmf);%这个也没有

%--------------------------VisuShrink方法-----------------------------------------

%wc = MultiVisu2(wc,L);

%---------------------------------------------------------------------------------


%--------------------------SUREShrink方法-----------------------------------------

wc = MultiSURE2(wc,L);


图像去噪

canny边缘检测

I=imread('lena.bmp'); %读灰度图lena.bmp

%Canny edge detector

th=[0.05 0.2];

E=edge(I,'canny',th);

E=uint8(255*(1-double(E)));

figure('name','canny'),imshow(uint8(E),'truesize');

sobel边缘检测

I=imread('lena.bmp'); %读灰度图lena.bmp

%sobel edge detector

E=edge(I,'sobel',0.08);

E=uint8(255*(1-double(E)));

figure('name','canny'),imshow(uint8(E),'truesize');


练习:

%读取原始图像

I=imread('C:\Users\fanjinfei\Desktop\picture.png');%读取图像数据

n=length(I);

figure;

imshow(I),title('原图') %显示原图像


%缩小图像

J = imresize(I,0.5);%将图像缩小至0.5倍

figure;

imshow(J),title('0.5 倍图') %显示缩小后的图像


%显示尺寸

[mrows,mcols] = size(I) %查看原始的尺寸大小

[mrows,mcols] = size(J) %查看缩放图像的尺寸大小


%放大图像

K= imresize(I,1.5); %将图像放大 1.5 倍

figure;

imshow(K),title('1.5 倍图') %显示放大后的图像


%设置尺寸

M = imresize(I,[250,600]);%设置图像的尺寸大小

figure;

imshow(M),title('250*600 图')


%逆时针旋转图像

I45 = imrotate(I, 45);%对图像逆时针旋转 45 度

figure;

imshow(I45),title('逆时针 45 度') %显示逆时针旋转后的图像


%逆时针旋转图像

I45 = imrotate(I, -45);

figure;

imshow(I45),title('顺时针 45 度')


%对图像逆时针旋转 180 度,即反转

IR = imrotate(i, 180);

figure;

imshow(iR),title('反转')


%裁剪图像,读入图像文件,然后调用命令,进入裁剪阶段。【没完成】

I=imread('C:\Users\fanjinfei\Desktop\picture.png');%读取图像数据

n=length(I);

figure;

imshow(I),title('原图') %显示原图像

I_crop = imcrop(I) %会显示进入裁剪界面

Imshow(I_crop),title('裁剪后') %显示裁剪的图像

图像的灰度变换

I=imread('C:\Users\fanjinfei\Desktop\picture.png');%读取图像数据

figure;

imshow(I),title('原图') %显示原图像

imhist(I)




图像去雾

close all
clcrgb=imread('image processing\fog\fog.jpg');% 对饱和度与亮度进行histeq处理hsv=rgb2hsv(rgb);h=hsv(:,:,1);s=hsv(:,:,2);v=hsv(:,:,3);S=histeq(s);V=histeq(v);result_hsv=hsv2rgb(h,S,V);% 对YCbCr的亮度进行histeq处理ycbcr=rgb2ycbcr(rgb);y=ycbcr(:,:,1);cb=ycbcr(:,:,2);cr=ycbcr(:,:,3);Y=histeq(y);result_ycbcr=ycbcr2rgb(cat(3,Y,cb,cr));% 结果显示figuresubplot(2,2,1),imshow(rgb),title('原始图像')subplot(2,2,2),imshow(result_hsv),title('HSV')subplot(2,2,3),imshow(result_rgb),title('RGB')subplot(2,2,4),imshow(result_ycbcr),title('YCbCr')

你可能感兴趣的:(opencv,matlab,计算机视觉,边缘检测,mapreduce)