Processamento de Imagem Digital: Experimento 3

Prefácio:

Programa Matlab e link de recurso de imagem

1. Use o método de transformação linear em tons de cinza (g(x,y)=k*f(x,y)+d) para realizar três transformações em tons de cinza em uma imagem (personalizada), incluindo aprimoramento de contraste, aumento de brilho e inversão. É necessário apresentar a imagem original e a imagem após a transformação em tons de cinza e explicar o processo de processamento e os resultados do processamento;

Programa Matlab: (versão 2016a)


	clc;  
	clear;  
	close all;  
	% 对灰度图进行灰度线性变换  
	img = imread('hua.jpg');  
	img = rgb2gray(img);  
	%k大于1 增大图像的对比度,图像的像素值在变换后全部增大,整体效果被增强  
	k = 1.25;  
	d = 0;  
	gray1 = img * k + d;  
	%k等于1 通过调整b ,实现对图像亮度的调整  
	k = 1;  
	d = 50;  
	gray2 = img * k + d;  
	%k∈(0,1) 图像的对比度被削弱  
	k = 0.5;  
	d = 0;  
	gray3 = img * k + d;  
	%k小于0 原来图像亮的区域变暗,原来图像暗的区域变亮 取反  
	k = -1;  
	d = 255;  
	img_1 = im2double(img);  
	gray4 = img_1 * k + 1.0;  
	subplot(5,2,1),imshow(img),title('原图');  
	subplot(5,2,2),imhist(img),title('原图直方图');  
	subplot(5,2,3),imshow(gray1),title('k>0 d=0');%增大对比度  
	subplot(5,2,4),imhist(gray1),title('k>0 d=0直方图');  
	subplot(5,2,5),imshow(gray2),title('k=1 d=50');%调节亮度  
	subplot(5,2,6),imhist(gray2),title('k=1 d=50直方图');  
	subplot(5,2,7),imshow(gray3),title('k=0.5 d=0');%对比度削弱  
	subplot(5,2,8),imhist(gray3),title('k=0.5 d=0直方图');  
	subplot(5,2,9),imshow(gray4),title('k=-1 d=255');%取反  
	subplot(5,2,10),imhist(gray4),title('k=-1 d=255直方图');  

Imagem original, imagem processada:

insira a descrição da imagem aqui

Descrição do processo e resultados do processamento:

A transformação linear em tons de cinza é transformar os valores de pixel da imagem por meio de uma função linear especificada para aumentar ou reduzir a escala de cinza da imagem.
A fórmula da transformação linear em tons de cinza é uma função linear unidimensional comum:
g(x,y)=k*f(x,y)+d
Seja x o valor original em tons de cinza, então o valor transformado em tons de cinza y:
y= kx +d (0≤y≤255)
Ao alterar os valores de K e D, o processamento linear da escala de cinza da imagem pode ser realizado. Através dos resultados do programa em execução, podemos ver que: quando k>1, a textura da flor é mais clara que a imagem original e o contraste da imagem é aumentado, e quando 0<k<1, o contraste e o efeito geral de a imagem está enfraquecida. E quando k=1, o brilho geral da imagem pode ser ajustado ajustando o valor D. Para obter a configuração da imagem invertida k<0, verifica-se que a imagem obtida mudou significativamente em relação à imagem original, na qual as áreas mais claras da imagem original se tornam mais escuras, enquanto as áreas mais escuras se tornam mais claras, e um comportamento semelhante foto é obtida Efeito negativo.

2. Use o método de transformação de limite de escala de cinza para exibir o valor binário da imagem de destino e o fundo em uma imagem. É necessário apresentar a imagem original e a imagem após a transformação de limite de escala de cinza e explicar o processo de processamento e os resultados do processamento;

