工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1791|回复: 1

MATLAB图像编程代码

[复制链接]
发表于 2008-6-30 20:27 | 显示全部楼层 |阅读模式
RGB=imread('a.jpg');
% %figure;imshow(RGB);title('RGB彩色空间原图像');
%grayRGB=rgb2gray(RGB);
%figure;imshow(grayRGB);title('黑白原图像');
%BW=edge(grayRGB,'sobel');
%figure;imshow(BW);title('对黑白原图像sobel算子边缘检测');
RGB=double(RGB);
SIZE=size(RGB);
for i=2:SIZE(1)-1
for j=2:SIZE(2)-1
G_rx(i,j)=abs(RGB(i-1,j+1,1)+2*RGB(i,j+1,1)+RGB(i+1,j+1,1)-RGB(i-1,j-1,1)-2*RGB(i,j-1,1)-RGB(i+1,j-1,1))/255;
if G_rx(i,j)>1
G_rx(i,j)=1;
end;
if G_rx(i,j)<0
G_rx(i,j)=0;
end;
G_gx(i,j)=abs(RGB(i-1,j+1,2)+2*RGB(i,j+1,2)+RGB(i+1,j+1,2)-RGB(i-1,j-1,2)-2*RGB(i,j-1,2)-RGB(i+1,j-1,2))/255;
if G_gx(i,j)>1
G_gx(i,j)=1;
end;
if G_gx(i,j)<0
G_gx(i,j)=0;
end;
G_bx(i,j)=abs(RGB(i-1,j+1,3)+2*RGB(i,j+1,3)+RGB(i+1,j+1,3)-RGB(i-1,j-1,3)-2*RGB(i,j-1,3)-RGB(i+1,j-1,3))/255;
if G_bx(i,j)>1
G_bx(i,j)=1;
end;
if G_rx(i,j)<0
G_bx(i,j)=0;
end;
G_ry(i,j)=abs(RGB(i+1,j-1,1)+2*RGB(i+1,j,1)+RGB(i+1,j+1,1)-RGB(i-1,j-1,1)-2*RGB(i-1,j,1)-RGB(i-1,j+1,1))/255;
if G_ry(i,j)>1
G_ry(i,j)=1;
end;
if G_ry(i,j)<0
G_ry(i,j)=0;
end;
G_gy(i,j)=abs(RGB(i+1,j-1,2)+2*RGB(i+1,j,2)+RGB(i+1,j+1,2)-RGB(i-1,j-1,2)-2*RGB(i-1,j,2)-RGB(i-1,j+1,2))/255;
if G_gy(i,j)>1
G_gy(i,j)=1;
end;
if G_gy(i,j)<0
G_gy(i,j)=0;
end;
G_by(i,j)=abs(RGB(i+1,j-1,3)+2*RGB(i+1,j,3)+RGB(i+1,j+1,3)-RGB(i-1,j-1,3)-2*RGB(i-1,j,3)-RGB(i-1,j+1,3))/255;
if G_by(i,j)>1
G_by(i,j)=1;
end;
if G_by(i,j)<0
G_by(i,j)=0;
end;
if G_rx(i,j)+G_gx(i,j)+G_bx(i,j)>G_ry(i,j)+G_gy(i,j)+G_by(i,j)
G_RGB(i,j,1)=G_rx(i,j);
G_RGB(i,j,2)=G_gx(i,j);
G_RGB(i,j,3)=G_bx(i,j);
else
G_RGB(i,j,1)=G_ry(i,j);
G_RGB(i,j,2)=G_gy(i,j);
G_RGB(i,j,3)=G_by(i,j);
end;
end;
end;
figure;imshow(G_RGB);title('RGB彩色空间边缘检测');
% %grayG_RGB=rgb2gray(G_RGB);
% %figure;imshow(grayG_RGB);title('RGB彩色空间边缘检测黑白图像');
%
% %以下再对RGB彩色空间边缘检测黑白图像进行阈值处理
% C=255*grayG_RGB;
% %figure;imshow(C);title('原始灰度图像');
% count=imhist(C);
% [r,t]=size(C);
% N=r*t;
% L=256;
% count=count/N;
% for i=2:L
% if count(i)~=0
% st=i-1;
% break;
% end;
% end;
% for i=L:-1:1
% if count(i)~=0
% nd=i-1;
% break;
% end;
% end;
% f=count(st+1:nd+1);
% p=st;q=nd-st;
% u=0;
% for i=1:q
% u=u+f(i)*(p+i-1);
% ua(i)=u;
% end;
% for i=1:q
% w(i)=sum(f(1:i));
% end;
% d=(u*w-ua).^2./(w.*(1-w));
% [y,tp]=max(d);
% th=tp+p;
% if th<=160
% th=tp+p;
% else
% th=160;
% end;
% Y1=zeros(r,t);
% for i=1:r
% for j=1:t
% X1(i,j)=double(C(i,j));
% end;
% end;
% for i=1:r
% for j=1:t
% if(X1(i,j)>=th)
% Y1(i,j)=X1(i,j);
% else
% Y1(i,j)=0;
% end;
% end;
% end;
% figure;imshow(Y1);title('RGB空间边缘检测变黑白图像后进行灰度门限分割的图像');



PS:可用于彩色边缘检测和黑白灰度图像的监测,不过黑白的比较容易,拿本书来翻番就米错了……
发表于 2008-6-30 20:57 | 显示全部楼层
单单贴代码没用,要将原理说明白才行啊~~
这样子贴出来,不懂的还是不懂,懂的还是懂,除了晒晒,没什么用。

[ 本帖最后由 vball 于 2008-6-30 20:59 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-14 06:04

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表