当前位置:文档之家› matlab图像处理小结

matlab图像处理小结

matlab图像处理小结
matlab图像处理小结

1.function [center, r] = solve_circle(pt1, pt2, pt3)

2.%Effect: solve the circle which across points 'pt1', 'pt2' and 'pt3'

3.%Inputs:

4.%pt1, pt2, pt3: [x, y]

5.%center: the circle center [x0; y0]

6.%r: the radius of the circle

7.%Author: Su dongcai at 2012/1/2

8. A = zeros(2, 2); B = zeros(2, 1);

9.[A(1, :), B(1)] = circle2line(pt1, pt2);

10.[A(2, :), B(2)] = circle2line(pt2, pt3);

11.center = A\B;

12.r = norm(pt1' - center);

13.

14.function [A, B] = circle2line(pt1, pt2)

15.%Effect: cast 2 circles equation into 1 linear equation:

16.%(a-x1)^2 + (b-y1)^2 = r^2 |

17.% |==> 2(x1-x2)a + 2(y1-y2)b = (x1^2 + y1^2) - (y2^2 + y2^2)

18.%(a-x2)^2 + (b-y2)^2 = r^2 |

19.%Inputs:

20.%pt1, pt2: [x1, y1], [x2, y2]

21.%Outputs:

22.%A: 2[x1-x2, y1-y2]

23.%B: (x1^2 + y1^2) - (x2^2 + y2^2)

24.%Author: Su dongcai at 2012/1/2

25.A = 2*(pt1 - pt2);

26.B = norm(pt1)^2 - norm(pt2)^2;

close all;clear;clc;

>> i=imread('rice.png');

%>> imshow(i);

>> background=imopen(i,strel('disk',15));

>> i2=imsubtract(i,background);

%>> figure,imshow(i2);

>> i3=imadjust(i2,stretchlim(i2),[0 1]);

%>> figure,imshow(i3);

>> level=graythresh(i3);

>> bw=im2bw(i3,level);

%>> figure,imshow(bw);

>> [labeled,numobjects]=bwlabel(bw,4);

graindata=regionprops(labeled,'all');

close all;clear;clc;

i=imread('rice.png');

background=imopen(i,strel('disk',15));

i2=imsubtract(i,background);

i3=imadjust(i2,stretchlim(i2),[0 1]);

level=graythresh(i3);

bw=im2bw(i3,level);

[labeled,numobjects]=bwlabel(bw,4);

data=regionprops(labeled,'all');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%

%2006.6.2

close all;clear;clc;

>> i=imread('r.jpg');

%>> figure,imshow(i);

>> imgray=rgb2gray(i);

>> figure,imshow(imgray)

>> background=imopen(imgray,strel('disk',15));

>> i2=imsubtract(imgray,background);

%>> figure,imshow(i2);

>> i3=imadjust(i2,stretchlim(i2),[0 1]);

%>> figure,imshow(i3);

>> level=graythresh(i3);

>> bw=im2bw(i3,level);

%>> figure,imshow(bw);

>> imnobord=imclearborder(bw,4);

%>> figure,imshow(imnobord);

>> [labeled,numobjects]=bwlabel(bw,4);

>> rgb_label=label2rgb(labeled,@spring,'c','shuffle');

>> figure,imshow(rgb_label);

>> graindata=regionprops(labeled,'all');

hold on;

for k=1:numobjects

lab=sprintf('%d',k);

text(graindata(k).Centroid(1),graindata(k).Centroid(2),lab,'Color','k'); end

hold off;

%剔除碎米粒

>> idxdown=find([graindata.Area]<150); %剔除碎米粒

little=ismember(labeled,idxdown);

figure,imshow(little);

[lab_little,num_little]=bwlabel(little,4);

rgb_little=label2rgb(lab_little,@spring,'c','shuffle');

figure,imshow(rgb_little);

little_data=regionprops(lab_little,'all');

hold on;

for k=1:num_little

lab=sprintf('%d',k);

text(little_data(k).Centroid(1),little_data(k).Centroid(2),lab,'Color','k'); end

hold off;

%>> graindata(idxdown,:)=[];

%剔除碎米粒

%剔除连接米粒

>> idxup=find([graindata.Area]>250); %剔除连接米粒

big=ismember(labeled,idxup);

figure,imshow(big);

[lab_big,num_big]=bwlabel(big,4);

rgb_big=label2rgb(lab_big,@spring,'c','shuffle');

figure,imshow(rgb_big);

big_data=regionprops(lab_big,'all');

hold on;

for k=1:num_big

lab=sprintf('%d',k);

text(big_data(k).Centroid(1),big_data(k).Centroid(2),lab,'Color','k');

end

hold off;

%>> graindata(numup,:)=[];

%剔除连接米粒

%获取完整米粒

idxsuit=find([graindata.Area]>=150&[graindata.Area]<=250);

suit=ismember(labeled,idxsuit);

figure,imshow(suit); %获取完整米粒

[lab_suit,num_suit]=bwlabel(suit,4);

suit_data=regionprops(lab_suit,'all');

hold on;

for k=1:num_suit

signature=sprintf('%d',k);

text(suit_data(k).Centroid(1),suit_data(k).Centroid(2),signature,'Color','r'); end

hold off;

%获取完整米粒

whos graindata

whos little_data

whos big_data

whos suit_data

>> graindata

>> mean([graindata.Area])

>> mean([graindata.Eccentricity])

>> mean([graindata.MajorAxisLength])

>> mean([graindata.MinorAxisLength])

>> mean([graindata.EquivDiameter])

>> figure,hist([graindata.Area],20);

>> figure,hist([graindata.Eccentricity],20);

>> figure,hist([graindata.MajorAxisLength],20);

>> figure,hist([graindata.MinorAxisLength],20);

>> figure,hist([graindata.EquivDiameter],20);

data=[graindata.Area]

data=[graindata.Centroid]

data=[graindata.BoundingBox]

data=[graindata.SubarrayIdx]

data=[graindata.MajorAxisLength]

data=[graindata.MinorAxisLength]

data=[graindata.Eccentricity]

data=[graindata.Orientation]

data=[graindata.ConvexHull]

data=[graindata.ConvexImage]

data=[graindata.ConvexArea]

data=[graindata.Image]

data=[graindata.FilledImage]

data=[graindata.FilledArea]

data=[graindata.EulerNumber]

data=[graindata.Extrema]

data=[graindata.EquivDiameter]

data=[graindata.Solidity]

data=[graindata.Extent]

data=[graindata.PixelIdxList]

data=[graindata.PixelList]

Area 计算各个连通区域中的象素总数

BoundingBox 包含相应区域的最小矩形

Centroid 给出每个区域的质心

MajorAxisLength 与区域具有相同标准二阶中心矩(又叫标准差)的椭圆的长轴长度

MinorAxisLength 与区域具有相同标准二阶中心矩的椭圆的短轴长度Eccentricity 与区域具有相同标准二阶中心矩的椭圆的离心率

Orientation 与区域具有相同标准二阶中心矩的椭圆的长轴与x轴的交角

Image 二值图像,与某区域具有相同大小的逻辑矩阵。

FilledImage 与上相同,唯一区别是这是个做了填充的逻辑矩阵!本例中和上面的没有区别,只有区域有空洞时才有明显差别。

FilledArea 是标量,填充区域图像中的 on 像素个数

ConvexHull 是p行2列的矩阵,包含某区域的最小凸多边形

ConvexImage 二值图像,用来画出上述的区域最小凸多边形

ConvexArea 是标量,填充区域凸多边形图像中的 on 像素个数

EulerNumber 等于图像中目标个数减去这些目标中空洞的个数

Extrema 8行2列矩阵,八方向区域极值点

EquivDiameter 是标量,等价直径:与区域具有相同面积的圆的直径.计算公式为:sqrt(4*Area/pi)

Solidity 是标量,同时在区域和其最小凸多边形中的像素比例。计算公式

为:Area/ConvexArea ,这也是个仿射特征,实际上反映出区域的固靠性程度。

Extent 是标量,同时在区域和其最小边界矩形中的像素比例。计算公式为:Area 除以边界矩形面积,这也是个仿射特征,实际上反映出区域的扩展范围程度。

PixelIdxList p元向量,存储区域像素的索引下标

PixelList p行ndims(L)列矩阵,存储上述索引对应的像素坐标

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%

基于特定原则的区域选择

当你要基于特定准则条件选择某个区域时,将函数 ismember 和 regionprops 联合使用是很有用处的。例如:创建一个只包含面积大于80的二值图像,用以下命令

idx = find([stats.Area] > 80);

BW2 = ismember(L,idx);

regionprops函数的扩展思路

在regionprops函数的基础上,你可以使用它提供的基本数据来扩展它的功能,比如我就将区域的曲率数据和骨架数据作为它的另外属性值来开发,从而希望它能用来做更细致的特征提取。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%

%2006.6.2 P221图像粒度测定(雪花)

>> i=imread('snowflakes.png');

>> figure,imshow(i);

>> %(2)

>> clahei=adapthisteq(i,'numtiles',[10 10]);

>> clahei=imadjust(clahei);

>> imshow(clahei);

>> gi=imadjust(im2double(i),[],[0 1]);

>> figure,imshow(gi),title('adjusted grayscale image');

>> %(3)

>> se=strel('disk',10);

>> topi=imtophat(gi,se);

>> figure,imshow(topi),title('top-hat image');

>> %(4)

>> for counter=0:22

remain=imopen(clahei,strel('disk',counter));

intensity_area(counter+1)=sum(remain(:));

end

>> figure,plot(intensity_area,'m-*'),grid on;

>> title('sum of opening (pixels)');

>> title('sum of opening values in opened image as a function of radius'); >> xlabel('radius of opening (pixels)');

>> ylabel('pixel value sum of opened objects (intensity)');

>>

>>

>>

>> for counter=0:20

remain=imopen(topi,strel('disk',counter));

surfarea(counter+1)=sum(remain(:));

end

>> figure,plot(surfarea,'m-*'),grid on;

>> set(gca,'xtick',[0 2 4 6 8 10 12 14 16 18 20]);

>> title('surface area of opened objects as a function of radius');

>> xlabel('radius of opening (pixels)');

>> ylabel('surface area of opened objects (pixels)');

>> %(5)

>> intensity_area_prime=diff(intensity_area);

>> figure,plot(intensity_area_prime,'m-*'),grid on;

>> title('Granulometry(size distrubution) of snowflakes');

>> set(gca,'xtick',[0 2 4 6 8 10 12 14 16 18 20 22]);

>> xlabel('radius of snowflakes(pixels)');

>> ylabel('sum of pixel values in snowflakes as a function of radius');

>> derivsurfarea=diff(surfarea);

>> figure,plot(derivsurfarea,'m-*'),grid on;

>> title('granulometry (size distribution) of stars');

>> xlabel('radius of stars (pixels)');

>> ylabel('loss of pixels between two successive openings');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%

%2006.6.2 花椒检测

clc;clear;close all;

i=imread('gj.jpg');

imshow(i);

icanny=edge(i,'canny');

imshow(icanny);

se90=strel('line',2,90);

se0=strel('line',2,0);

bwsdil=imdilate(icanny,[se90 se0]); figure,imshow(bwsdil),title('dilated'); ifill=imfill(bwsdil,'holes');

figure,imshow(ifill);

%bwero=imerode(bwsdil,[se90 se0]); %figure,imshow(bwero);

%i2fill=imfill(bwero,'holes');

%figure,imshow(bwero);

%imshow(i2fill);

%bwnobord=imclearborder(bwsdil,4); %figure,imshow(bwnobord); bwnobord=imclearborder(ifill,4); figure,imshow(bwnobord);

se=strel('disk',5);

bwc=imclose(bwnobord,se);

bwco=imopen(bwnobord,se); figure,imshow(bwc);

figure,imshow(bwco);

%mask=bwsdil&bwco;

%figure,imshow(mask);

clc

[labeled,numobjects]=bwlabel(bwco); numobjects

jdata=regionprops(labeled,'all');

%jdata

jarea=[jdata.Area];

mean(jarea)

max(jarea)

min(jarea)

hist(jarea,255)

jdata.Eccentricity

%std([jdata.Eccentricity])/(Mean([jdata.Eccentricity])

jstd=std([jdata.Eccentricity])

jmean=Mean([jdata.Eccentricity])

jcv=jstd/jmean

>> std([jdata.Area])/ mean([jdata.Area]) %面积的变异系数

>> std([jdata.Eccentricity])/ mean([jdata.Eccentricity])%椭圆的变异系数

>> std([jdata.MajorAxisLength])/ mean([jdata.MajorAxisLength])

>> std([jdata.MinorAxisLength])/ mean([jdata.MinorAxisLength])

>> std([jdata.EquivDiameter])/ mean([jdata.EquivDiameter])

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%

%2006.06.06 rice.png

close all;clear;clc

>> i=imread('rice.png');

imshow(i);

background=imopen(i,strel('disk',15));

figure,imshow(background);

i2=imsubtract(i,background);

figure,imshow(i2);

i3=imadjust(i2,stretchlim(i2),[0 1]);

figure,imshow(i3);

level=graythresh(i3);

bw=im2bw(i3,level);

figure,imshow(bw);

imnobord=imclearborder(bw);

[label,numobjects]=bwlabel(imnobord,4);

numobjects

rgb_label=label2rgb(label,@spring,'c','shuffle');

figure,imshow(rgb_label);

graindata=regionprops(label,'all');

graindata

>> numdown=find([graindata.Area]<150);

>> graindata(numdown,:)=[];

>> numup=find([graindata.Area]>250);

>> graindata(numup,:)=[];

>> graindata

>> std([graindata.Area])/ mean([graindata.Area]) %面积的变异系数

>> std([graindata.Eccentricity])/ mean([graindata.Eccentricity])%椭圆的变异系数

>> std([graindata.MajorAxisLength])/ mean([graindata.MajorAxisLength]) >> std([graindata.MinorAxisLength])/ mean([graindata.MinorAxisLength]) >> std([graindata.EquivDiameter])/ mean([graindata.EquivDiameter])

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%

%2006.06.06 rice的垩白度检测

>> clear;close all;clc;

>> rgb=imread('r.jpg');

>> close all;

>> imshow(rgb);

>> i=rgb2gray(rgb);

>> j=medfilt2(i,[5 5]);

>> figure,imshow(i);

>> figure,imshow(j);

>> imhist(j,256);

>> t=0.3;

>> v=imadjust(j,[t 1],[],1);

>> imhist(v,256);

>> t_c=0.6;

>> bw_v=im2bw(v,0.01);

>> chalk=imadjust(v,[t_c 1],[],1);

>> bw_chalk=im2bw(chalk,0.01);

>> figure,imshow(v);

>> figure,imshow(bw_v);

>> figure,imshow(chalk);

>> figure,imshow(bw_chalk);

>> degree_chalkness=bwarea(bw_chalk)/bwarea(bw_v)*100

>> bw=im2bw(j,t);

>> figure,imshow(bw);

>> se=(ones(3,3));

>> bw1=imerode(bw,se); %两次腐蚀

>> figure,imshow(bw1);

>> bw2=imerode(bw1,se);

>> figure,imshow(bw2);

>> [l,num]=bwlabel(bw2); %标记腐蚀后的大米图像

>> t_chalk=100; %设置垩白面积的下限

>> compare=(l)&(chalk>t_chalk);

%>> compare=(bw2)&(bw_chalk>t_chalk);

>> [r,c]=find(compare); %标记垩白米粒的位置

>> result=bwselect(l,c,r); %显示只含有垩白米粒的图像

>> figure,imshow(result);

>> [l_chalk,num_chalk]=bwlabel(result); %标记垩白米粒图像,便于计数>> rate_chalky_grains=num_chalk/num*100;

>> rate_chalky_grains

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%2006.6.17 bwmorph函数

>> help bwmorph

BWMORPH Perform morphological operations on binary image.

BW2 = BWMORPH(BW1,OPERATION) applies a specific

morphological operation to the binary image BW1.

BW2 = BWMORPH(BW1,OPERATION,N) applies the operation N

times. N can be Inf, in which case the operation is repeated until the image no longer changes.

OPERATION is a string that can have one of these values: 'bothat' Subtract the input image from its closing

'bridge' Bridge previously unconnected pixels

'clean' Remove isolated pixels (1's surrounded by 0's) 'close' Perform binary closure (dilation followed by

erosion)

'diag' Diagonal fill to eliminate 8-connectivity of

background

'dilate' Perform dilation using the structuring element ones(3)

'erode' Perform erosion using the structuring element ones(3)

'fill' Fill isolated interior pixels (0's surrounded by

1's)

'hbreak' Remove H-connected pixels

'majority' Set a pixel to 1 if five or more pixels in its

3-by-3 neighborhood are 1's

'open' Perform binary opening (erosion followed by dilation)

'remove' Set a pixel to 0 if its 4-connected neighbors are all 1's, thus leaving only boundary

pixels

'shrink' With N = Inf, shrink objects to points; shrink

objects with holes to connected rings

'skel' With N = Inf, remove pixels on the boundaries of objects without allowing objects to break

apart

'spur' Remove end points of lines without removing small objects completely.

'thicken' With N = Inf, thicken objects by adding pixels to the exterior of objects without connected

previously unconnected objects

'thin' With N = Inf, remove pixels so that an object

without holes shrinks to a minimally

connected stroke, and an object with holes

shrinks to a ring halfway between the hold

and outer boundary

'tophat' Subtract the opening from the input image

Class Support

-------------

The input image BW1 can be numeric or logical.

It must be 2-D, real and nonsparse. The output image

BW2 is logical.

Examples

--------

BW1 = imread('circles.png');

imview(BW1)

BW2 = bwmorph(BW1,'remove');

BW3 = bwmorph(BW1,'skel',Inf);

imview(BW2)

imview(BW3)

See also erode, dilate, bweuler, bwperim.

Reference page in Help browser

doc bwmorph

BW1 = imread('circles.png');

figure,imshow(BW1)

BW2 = bwmorph(BW1,'erode');

figure,imshow(BW2)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%边界提取

b=bwmorph(bw,'remove');

b=bwperim(bw,8); %又叫边界象素测定

b=edge(bw,'canny'); %又叫边界提取

%去除孤立象素点

nosinglepixel=bwmorph(bw,'clean');

%去除小面积物体

nosmall=bwareaopen(bw,CNN);

%阈值处理再取反

bw=~im2bw(i,graythresh(i));

%开运算(消除小物体)与闭运算(填充物体内细小空洞)

se=strel('disk',6);

iopen=imopen(bw,se);

iclose=imclose(bw,se);

%腐蚀与膨胀联合操作

%(1)创建结构元素

se=strel('rectangle',[40 30]);

%(2)使用结构元素腐蚀图像

bw1=imread('circbw.tif');

bw2=imerode(bw1,se);

imshow(bw2);

%(3)逆操作,回复矩形原来大小

bw3=imdilate(bw2,se);

figure,imshow(bw3);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%

%2006.6.18花椒子

%直接对灰度图进行canny运算

>> i=imread('nut.bmp');

>> figure,imshow(i);

>> ig=rgb2gray(i);

>> figure,imshow(ig);

%igcanny=edge(ig,'canny');

%igcfill=imfill(igcanny,'hole');

igcanny_thresh=edge(ig,'canny',(graythresh(ig)*.1));

igcfill=imfill(igcanny_thresh,'hole');

>> figure,imshow(igcfill);

%先对灰度图滤波,再进行canny运算

>> imed=medfilt2(ig); %中值滤波后对图像边界有一定的损伤!!!

>> imedcanny=edge(imed,'canny');

>> imedfill=imfill(imedcanny,'hole');

>> figure,imshow(imedfill);

>> nosmall=bwareaopen(imedfill,150);

>> figure,imshow(nosmall);

%注意:若对灰度图像先拉氏锐化,在canny提取边界,效果不大好!!!%结论:无需拉氏锐化,也不必中值滤波,可直接canny提取边界!!!

>> ifill=igcfill|imedfill;

>> figure,imshow(ifill);

>> nosmall=bwareaopen(ifill,150);

>> figure,imshow(nosmall);

%当t=0.55时,阈值处理再canny运算的效果

>> imhist(ig);

>> t=0.55;

>> v=imadjust(ig,[0 t],[],1);

>> vcanny=edge(v,'canny');

>> vfill=imfill(vcanny,'hole');

>> figure,imshow(vfill);

>> ifill=igcfill|vfill;

>> figure,imshow(ifill);

>> nosmall=bwareaopen(ifill,150);

>> figure,imshow(nosmall);

%当t=0.6时,阈值处理再canny运算的效果的效果

>> t=0.6;

>> v=imadjust(ig,[0 t],[],1);

>> vcanny=edge(v,'canny');

>> vfill=imfill(vcanny,'hole');

>> figure,imshow(vfill);

>> ifill=igcfill|vfill;

>> figure,imshow(ifill);

>> nosmall=bwareaopen(ifill,150);

>> figure,imshow(nosmall);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%

%处理花椒子

>> i=imread('nut.bmp');

%figure,imshow(i);

ig=rgb2gray(i);

figure,imshow(ig);

>> imed=medfilt2(ig);

imedcanny=edge(imed,'canny');

imedfill=imfill(imedcanny,'hole');

%figure,imshow(imedfill);

nosmall=bwareaopen(imedfill,150);

>> figure,imshow(nosmall);

>> [labeled,numobjects]=bwlabel(nosmall,4);

>> rgb_label=label2rgb(labeled,@spring,'c','shuffle');

%>> figure,imshow(rgb_label);

>> nutdata=regionprops(labeled,'all');

>> min([nutdata.Solidity])

>> rectangle('Position', [253.5000 207.5000 26.0000 28.0000]) %画矩形

>> rectangle('Position', [250.5000 50.5000 27.0000 26.0000])

>> figure,imshow(nutdata(1).Image) %只显示1号物体的图像

>> figure,imshow(nutdata(1).ConvexImage) %画出1号物体的凸多边形

>> std([nutdata.Eccentricity])/ mean([nutdata.Eccentricity])

std([nutdata.Area])/ mean([nutdata.Area])

std([nutdata.Solidity])/ mean([nutdata.Solidity])

>> std([nutdata.Centroid])/ mean([nutdata.Centroid])

std([nutdata.MajorAxisLength])/ mean([nutdata.MajorAxisLength])

std([nutdata.MinorAxisLength])/ mean([nutdata.MinorAxisLength])

std([nutdata.Orientation])/ mean([nutdata.Orientation])

std([nutdata.EquivDiameter])/ mean([nutdata.EquivDiameter])

std([nutdata.Extent])/ mean([nutdata.Extent])

std([nutdata.Extrema])/ mean([nutdata.Extrema])

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%

%处理花椒皮

close all;clc;clear;

>> i=imread('p.bmp');

imshow(i);

ig=rgb2gray(i);

figure,imshow(ig);

imed=medfilt2(ig);

imedcanny=edge(imed,'canny');

figure,imshow(imedcanny);

>> se90=strel('line',2,90);

se0=strel('line',2,0);

bwsdil=imdilate(imedcanny,[se90 se0]);

figure,imshow(bwsdil),title('dilated');

ifill=imfill(bwsdil,'holes');

figure,imshow(ifill);

>> bwero=imerode(ifill,[se90 se0]);

>> figure,imshow(bwero);

>> nosmall=bwareaopen(bwero,150,4);

>> figure,imshow(nosmall);

>> nobord=imclearborder(nosmall,4);

>> figure,imshow(nobord);

>> [labeled,numobjects]=bwlabel(nobord,4);

>> numobjects

>> pdata=regionprops(labeled,'all');

>> max([pdata.Solidity])

>> std([pdata.Solidity])/mean([pdata.Solidity])

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%

%处理混合图像

>> clear;clc;close all;

>> i=imread('m.bmp');

%>> figure,imshow(i);

>> ig=rgb2gray(i);

figure,imshow(ig);

imed=medfilt2(ig);

%>> figure,imshow(imed);

imedcanny=edge(imed,'canny');

%>> figure,imshow(imedcanny);

>> se90=strel('line',2,90);

se0=strel('line',2,0);

bwsdil=imdilate(imedcanny,[se90 se0]);

%figure,imshow(bwsdil),title('dilated');

ifill=imfill(bwsdil,'holes');

%figure,imshow(ifill);

bwero=imerode(ifill,[se90 se0]);

%figure,imshow(bwero);

>> nosmall=bwareaopen(bwero,150,4);

%figure,imshow(nosmall);

nobord=imclearborder(nosmall,4);

figure,imshow(nobord);

>> [labeled,numobjects]=bwlabel(nobord,4);

>> numobjects

>> rgb_label=label2rgb(labeled,@spring,'c','shuffle');

figure,imshow(rgb_label);

>> mexdata=regionprops(labeled,'all');

hold on; %以下内容画在同一figure中

centr=[mexdata.Centroid]; %寻找重心位置

nums=1:numobjects;

for k = 1:numobjects

soli=mexdata(k).Solidity;

soli_string=sprintf('%2.2f',soli); %等价于转字符串

% signal=num2str(nums(k));

signal=sprintf('%d',k); %直接使用打印语句打印序号

text(centr(2*k-1),centr(2*k),signal) %按序标记物体

text(centr(2*k-1)-30,centr(2*k)-30,soli_string) %标注每个Solidity值end

for k=1:numobjects

plot(mexdata(k).ConvexHull(:,1),mexdata(k).ConvexHull(:,2),...

'b','Linewidth',2)

end

%画出1和2号物体的外接矩形

%>> rectangle('position',[9.5000 224.5000 62.0000 63.0000]) %>> rectangle('position',[65.5000 141.5000 34.0000 39.0000])

%画出每个物体的外接矩形

bb=[mexdata.BoundingBox];

for k=1:numobjects

rectangle('position',[bb(4*k-3) bb(4*k-2) bb(4*k-1) bb(4*k)]) end

matlab图像处理实验报告

图像处理实验报告 姓名:陈琼暖 班级:07计科一班 学号:20070810104

目录: 实验一:灰度图像处理 (3) 实验二:灰度图像增强 (5) 实验三:二值图像处理 (8) 实验四:图像变换 (13) 大实验:车牌检测 (15)

实验一:灰度图像处理题目:直方图与灰度均衡 基本要求: (1) BMP灰度图像读取、显示、保存; (2)编程实现得出灰度图像的直方图; (3)实现灰度均衡算法. 实验过程: 1、BMP灰度图像读取、显示、保存; ?图像的读写与显示操作:用imread( )读取图像。 ?图像显示于屏幕:imshow( ) 。 ?

2、编程实现得出灰度图像的直方图; 3、实现灰度均衡算法; ?直方图均衡化可用histeq( )函数实现。 ?imhist(I) 显示直方图。直方图中bin的数目有图像的类型决定。如果I是个灰度图像,imhist将 使用默认值256个bins。如果I是一个二值图像,imhist使用两bins。 实验总结: Matlab 语言是一种简洁,可读性较强的高效率编程软件,通过运用图像处理工具箱中的有关函数,就可以对原图像进行简单的处理。 通过比较灰度原图和经均衡化后的图形可见图像变得清晰,均衡化后的直方图形状比原直方图的形状更理想。

实验二:灰度图像增强 题目:图像平滑与锐化 基本要求: (1)使用邻域平均法实现平滑运算; (2)使用中值滤波实现平滑运算; (3)使用拉普拉斯算子实现锐化运算. 实验过程: 1、 使用邻域平均法实现平滑运算; 步骤:对图像添加噪声,对带噪声的图像数据进行平滑处理; ? 对图像添加噪声 J = imnoise(I,type,parameters)

matlab图像处理的几个实例

Matlab图像处理的几个实例(初学者用) 1.图像的基本信息及其加减乘除 clear,clc; P=imread('yjx.jpg'); whos P Q=imread('dt.jpg'); P=im2double(P); Q=im2double(Q); gg1=im2bw(P,0.3); gg2=im2bw(P,0.5); gg3=im2bw(P,0.8); K=imadd(gg1,gg2); L=imsubtract(gg2,gg3); cf=immultiply(P,Q); sf=imdivide(Q,P); subplot(421),imshow(P),title('郁金香原图'); subplot(422),imshow(gg1),title('0.3'); subplot(423),imshow(gg2),title('0.5'); subplot(424),imshow(gg3),title('0.8'); subplot(425),imshow(K),title('0.3+0.5'); subplot(426),imshow(L),title('0.5-0.3'); subplot(427),imshow(cf),title('P*Q'); subplot(428),imshow(sf),title('P/Q'); 2.图像缩放 clear,clc; I=imread('dt.jpg'); A=imresize(I,0.1,'nearest'); B=imresize(I,0.4,'bilinear'); C=imresize(I,0.7,'bicubic'); D=imresize(I,[100,200]); F=imresize(I,[400,100]); figure subplot(321),imshow(I),title('原图'); subplot(322),imshow(A),title('最邻近插值'); subplot(323),imshow(B),title('双线性插值'); subplot(324),imshow(C),title('二次立方插值'); subplot(325),imshow(D),title('水平缩放与垂直缩放比例为2:1'); subplot(326),imshow(F),title('水平缩放与垂直缩放比例为1:4');

基于MATLAB平台的可视化图像处理系统设计方法

[收稿日期]20050228 [作者简介]黄书先(1962),女,1983年大学毕业,硕士,副教授,现主要从事石油勘探开发研究与科研管理工作。 基于MATLAB 平台的可视化图像处理系统 设计方法 黄书先 (长江大学科学技术处,湖北荆州434023) [摘要]以MATLAB 为工作语言和开发环境,开发了一个在M AT LAB 平台下的可视化图像处理系统, 可实现包括对测井图像在内的一般图像的精细处理,并能和用户开发的程序接口。为M AT LAB 的再开发 和可视化系统的设计作了有益的探索。 [关键词]MATLAB;图像处理;可视化GUI 界面 [中图分类号]TP 311111 [文献标识码]A [文章编号]16731409(2005)04015803 MAT LAB 的图像处理工具为自然科学各学科领域的学者、研究人员和工程师提供了一个直观的灵活的环境,用以解决复杂的图像处理问题。用MAT LAB 语言开发的图像处理算法可以在所有支持MAT LAB 的平台上共享。也可以将m 语言算法和现存的C 程序集成在一起或者将MATLAB 开发的m 语言算法和GU Is 编译为C/C++代码,供其他程序调用,或者发布为一个独立的应用程序。下面笔者提出一个基于MATLAB 平台的可视化图像处理系统设计方法,可用于包括测井图像资料在内的一般图像的精细处理。 1 系统总体设计 在MAT LAB 中有个重要的图像处理工具包[1],该工具包是由一系列支持图像处理操作的函数组成的,按功能可以分为以下几类:图像显示;图像文件输入与输出;几何操作;像素值统计;图像增强;图像识别;图像滤波;图像变换;邻域和块操作;二值图像操作;颜色映射和颜色空间转换;图像格式转换等。和其他工具包一样,用户还可以根据需要书写自己的函数,以满足特定的需要;也可以将这个工具包和信号处理工具包或小波工具包等其他工具包联合起来使用。 MAT LAB 提供了交互式的GU I 开发环境[2~4],用户只需要设置各个对象相应的属性,系统自动生成与之对应的界面,大大减少了开发的难度。本设计的MAT LAB 图像处理系统由封面、主界面和各个子功能界面组成,其框图如图1所示。程序总流程图如图2所示。 2 封面界面设计 首先用MAT LAB 编辑封面的脚本文件,生成系统的封面界面,然后再进入处理的主界面。 在设计封面时,要做好封面的总体布局,力求完美。要插入背景,首先要找到所用的函数(这在一般的书中很难找到);其次要注意设置axes 的属性。在显示背景图像时,不能用imshow ()函数,如果用此函数,背景图像只能显示在封面的一部分,不能整屏覆盖;而要用imagesc ()函数。MATLAB 提供修改文本中文字的字体,它支持华文中宋、华文彩云、华文仿宋、楷书、黑体等,功能较强。 在设计封面的过程中,最主要的技术是要解决时间的显示,如果只用MATLAB 中的clock ()函数,则显示的是静态时间,而不会显示和电脑同步的动态时间。为了解决这个问题,需做一个循环判断语句:while find (get (0,'c hildren'))==h0。成立的条件是,只要是当前窗口循环,否则停止,这样可以减少CPU 的负担。同时,要实时提取clock ()函数,可用fix (clock),使提取的时间更美观。#158#长江大学学报(自科版)2005年4月第2卷第4期/理工卷第2卷第2期 Jour nal of Yangtze University (Nat Sci Edit)Apr 12005Vol 12No 14/Sci &Eng V,Vol 12No 12

非常全非常详细的MATLAB数字图像处理技术

MATLAB数字图像处理 1 概述 BW=dither(I)灰度转成二值图; X=dither(RGB,map)RGB转成灰度图,用户需要提供一个Colormap; [X,map]=gray2ind(I,n)灰度到索引; [X,map]=gray2ind(BW,n)二值图到索引,map可由gray(n)产生。灰度图n 默认64,二值图默认2; X=graylice(I,n)灰度图到索引图,门限1/n,2/n,…,(n-1)/n,X=graylice(I,v)给定门限向量v; BW=im2bw(I,level)灰度图I到二值图; BW=im2bw(X,map,level)索引图X到二值图;level是阈值门限,超过像素为1,其余置0,level在[0,1]之间。 BW=im2bw(RGB,level)RGB到二值图; I=ind2gray(X,map)索引图到灰度图; RGB=ind2rgb(X,map)索引图到RGB; I=rgb2gray(RGB)RGB到灰度图。 2 图像运算 2.1图像的读写 MATLAB支持的图像格式有bmp,gif,ico,jpg,png,cur,pcx,xwd和tif。 读取(imread): [1]A=imread(filename,fmt) [2] [X,map]=imread(filename,fmt) [3] […]=imread(filename) [4] […]=imread(URL,…) 说明:filename是图像文件名,如果不在搜索路径下应是图像的全路径,fmt是图像文件扩展名字符串。前者可读入二值图、灰度图、彩图(主要是RGB);第二个读入索引图,map 为索引图对应的Colormap,即其相关联的颜色映射表,若不是索引图则map为空。URL表示引自Internet URL中的图像。 写入(imwrite): [1] R=imwrite(A,filename,fmt); [2] R=imwrite(X,map,filename,fmt); [3] R=imwrite(…,filename); [4] R=imwrite(…,Param1,Val1,Param2,Val2) 说明:针对第四个,该语句用于指定HDF,JPEG,PBM,PGM,PNG,PPM,TIFF等类型输出文件的不同参数。例如HDF的Quality,Compression,WriteMode;JPEG的BitDepth,Comment:Emptyor not,Mode:lossy orlossless,Quality等。 2.2 图像的显示 方法1:使用Image Viewer(图像浏览器),即运用imview函数。

基于MATLAB图像处理报告

基于M A T L A B图像处理报告一、设计题目 图片叠加。 二、设计要求 将一幅礼花图片和一幅夜景图片做叠加运算,使达到烟花夜景的美图效果。 三、设计方案 、设计思路 利用matlab强大的图像处理功能,通过编写程序,实现对两幅图片的像素进行线性运算,利用灰度变换的算法使图片达到预期的效果。 、软件介绍 MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB 也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户直接进行下载就可以用。

图像处理实例(含Matlab代码)

信号与系统实验报告——图像处理 学院:信息科学与工程学院 专业:2014级通信工程 组长:** 组员:** 2017.01.02

目录 目录 (2) 实验一图像一的细胞计数 (3) 一、实验内容及步骤 (3) 二、Matlab程序代码 (3) 三、数据及结果 (4) 实验二图像二的图形结构提取 (5) 一、实验内容及步骤 (5) 二、Matlab程序代码 (5) 三、数据及结果 (6) 实验三图像三的图形结构提取 (7) 一、实验内容及步骤 (7) 二、Matlab程序代码 (7) 三、数据及结果 (8) 实验四图像四的傅里叶变化及巴特沃斯低通滤波 (9) 一、实验内容及步骤 (9) 二、Matlab程序代码 (9) 三、数据及结果 (10) 实验五图像五的空间域滤波与频域滤波 (11) 一、实验内容及步骤 (11) 二、Matlab程序代码 (11) 三、数据及结果 (12)

实验一图像一的细胞计数 一、实验内容及步骤 将该图形进行一系列处理,计算得到途中清晰可见细胞的个数。 首先,由于原图为RGB三色图像处理起来较为麻烦,所以转为灰度图,再进行二值化化为黑白图像,得到二值化图像之后进行中值滤波得到细胞分布的初步图像,为了方便计数对图像取反,这时进行一次计数,发现得到的个数远远多于实际个数,这时在进行一次中值滤波,去掉一些不清晰的像素点,剩下的应该为较为清晰的细胞个数,再次计数得到大致结果。 二、Matlab程序代码 clear;close all; Image = imread('1.jpg'); figure,imshow(Image),title('原图'); Image=rgb2gray(Image); figure,imshow(Image),title('灰度图'); Theshold = graythresh(Image); Image_BW = im2bw(Image,Theshold); Reverse_Image_BW22=~Image_BW; figure,imshow(Image_BW),title('二值化图像'); Image_BW_medfilt= medfilt2(Image_BW,[3 3]); figure,imshow(Image_BW_medfilt),title('中值滤波后的二值化图像'); Reverse_Image_BW = ~Image_BW_medfilt; figure,imshow(Reverse_Image_BW),title('图象取反'); Image_BW_medfilt2= medfilt2(Reverse_Image_BW,[20 20]); figure,imshow(Image_BW_medfilt2),title('第二次中值滤波的二值化图像'); [Label, Number]=bwlabel(Image_BW_medfilt,8);Number [Label, Number]=bwlabel(Image_BW_medfilt2,8);Number

基于Matlab基本图像处理程序

图像读入 ●从图形文件中读入图像 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):是表示数字图像中亮度分布的直方图,用来描述图象灰度值,标绘了图像中每个亮度值的像素数。 灰度直方图:是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图 像中某种灰度出现的频率。描述了一幅图像的灰度级统计信息。是一个二维图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的次数或概率。 归一化直方图:直接反应不同灰度级出现的比率。纵坐标表示具有各个灰度级别的像

基于MATLAB的图像处理

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位: 题目: 基于MATLAB的图像滤波设计 初始条件:1.MATLAB软件 2.滤波器处理相关函数 要求完成的主要任务: (1)读入图像并分别加入高斯噪声、椒盐噪声和乘性噪声,并比较结果。 (2)设计巴特沃斯低通滤波对图像进行低通滤波处理,显示结果。 (3)设计高斯高通滤波器对图像进行处理,显示结果。 (4)采用维纳滤波和中值滤波对图像进行处理,显示结果 参考书: 1.《信号与系统》第一版刘泉江雪梅主编高等教育出版社 2.《数字图像处理》MATLAB版冈萨雷斯主编电子工业出版社 时间安排: 第15周:任务安排、分组 第16周:理论设计及仿真 第18周:撰写设计报告及答辩 指导教师签名:年月日系主任(或责任教师)签名:年月日

摘要 (3) 1.MATLAB简介 (5) 1.1 MATLAB的概况 (5) 1.2 MATLAB产生的历史背景 (5) 2.编程及运行结果 (7) 2.1常见基本运算 (7) 2.1.1极限的计算 (7) 2.1.2微分的计算 (7) 2.1.3积分的计算 (8) 2.1.4级数的计算 (9) 2.1.5求解代数方程 (10) 2.1.6求解常微分方程 (10) 2.2 矩阵基本计算 (11) 2.2.1矩阵的最大值 (11) 2.2.2矩阵的最小值 (11) 2.2.3矩阵的均值 (12) 2.2.4矩阵的方差 (13) 2.2.5矩阵的转置 (13) 2.2.6矩阵的逆 (14) 2.2.7矩阵的行列式 (15) 2.2.8矩阵的特征值计算 (15) 2.2.9矩阵的相乘 (16) 2.2.10矩阵的右除和左除 (17) 2.2.11矩阵的幂运算 (18) 2.3 多项式基本计算 (18) 2.3.1多项式加减运算 (18) 2.3.2多项式乘除运算 (19) 2.3.3多项式求导 (20) 2.3.4求根和求值运算 (20) 2.3.5多项式的部分分式展开 (21) 2.3.6多项式的拟合 (22) 2.3.7插值运算 (23) 3.基于MATLAB的图像滤波设计 (25) 3.1读入图像并分别加入高斯噪声、椒盐噪声和乘性噪声,并比较结果 (25) 3.2设计巴特沃斯低通滤波对图像进行低通滤波处理,显示结果 (29) 3.2.1叠加椒盐噪声的巴特沃斯低通滤波 (29) 3.2.2叠加高斯噪声的巴特沃斯低通滤波 (31) 3.2.3叠加乘性噪声的巴特沃斯低通滤波 (32) 3.3用MATLAB实现高斯高通滤波器对图像的处理 (33) 3.4维纳滤波和中值滤波对图像进行处理 (35) 4.总结 (38) 参考文献 (39)

MATLAB课程设计-图像处理完整版

MATLAB课程设计 设计题目:应用图像处理 班级: 学号: 姓名: 指导老师: 设计时间:2013年4月8号-4月14号

摘要 21世纪是一个充满信息的时代,图像作为人类感知世界的视觉基础,是人类获取信息、表达信息和传递信息的重要手段。图像处理,是用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。基本容图像处理一般指数字图像处理。数字图像是指用数字摄像机、扫描仪等设备经过采样和数字化得到的一个大的二维数组,该数组的元素称为像素,其值为一整数,称为灰度值。图像处理技术的主要容包括图像压缩,增强和复原,匹配、描述和识别3个部分。常见的处理有图像数字化、图像编码、图像增强、图像复原、图像分割和图像分析等。图像处理一般指数字图像处理。所谓数字图像处理[7]就是利用计算机对图像信息进行加工以满足人的视觉心理或者应用需求的行为。实质上是一段能够被计算机还原显示和输出为一幅图像的数字码。 关键词:DCT变换;图像压缩;真色彩增强;平滑;锐化;直方图均衡; 灰度变换;滤波;M文件的使用 目录 摘要………………………………………………………………I 1 概述……………………………………………………………II 2 课程设计任务及要求...............................III 2.1.1设计任务 2.1.2设计要求 3 系统设计原理 (Ⅳ)

3.1 DCT图像压缩原理 3.2 真彩色增强 3.2.1平滑 3.2.2锐化 3.3 灰度变换(直方图均衡化) 3.4 图像滤波 3.4.1中值滤波器 3.4.2维纳滤波器 4 程序代码及实验结果与分析 (Ⅵ) 4.1 DCT图像压缩 4.1.1程序代码 4.1.2实验结果 4.1.3结果分析 4.2 真彩色增强 4.2.1平滑程序代码 4.2.2实验结果 4.2.3结果分析 4.2.4锐化程序代码 4.2.5实验结果 4.2.6结果分析 4.3 灰度变换(直方图均衡化) 4.3.1程序代码

MATLAB中图像函数大全 详解及例子

图像处理函数详解——strel 功能:用于膨胀腐蚀及开闭运算等操作的结构元素对象(本论坛随即对膨胀腐蚀等操作进行讲解)。 用法:SE=strel(shape,parameters) 创建由指定形状shape对应的结构元素。其中shape的种类有 arbitrary' 'pair' 'diamond' 'periodicline' 'disk' 'rectangle' 'line' 'square' 'octagon 参数parameters一般控制SE的大小。 例子: se1=strel('square',6) %创建6*6的正方形 se2=strel('line',10,45) %创建直线长度10,角度45 se3=strel('disk',15) %创建圆盘半径15 se4=strel('ball',15,5) %创建椭圆体,半径15,高度5

图像处理函数详解——roipoly 功能:用于选择图像中的多边形区域。 用法:BW=roipoly(I,c,r) BW=roipoly(I) BW=roipoly(x,y,I,xi,yi) [BW,xi,yi]=roipoly(...) [x,y,BW,xi,yi]=roipoly(...) BW=roipoly(I,c,r)表示用向量c、r指定多边形各点的X、Y坐标。BW选中的区域为1,其他部分的值为0. BW=roipoly(I)表示建立交互式的处理界面。 BW=roipoly(x,y,I,xi,yi)表示向量x和y建立非默认的坐标系,然后在指定的坐标系下选择由向量xi,yi指定的多边形区域。 例子:I=imread('eight.tif'); c=[222272300270221194]; r=[21217512112175]; BW=roipoly(I,c,r); imshow(I)

matlab 图像处理报告

《 MATLAB 实践》 课程设计 学生姓名: 学号: 专业班级: 指导教师: 二○○九年三月十三日

1.设计目的…………………………………………………第 3页 2.题目分析…………………………………………………第3 页 3.总体设计…………………………………………………第4 页 4.具体设计…………………………………………………第 6页 5.结果分析…………………………………………………第 20页 6.心得体会…………………………………………………第 20页 7.参考书目…………………………………………………第 20页

1 课程设计的目的: 综合运用MATLAB工具箱实现图像处理的GUI程序设计。 2、题目分析 课程设计的基本要求 1)熟悉和掌握MATLAB 程序设计方法 2)掌握MATLAB GUI 程序设计 3)学习和熟悉MATLAB图像处理工具箱 4)学会运用MATLAB工具箱对图像进行处理和分析 课程设计的内容 学习MATLAB GUI程序设计,利用MATLAB图像处理工具箱,设计和实现自己的Photoshop 。要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。 以下几点是程序必须实现的功能。 1)图像的读取和保存。 2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。 3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。 4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存,比较几种插值的效果。 5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直方图均衡后的效果。 6)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。比较去噪效果。