Programa Matlab: (versão 2016a)

    %清空工作区  
	clc,clear,close all;  
	%读入原图像  
	img = imread('paizi.jpg');  
	imggray=rgb2gray(img);  
	%采用OTSU算法来获取全局阈值,自动选取阈值  
	img_i = graythresh(img);    
	Image2 = im2bw(img,img_i);%二值化  
	%人工选定阈值进行分割,选择阈值为观察直方图波峰所得  
	T1=70;  
	[width,height]=size(imggray);  
	Image1 = zeros(width,height);  
	for i=1:width  
	    for j=1:height  
	        if(imggray(i,j)<T1)  
	            Image1(i,j)=0;  
	        else   
	            Image1(i,j)=1;  
	        end  
	    end  
	end  
	subplot(3,2,1);imshow(img);title('原图');  
	subplot(3,2,2);imhist(imggray);title('原图直方图');  
	subplot(3,2,3);imshow(Image1),title('全局阈值分割效果图');  
	subplot(3,2,4);imhist(Image1);title('全局阈值分割直方图');  
	subplot(3,2,5);imshow(Image2),title('OTUS分割效果图');  
	subplot(3,2,6);imhist(Image2);title('OTUS分割直方图');  

Imagem original, imagem processada;

insira a descrição da imagem aqui

Descrição do processo e resultados do processamento:

De acordo com as informações, o histograma de cinza é uma função da distribuição dos níveis de cinza. Quando a imagem na imagem em tons de cinza é relativamente simples e a distribuição em tons de cinza do objeto é relativamente regular, o fundo e o objeto formam um pico no histograma em tons de cinza da imagem. Como uma depressão é formada entre cada dois picos, picos duplos são selecionado. O valor de cinza correspondente ao vale no intervalo é o limite, que pode separar as duas regiões. Com base nesse princípio, primeiro convertemos a imagem em uma imagem em escala de cinza e a exibimos como um histograma em escala de cinza.Ao observar o histograma em escala de cinza, selecionamos o vale entre os picos mais óbvios como nosso limite manual.
Dois algoritmos (método de segmentação de limite global e método de Otsu de limite global) são selecionados para a segmentação de binarização.
Método de segmentação de limite global:
Apenas um limite é usado em toda a imagem, e esse método é chamado de método de limite global. A imagem inteira é dividida em duas regiões, ou seja, o objeto de destino (preto) e o objeto de fundo (branco). Limiar global limita a escala de cinza de toda a imagem para um valor constante. Aqui escolhemos 70 como o limite inicial para processamento de acordo com o histograma. O diagrama de efeitos mostra que esse método é viável, o plano de fundo e o outdoor são segmentados e as palavras do anúncio da marca são claras; o algoritmo
Otsu
obtém principalmente o valor do limite de cinza por meio da função graythresh e, em seguida, usa a função im2bw para converter em um valor binário.
Pode-se ver nas duas operações que o algoritmo Otsu obviamente tem um melhor efeito de processamento, e o processo de limiarização na imagem é obviamente mais disperso em valores de pixel, o que é melhorado ainda mais do que o efeito de segmentação global de um único limiar no histograma .

3. O realce de contraste é realizado em uma imagem (como mostrado na Figura 3.2) por transformação linear segmentada em tons de cinza (como mostrado na Figura 3.1). É necessário apresentar a imagem original e a imagem após a transformação em escala de cinza e explicar o processo de processamento e os resultados do processamento.

insira a descrição da imagem aqui

Figura 3.1 Transformação linear por partes
insira a descrição da imagem aqui

Figura 3.2 Imagem original

