Processamento de imagem digital: Experimento 1

processamento de imagem digital

Use o Matlab para processar a imagem e gravar o experimento;
referências: transformada de Fourier , aprimoramento de imagem , histograma, equalização

Experimento 1: Transformações matemáticas comumente usadas

1. Matlab usa adição para sobrepor duas imagens diferentes (personalizadas)

  1. Programa Matlab: (versão 2016a)
1.	clear;  
2.	clc;  
3.	I= imread('OIP-C.jpg');%读入图片1  
4.	J=imread('OIP-D.jpg');%读入图片2  
5.	Is = stretchlim(I);%计算图片1的灰度图像的最佳输入区间  
6.	Js = stretchlim(J);%同理计算图片2  
7.	Ix=imadjust(I,Is,[0;1]);%调整图片1灰度图像的灰度范围  
8.	Jx=imadjust(J,Js,[0;1]);%同理调整图片2  
9.	P=imadd(Ix,Jx);%实现2副图相加运算  
10.	subplot(1,3,1);imshow(I);%创建子图、显示图像1  
11.	title('图像1');  
12.	subplot(1,3,2),imshow(J);%创建子图、显示图像2  
13.	title('图像2');  
14.	subplot(1,3,3),imshow(P);%创建子图、显示图像3  
15.	title('两幅图像进行相加操作后效果');  

  1. Imagem original, imagem processada:
    insira a descrição da imagem aqui
  2. Descrição do processo e resultados do processamento:

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo de link anti-roubo, é recomendável salvar a imagem e carregá-la diretamente (img-rOzwNcJ4-1667490230485)(file:///c:/user/default/ AppData/Local/Temp/msohtmlclip1 /01/clip_image003.gif)]

Conforme mostrado no fluxograma do algoritmo acima, após o programa inicializar e limpar os dados armazenados na área de trabalho, ao sobrepor duas imagens diferentes, primeiro você precisa ler duas imagens diferentes por meio da função imread no Matlab e atribuir valores às duas imagens respectivamente Dê uma variável receptora I, J;

Considerando que duas imagens serão sobrepostas diretamente e haverá dupla exposição, precisamos realizar o processamento em tons de cinza na imagem, ou seja, primeiro calcular o melhor intervalo de entrada da imagem em tons de cinza das duas imagens através da função stretchlim, e atribuir o valor do intervalo para as variáveis ​​Is e Js. Em seguida, use a função imadjust para ajustar a faixa de tons de cinza da imagem em tons de cinza correspondente nas duas imagens e obtenha duas imagens processadas em tons de cinza Ix e Jx; finalmente, use a função imadd para sobrepor Ix e Jx para obter as duas imagens após adicionar a imagem de P. Antes do final do programa, as duas imagens originais I e J e a imagem processada P são exibidas respectivamente; a partir da renderização, podemos ver que as duas imagens são sobrepostas com sucesso.

2. Matlab usa subtração para subtrair duas imagens (personalizadas) da mesma cena, mas com diferenças;

  1. Programa Matlab: (versão 2016a)
1.	clear;  
2.	clc;  
3.	I= imread('OIP-C.jpg');%读入图片1  
4.	J=imread('OIP-D.jpg');%读入图片2  
5.	P=imadd(I,J);%得到未进行灰度处理的加法图  
6.	imwrite(P,'OIP-E.jpg');%把处理过的图片写出保存  
7.	%图像相减  
8.	%实现2副存在差异的图相减运算
9.	Px=imsubtract(P,I);
10.	%实现2副相同图做减法运算 
11.	%Px=imsubtract(P,P);
12.	subplot(1,3,1),imshow(P),xlabel('A');  
13.	subplot(1,3,2),imshow(I),xlabel('B');  
14.	subplot(1,3,3),imshow(Px),xlabel('A-B');  

  1. Imagem original, imagem processada;

Cenário 1: Existem diferenças na mesma cena Subtração de imagens:

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-laCs3SvJ-1667490230486)(file:///c:/user/default/AppData /Local/Temp/msohtmlclip1 /01/clip_image002.jpg)]

Cenário 2: Subtração das mesmas duas imagens:

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendável salvar a imagem e carregá-la diretamente (img-Q60Dqwhd-1667490230487)(file:///c:/user/default/AppData /Local/Temp/msohtmlclip1 /01/clip_image004.jpg)]

  1. Descrição do processo e resultados do processamento:

insira a descrição da imagem aqui

Conforme mostrado no fluxograma do algoritmo acima, depois que o programa inicializa e limpa o espaço de trabalho para armazenar dados, primeiro ele precisa obter duas imagens da mesma cena, mas com diferenças. Portanto, espera-se combinar o algoritmo de adição mencionado acima e calcule a imagem de adição obtida como as outras duas imagens Existem diferenças no uso da imagem na mesma cena;

Para obter a imagem 3 sem operação em tons de cinza, primeiro você precisa ler as imagens 1 e 2 e usar a função imwrite para salvar a imagem 3. Depois de obter duas imagens com diferenças, use a função imsubtract para subtrair as duas imagens e, finalmente, exibir a imagem processada;

Existem dois tipos de operações de subtração. Dois tipos de imagens são obtidas modificando o código. Uma é subtrair duas imagens com diferenças na mesma cena. O efeito é o seguinte, removendo os mesmos elementos na imagem A e na imagem B; a outra é A situação é que duas imagens idênticas são subtraídas e pode-se ver que toda a imagem após o processo de subtração é completamente preta, o que significa que as duas imagens subtraídas são iguais;

3. Use o Matlab para calcular o espectro de potência e o espectro de fase de uma imagem (personalizado, é recomendável ter características de textura óbvias).

  1. Programa Matlab: (versão 2016a)
1.	clc;  
2.	clear;  
3.	img = imread('hua.jpg');  
4.	imggray = rgb2gray(img);%灰度处理  
5.	imgf = fft2(imggray);%傅里叶变换二维快速傅里叶变换函数  
6.	imgfshift = fftshift(imgf);%频谱图中零频率成分移动至频谱图中心  
7.	%获得傅里叶变换的幅度谱  
8.	imgA = log(1+abs(imgfshift));%对数变换,压缩动态范围  
9.	%由幅度谱求出功率谱 对信号傅里叶变换--幅度谱--取模求平方--功率谱  
10.	imgB=abs(imgfshift).^2;  
11.	imgB=10 * log10(imgB);  
12.	%获得傅里叶变换的相位谱  
13.	imgPhase = log(angle(imgfshift)*180/pi);  
14.	%变换后图像矩阵大多是复试矩阵,包含实部虚部  
15.	%需要对数组元素进行绝对值处理求其复数矩阵的模,在进行对数变换进行显示  
16.	imgPhase=log(abs(imgPhase)+1);  
17.	subplot(2,2,1);  
18.	imshow(img);  
19.	title('原图像');  
20.	subplot(2,2,2);  
21.	imshow(imggray);  
22.	title('灰度处理后的原图像');  
23.	subplot(2,2,3);  
24.	imshow(imgB,[]); %显示图像的功率谱,参数’[]'是为了将其值线性拉伸  
25.	title('图像功率谱');  
26.	subplot(2,2,4);  
27.	imshow(imgPhase,[]);  
28.	title('图像相位谱');  

  1. Imagem original, imagem processada;
    insira a descrição da imagem aqui

  2. Uma descrição do processo e resultados do processamento;

[Falha na transferência da imagem do link externo, o site de origem pode ter um mecanismo de link anti-roubo, é recomendável salvar a imagem e carregá-la diretamente (img-BHhb2NlV-1667490230492)(file:///c:/user/default/ AppData/Local/Temp/msohtmlclip1 /01/clip_image001.gif)]

Conforme mostrado no fluxograma do algoritmo acima, após o programa inicializar e limpar o espaço de trabalho para armazenar dados, primeiro leia a figura 1 e use a função rgb2gray para obter sua imagem em tons de cinza; após obter a imagem em tons de cinza, obtenha o diagrama de espectro de acordo para a transformada de Fourier, selecione a função bidimensional de transformação rápida de Fourier fft2 para processar a imagem em tons de cinza e use a função fftshift no espectrograma para mover o componente de frequência 0 no espectrograma para o centro do espectrograma; então, respectivamente, do espectrograma para o mapa de potência, e do espectrograma para o mapa de fase A fórmula para calcular o diagrama de potência e o diagrama de fase da imagem;

Ao executar o programa pela primeira vez, uma mensagem de prompt aparece: "Aviso: Exiba a parte real do item de entrada complexo". Depois de consultar as informações relevantes, sabe-se que, se a imagem for exibida diretamente pela função imshow após a transformada de Fourier , o erro acima será solicitado. Portanto, é necessário realizar um processamento secundário no mapa de fase processado e no mapa de potência, ou seja, usar a função abs para obter o módulo de sua matriz complexa e otimizar a exibição da imagem com transformação logarítmica.

Acho que você gosta

Origin blog.csdn.net/TianHW103/article/details/127680724
Recomendado
Clasificación