clc; clear all; close all; % ÔØÈëͼÏñ
Img = imread('D:\\renlian\\6.jpg'); R=Img(:,:,1); G=Img(:,:,2); B=Img(:,:,3);
R1=im2double(R); % ½«uint8ÐÍת»»³ÉdoubleÐÍ´¦Àí G1=im2double(G); B1=im2double(B); RGB=R1+G1+B1;
m=[ 0.4144,0.3174]; % ¾ùÖµ
n=[0.0031,-0.0004;-0.0004,0.0003]; % ·½²î [x1,y1]=meshgrid(0:0.01:1,0:0.01:1);
a1=sqrt(n(4));a2=sqrt(n(1));r=(-n(2))/(a1*a2); middle1=1./(2.*pi.*a1.*a2.*sqrt(1-r.^2));
middle2=((-1)./(2.*(1-r.^2))).*(((x1-m(1))).^2./a1.^2-2.*r.*(x1-m(1)).*(y1-m(2))./(a1.*a2)+(y1-m(2)).^2./a2.^2); z1=middle1.*exp(middle2); figure;
subplot(1, 2, 1);mesh(x1,y1,z1);title('ÀíÏëµÄ·ôÉ«·Ö²¼'); row=size(Img,1); % ÐÐÏñËØÊý column=size(Img,2); % ÁÐÏñËØÊý for i=1:row
for j=1:column if RGB(i,j)==0
rr(i,j)=0;gg(i,j)=0; else
rr(i,j)=R1(i,j)/RGB(i,j); % rgb¹éÒ»»¯ gg(i,j)=G1(i,j)/RGB(i,j); x=[rr(i,j),gg(i,j)];
p(i,j)=exp((-0.5)*(x-m)*inv(n)*(x-m)'); % Ƥ·ô¸ÅÂÊ·þ´Ó¸ß˹·Ö²¼ end end end
subplot(1, 2, 2);mesh(p);title('ʵ¼Ê·ôÉ«·Ö²¼'); if ndims(Img) == 3 I=rgb2gray(Img); else
I = Img; end
J=imnoise(I,'salt & pepper',0.01);
I1=filter2(fspecial('average',3),J,'full')/255; BW = im2bw(I1, graythresh(I1)); % ¶þÖµ»¯ figure;
subplot(2, 4, 1); imshow(Img,[0 1]);title('Ô-ͼÏñ');
subplot(2, 4, 2); imshow(Img,[0 1]);title('Íø¸ñ±ê¼ÇͼÏñ'); hold on;
[xt, yt] = meshgrid(round(linspace(1, size(I, 1), 10)), ... round(linspace(1, size(I, 2), 10)));
mesh(yt, xt, zeros(size(xt)), 'FaceColor', ... 'None', 'LineWidth', 3, ... 'EdgeColor', 'r');
subplot(2, 4, 3); imshow(p);title('»ùÓÚ·ôÉ«¸ÅÂÊ·Ö²¼µÄ»Ò¶ÈͼÏñ');
subplot(2, 4, 4); imshow(I1);title('ÁÚÓòƽ¾ù·¨Â˲¨ºóͼÏñ'); subplot(2, 4, 5); imshow(BW);title('¶þÖµ»¯ºóͼÏñ'); [n1, n2] = size(BW);
r = floor(n1/10); % ·Ö³É10¿é£¬ÐÐ c = floor(n2/10); % ·Ö³É10¿é£¬ÁÐ x1 = 1; x2 = r; % ¶ÔÓ¦Ðгõʼ»¯ s = r*c; % ¿éÃæ»ý for i = 1:10
y1 = 1; y2 = c; % ¶ÔÓ¦Áгõʼ»¯ for j = 1:10
if (y2<=c || y2>=9*c) || (x1==1 || x2==r*10) % Èç¹ûÊÇÔÚËÄÖÜÇøÓò
loc = find(BW(x1:x2, y1:y2)==0); [p, q] = size(loc);
pr = p/s*100; % ºÚÉ«ÏñËØËùÕ¼µÄ±ÈÀýÊý if pr<= 100
BW(x1:x2, y1:y2) = 0; r1=x1;r2=x2;s1=y1;s2=y2; pr1=0; end end
y1 = y1+c; % ÁÐÌøÔ¾ y2 = y2+c; % ÁÐÌøÔ¾ end
x1 = x1+r; % ÐÐÌøÔ¾ x2 = x2+r; % ÐÐÌøÔ¾ end
[L, num] = bwlabel(BW, 8); % ÇøÓò±ê¼Ç
stats = regionprops(L, 'BoundingBox'); % µÃµ½°üΧ¾ØÐοò Bd = cat(1, stats.BoundingBox); [s1, s2] = size(Bd); mx = 0;
for k = 1:s1
p = Bd(k, 3)*Bd(k, 4); % ¿í*¸ß if p>mx && (Bd(k, 3)/Bd(k, 4))<1.8 % Èç¹ûÂú×ãÃæ»ý¿é´ó£¬¶øÇÒ¿í/¸ß<1.8 mx = p; j = k; end end
subplot(2, 4, 6);imshow(I); hold on; rectangle('Position', Bd(j, :), ... 'EdgeColor', 'r', 'LineWidth', 3); title('±ê¼ÇͼÏñ');
subplot(2, 4, 7);imshow(Img); hold on; rectangle('Position', Bd(j, :), ... 'EdgeColor', 'r', 'LineWidth', 3); title('±ê¼ÇͼÏñ');
因篇幅问题不能全部显示,请点此查看更多更全内容