matlab图像处理小结

1.function [center, r] = solve_circle(pt1, pt2, pt3) 2.%Effect: solve the circle which across points 'pt1', 'pt2' and 'pt3' 3.%Inputs: 4.%pt1, pt2, pt3: [x, y] 5.%center: the circle center [x0; y0] 6.%r: the radius of the circle 7.%Author: Su dongcai at 2012/1/2 8. A = zeros(2, 2); B = zeros(2, 1); 9.[A(1, :), B(1)] = circle2line(pt1, pt2); 10.[A(2, :), B(2)] = circle2line(pt2, pt3); 11.center = A\B; 12.r = norm(pt1' - center); 13. 14.function [A, B] = circle2line(pt1, pt2) 15.%Effect: cast 2 circles equation into 1 linear equation: 16.%(a-x1)^2 + (b-y1)^2 = r^2 | 17.% |==> 2(x1-x2)a + 2(y1-y2)b = (x1^2 + y1^2) - (y2^2 + y2^2) 18.%(a-x2)^2 + (b-y2)^2 = r^2 | 19.%Inputs: 20.%pt1, pt2: [x1, y1], [x2, y2] 21.%Outputs: 22.%A: 2[x1-x2, y1-y2] 23.%B: (x1^2 + y1^2) - (x2^2 + y2^2) 24.%Author: Su dongcai at 2012/1/2 25.A = 2*(pt1 - pt2); 26.B = norm(pt1)^2 - norm(pt2)^2; close all;clear;clc; >> i=imread('rice.png'); %>> imshow(i); >> background=imopen(i,strel('disk',15)); >> i2=imsubtract(i,background); %>> figure,imshow(i2); >> i3=imadjust(i2,stretchlim(i2),[0 1]); %>> figure,imshow(i3); >> level=graythresh(i3); >> bw=im2bw(i3,level); %>> figure,imshow(bw); >> [labeled,numobjects]=bwlabel(bw,4); graindata=regionprops(labeled,'all');

基于Matlab基本图像处理程序

图像读入 ●从图形文件中读入图像imread Syntax: A = imread(, fmt) :指定的灰度或彩色图像文件的完整路径和文件名。 fmt:指定图形文件的格式所对应的标准扩展名。如果imread没有找到所制定的文件,会尝试查找一个名为的文件。 A:包含图像矩阵的矩阵。对于灰度图像,它是一个M行N列的矩阵。如果文件包含RGB 真彩图像,则是m*n*3的矩阵。 ●对于索引图像,格式[X, map] = imread(, 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() himage = imshow(...)

●操作:读取并显示图像 I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读取图像数据 imshow(I);%显示原图像 图像增强 一.图像的全局描述 直方图(Histogram):是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。 图像直方图(Image Histogram):是表示数字图像中亮度分布的直方图,用来描述图象灰度值,标绘了图像中每个亮度值的像素数。 灰度直方图:是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。描述了一幅图像的灰度级统计信息。是一个二维图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的次数或概率。 归一化直方图:直接反应不同灰度级出现的比率。纵坐标表示具有各个灰度级别的像素在图像中出现的概率。 图像的灰度直方图:是一个离散函数,表示图像每一灰度级与该灰度级出现概率的对应关系。 图像的灰度直方图运算: imhist()函数,其横坐标表示像素的灰度级别,纵坐标为像素点的个数。 ●Imhist函数=Display histogram of image data显示灰度直方图的函数 ●Syntax: ①imhist(I) % I为要计算的灰度直方图图像 ②imhist(I, n) % n指定的灰度级的数目,表示所有灰度级均匀分布在n个小区间内。 ③imhist(X, map) ④[counts,x] = imhist(...) %counts直方图数据向量。counts(i)第i个灰度区间中的像素数目。x是保存了对应的灰度小区间的向量。 注意:若调用时不接受这个函数的返回值,则直接显示直方图;在得这些返回数据之后,也可以使用stem(x,counts)手绘直方图。 ●例1:显示某一图像的灰度直方图

图像增强及MATLAB实现

《数字图像处理》课程设计 课设题目:图像增强与MATLAB实现学校学院:华东交通大学理学院 学生班级:13级信息计算(2)班学生:超 学生学号:20130810010216 指导老师:自柱

图像增强与MATLAB实现 摘要 数字图像处理是指将图像信号转换成数字格式并利用计算机对其进行处理的过程。图像增强是数字图像处理的过程中经常采用的一种方法,它对提高图像质量起着重要的作用。本文先对图像增强的原理进行概述,然后对图像增强的方法分类并给出直方图增强、对比度增强、平滑和锐化等几种常用的增强方法的理论基础,通过Matlab实验得出的实际处理效果来对比各种算法的优缺点,讨论不同的增强算法的技术要点,并对其图像增强方法进行性能评价。 关键字:图像;图像增强;算法

目录 一、MATLAB的简介 (1) 1.1MATLAB主要功能 (1) 二、MATLAB的主要功能 (1) 2.1数字增强技术概述 (1) 2.2数字图像的表示 (2)

三、直方图的均衡化 (2) 3.1图像的灰度 (2) 3.2灰度直方图 (2) 3.3直方图均衡化 (3) 四、图像二值化 (5) 4.1图像二值化 (5) 五、对比度增强 (7) 5.1对比度增强 (7) 5.2灰度调整 (8) 5.3对数变换 (9) 六、滤波 (10) 6.1平滑滤波 (10) 6.2线性平滑滤波程序: (11) 6.3非线性滤波 (12) 七、锐化 (18) 八、参考文献 (19) 九、自我评价 (20)

一、Matlab的简介 1.1 MATLAB主要功能 MATLAB是建立在向量、数组和矩阵基础上的一种分析和仿真工具软件包,包含各种能够进行常规运算的“工具箱”,如常用的矩阵代数运算、数组运算、方程求根、优化计算及函数求导积分符号运算等;同时还提供了编程计算的编程特性,通过编程可以解决一些复杂的工程问题;也可绘制二维、三维图形,输出结果可视化。目前,已成为工程领域中较常用的软件工具包之一。 二、MATLAB的主要功能 2.1数字增强技术概述 图像增强是按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些信息使得图像更加实用。图像增强技术主要包含直方图修改处理、图像平滑处理、图像尖锐化处理等。 图像增强技术主要包括:直方图修改处理,图像平滑处理,图像尖锐化处理,彩色图像处理。从纯技术上讲主要有两类:频域处理法和空域处理法。 频域处理法主要是卷积定理,采用修改图像傅立叶变换的方法实现对图像的增强处理技术;空域处理法:是直接对图像中的像素进行处理,基本上是以灰度映射变换为基础的。

MATLAB课程设计报告图像处理

一.课程设计相关知识综述...................................................................... 1.1 研究目的及意义 (3) 1.2 数字图像处理研究的内容........................................................... 1.3 MATLAB 软件的介绍.................................................................. 1.3.1 MATLAB 语言的特点......................................................... 1.3.2 MATLAB 图像文件格式.................................................... 1.3.3 MATLAB 图像处理工具箱简介........................................ 1.3.4 MATLAB 中的图像类型.................................................... 1.3.5 MATLAB 的主要应用........................................................ 1.4 函数介绍........................................................................................ 二.课程设计内容和要求........................................................................... 2.1 主要研究内容................................................................................ 2.2 具体要求....................................................................................... 2.3 预期达到的目标........................................................................... 三.设计过程............................................................................................... 3.1 设计方案及步骤............................................................................ 3.2 程序清单及注释........................................................................... 3.3 实验结果........................................................................................ 四.团队情况................................................................................................ 五.总结....................................................................................................... 六.参考文献............................................................................................... 一.课程设计相关知识综述. 1.1研究目的及意义

matlab图像处理综合实验实验报告

《数字图像处理》 实验报告 学院: 专业: 班级: 姓名: 学号:

实验一 实验名称:图像增强 实验目的:1.熟悉图像在Matlab下的读入,输出及显示; 2.熟悉直方图均衡化; 3.熟悉图像的线性指数等; 4.熟悉图像的算术运算及几何变换. 实验仪器:计算机,Matlab软件 实验原理: 图像增强是为了使受到噪声等污染图像在视觉感知或某种准则下尽量的恢复到原始图像的水平之外,还需要有目的性地加强图像中的某些信息而抑制另一些信息,以便更好地利用图像。图像增强分频域处理和空间域处理,这里主要用空间域的方法进行增强。空间域的增强主要有:灰度变换和图像的空间滤波。 图像的直方图实际上就是图像的各像素点强度概率密度分布图,是一幅图像所有像素集合的最基本统计规律,均衡化是指在每个灰度级上都有相同的像素点过程。 实验内容如下: I=imread('E:\cs.jpg');%读取图像 subplot(2,2,1),imshow(I),title('源图像') J=rgb2gray(I)%灰度处理 subplot(2,2,2),imshow(J) %输出图像 title('灰度图像') %在原始图像中加标题 subplot(2,2,3),imhist(J) %输出原图直方图 title('原始图像直方图') 0100200

I=imread('E:\cs.jpg');%读取图像 subplot(1,2,1),imshow(I); theta = 30; K = imrotate(I,theta); subplot(1,2,2),imshow(K) 对数运算: I=imread('E:\dog.jpg'); subplot(2,2,1),imshow(I),title('源图像') J=rgb2gray(I)%灰度处理 subplot(2,2,2),imshow(J),title('灰度变换后图像') J1=log(1+double(J)); subplot(2,2,3),imshow(J1,[]),title('对数变换后') 指数运算: I=imread('E:\dog.jpg'); f=double(I); g=(2^2*(f-1))-1 f=uint8(f); g=uint8(g);

图像处理matlab程序实例

程序实例 1旋转: x=imread('d:\MATLAB7\work\flower.jpg'); y=imrotate(x,200,'bilinear','crop'); subplot(1,2,1); imshow(x); subplot(1,2,2); imshow(y) 2.图像的rgb clear [x,map]=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shh1.jpg');y=x(90:95,90:95);imshow(y)R=x(90:95,90:95,1);G=x(90:95,90:95,2);B=x(90:95,90:95,3);R,G,B 3.加法运算clear I=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shh3.jpg');J=imnoise(I,'gaussian',0,0.02);%向图片加入高斯噪声subplot(1,2,1),imshow(I);%显示图片subplot(1,2,2),imshow(J);K=zeros(242,308);%产生全零的矩阵,大小与图片的大小一样for i=1:100%循环100加入噪声J=imnoise(I,'gaussian',0,0.02);J1=im2double(J);K=K+J1;end K=K/100; figure,imshow(K);save

4.减法 clear I=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shao.jpg'); J=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shao1.jpg'); K=imsubtract(I,J);%实现两幅图相减 K1=255-K;%将图片求反显示 figure;imshow(I); title('有噪声的图'); figure;imshow(J); title('原图'); figure;imshow(K1); title('提取的噪声'); save 5.图像的乘法 H=imread('D:\Program Files\MATLAB\R2012a\bin\shaohaihe\shao.jpg'); I=immultiply(H,1.2);将此图片乘以1.2 J=immultiply(H,2); subplot(1,3,1),imshow(H); title('原图'); subplot(1,3,2),imshow(I); title('·放大1.2'); subplot(1,3,3),imshow(J); title('放大2倍'); 6除法运算 moon=imread('moon.tif'); I=double(moon); J=I*0.43+90; K=I*0.1+90; L=I*0.01+90; moon2=uint8(J); moon3=uint8(K); moon4=uint8(L); J=imdivide(moon,moon2); K=imdivide(moon,moon3); L=imdivide(moon,moon4); subplot(2,2,1),imshow(moon); subplot(2,2,2),imshow(J,[]); subplot(2,2,3),imshow(K,[]); subplot(2,2,4),imshow(L,[]);

相关主题
文本预览
相关文档 最新文档