Programa Matlab: (versão 2016a)

	clc;clear;close all;  
	Image = im2double(rgb2gray(imread('zuoye.jpg')));  %读取并对图做处理  
	[h,w] = size(Image);        % 获取图像尺寸  h:height,高度;w:width 宽度  
	NewImage1 = zeros(h,w);      %  赋初值  
	NewImage2 = zeros(h,w);         
	NewImage3 = Image;             
	%确定abcd四个参数的值 
	a = 30/256;b = 100/256;c= 75/256;d= 200/256;             
	for x = 1 : w               % 最外层循环 宽度  
	    for y = 1 : h           % 内层循环   高度  
	        % 在灰度图像中 按列从上至下循环   
	        if Image(y,x)<a     %若(y,x)处值<a时   
	            NewImage1(y,x) = Image(y,x)*c/a;   
	        elseif Image(y,x)<b  % 若(y,x)处值<b时   
	            NewImage1(y,x) = (Image(y,x)-a)*(d-c)/(b-a)+c;  
	        else                 % 其他情况 做以下处理  
	            NewImage1(y,x) = (Image(y,x)-b)*(1-d)/(1-b)+d;  
	        end  
	        if Image(y,x)>a&& Image(y,x)<b    % 介于(a,b)之间  做下行处理  
	            NewImage3(y,x) = (Image(y,x)-a)*(d-c)/(b-a)+c;  
	        end  
	    end  
	end  
	NewImage2 = imadjust(Image,[a;b],[c;d]);     
	figure;  
	subplot(2,2,1);imshow(Image);title('原始图像');    
	subplot(2,2,3);imshow(NewImage1);title('分段线性灰度级变换图像');  
	subplot(2,2,2);imhist(Image);title('原始图像直方图');    
	subplot(2,2,4);imhist(NewImage1);title('分段线性灰度级变换图像直方图');  
	figure;  
	subplot(2,2,1);imshow(NewImage2);title('截断式灰度级变换图像');    
	subplot(2,2,3);imshow(NewImage3);title('高低灰度级保持不变图像');  
	subplot(2,2,2);imhist(NewImage2);title('截断式灰度级变换图像直方图');    
	subplot(2,2,4);imhist(NewImage3);title('高低灰度级保持不变图像直方图');  

Imagem original, imagem processada;

insira a descrição da imagem aqui
insira a descrição da imagem aqui

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

Quando a imagem está subexposta ou superexposta, o nível de cinza da imagem pode ser limitado a uma pequena faixa, e o que você vê neste momento será uma imagem borrada sem níveis de cinza. O uso de uma função linear de valor único para expandir linearmente cada pixel na imagem melhorará efetivamente o efeito visual da imagem.
Semelhante à transformação linear em tons de cinza, a transformação linear por partes é uma transformação linear realizada em segmentos, que divide o intervalo de tons de cinza da imagem em dois ou mais segmentos e executa diferentes transformações lineares, respectivamente. O objetivo da transformação linear por partes é destacar o alvo ou intervalo de escala de cinza de interesse e suprimir relativamente as regiões de escala de cinza que não são de interesse. A transformação pode ser expressa como:
insira a descrição da imagem aqui
f é o valor de cinza da imagem original, g é o valor de cinza da imagem após a transformação linear da escala de cinza;
ideia de programação:
primeiro leia e processe a imagem, obtenha o tamanho da imagem e atribua valores iniciais ​​para vários valores de imagens são usados ​​​​para armazenamento subsequente. Depois de determinar os valores dos quatro parâmetros de abcd, dois ninhos de loop são usados ​​para percorrer o array de imagens para realizar a operação da função de segmento. Então, de acordo com diferentes situações, operações correspondentes são realizadas para diferentes valores de segmentos. Finalmente, os resultados são exibidos em um histograma.
Análise experimental:
Sabendo que o valor abcd é diferente, pode haver quatro situações, a saber, o valor em (y, x) < a, o valor em (y, x) < b, entre (a, b) e outras Situação , as inclinações dos quatro casos são diferentes e, de acordo com a lei de transformação do valor de cinza, pode-se saber que a
inclinação afeta o contraste da imagem, então a parte do baixo valor de cinza deve ser comprimida e o efeito é que a parte escura é mais escura e o contraste é menor. , como resultado da imagem, podemos ver claramente que o fundo escuro é mais escuro e, combinado com o histograma, podemos ver que a parte de baixo valor de cinza é compactada para um valor de cinza mais baixo.
Correspondente a ela está a parte de alto valor de cinza. Podemos ver pela curva de transformação que o valor dessa parte aumenta, indicando que a parte geral de alto valor de cinza muda para a direita do eixo x, e o resultado é que o brilho parte fica mais brilhante.
Resumo:
A função linear por partes também é uma operação de ponto, aprimoramento de imagem baseado em pixel, ou seja, alongamento de contraste. O princípio geral é: o processo de mapear o valor de cinza de diferentes intervalos de escala de cinza para outro intervalo de escala de cinza por meio de diferentes funções de mapeamento.

Acho que você gosta

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